diff --git a/Penumbra.GameData/.editorconfig b/Penumbra.GameData/.editorconfig deleted file mode 100644 index 0bbaa114..00000000 --- a/Penumbra.GameData/.editorconfig +++ /dev/null @@ -1,3623 +0,0 @@ - -[*.proto] -indent_style=tab -indent_size=tab -tab_width=4 - -[*.{asax,ascx,aspx,axaml,cs,cshtml,css,htm,html,js,jsx,master,paml,razor,skin,ts,tsx,vb,xaml,xamlx,xoml}] -indent_style=space -indent_size=4 -tab_width=4 - -[*.{appxmanifest,axml,build,config,csproj,dbml,discomap,dtd,json,jsproj,lsproj,njsproj,nuspec,proj,props,resjson,resw,resx,StyleCop,targets,tasks,vbproj,xml,xsd}] -indent_style=space -indent_size=2 -tab_width=2 - -[*] - -# Microsoft .NET properties -csharp_indent_braces=false -csharp_indent_switch_labels=true -csharp_new_line_before_catch=true -csharp_new_line_before_else=true -csharp_new_line_before_finally=true -csharp_new_line_before_members_in_object_initializers=true -csharp_new_line_before_open_brace=all -csharp_new_line_between_query_expression_clauses=true -csharp_preferred_modifier_order=public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion -csharp_preserve_single_line_blocks=true -csharp_space_after_cast=false -csharp_space_after_colon_in_inheritance_clause=true -csharp_space_after_comma=true -csharp_space_after_dot=false -csharp_space_after_keywords_in_control_flow_statements=true -csharp_space_after_semicolon_in_for_statement=true -csharp_space_around_binary_operators=before_and_after -csharp_space_before_colon_in_inheritance_clause=true -csharp_space_before_comma=false -csharp_space_before_dot=false -csharp_space_before_open_square_brackets=false -csharp_space_before_semicolon_in_for_statement=false -csharp_space_between_empty_square_brackets=false -csharp_space_between_method_call_empty_parameter_list_parentheses=false -csharp_space_between_method_call_name_and_opening_parenthesis=false -csharp_space_between_method_call_parameter_list_parentheses=false -csharp_space_between_method_declaration_empty_parameter_list_parentheses=false -csharp_space_between_method_declaration_name_and_open_parenthesis=false -csharp_space_between_method_declaration_parameter_list_parentheses=false -csharp_space_between_parentheses=false -csharp_space_between_square_brackets=false -csharp_style_namespace_declarations= file_scoped:suggestion -csharp_style_var_elsewhere=true:suggestion -csharp_style_var_for_built_in_types=true:suggestion -csharp_style_var_when_type_is_apparent=true:suggestion -csharp_using_directive_placement= outside_namespace:silent -dotnet_diagnostic.bc40000.severity=warning -dotnet_diagnostic.bc400005.severity=warning -dotnet_diagnostic.bc40008.severity=warning -dotnet_diagnostic.bc40056.severity=warning -dotnet_diagnostic.bc42016.severity=warning -dotnet_diagnostic.bc42024.severity=warning -dotnet_diagnostic.bc42025.severity=warning -dotnet_diagnostic.bc42104.severity=warning -dotnet_diagnostic.bc42105.severity=warning -dotnet_diagnostic.bc42106.severity=warning -dotnet_diagnostic.bc42107.severity=warning -dotnet_diagnostic.bc42304.severity=warning -dotnet_diagnostic.bc42309.severity=warning -dotnet_diagnostic.bc42322.severity=warning -dotnet_diagnostic.bc42349.severity=warning -dotnet_diagnostic.bc42353.severity=warning -dotnet_diagnostic.bc42354.severity=warning -dotnet_diagnostic.bc42355.severity=warning -dotnet_diagnostic.bc42356.severity=warning -dotnet_diagnostic.bc42358.severity=warning -dotnet_diagnostic.bc42504.severity=warning -dotnet_diagnostic.bc42505.severity=warning -dotnet_diagnostic.cs0067.severity=warning -dotnet_diagnostic.cs0078.severity=warning -dotnet_diagnostic.cs0108.severity=warning -dotnet_diagnostic.cs0109.severity=warning -dotnet_diagnostic.cs0114.severity=warning -dotnet_diagnostic.cs0162.severity=warning -dotnet_diagnostic.cs0164.severity=warning -dotnet_diagnostic.cs0168.severity=warning -dotnet_diagnostic.cs0169.severity=warning -dotnet_diagnostic.cs0183.severity=warning -dotnet_diagnostic.cs0184.severity=warning -dotnet_diagnostic.cs0197.severity=warning -dotnet_diagnostic.cs0219.severity=warning -dotnet_diagnostic.cs0252.severity=warning -dotnet_diagnostic.cs0253.severity=warning -dotnet_diagnostic.cs0414.severity=warning -dotnet_diagnostic.cs0420.severity=warning -dotnet_diagnostic.cs0465.severity=warning -dotnet_diagnostic.cs0469.severity=warning -dotnet_diagnostic.cs0612.severity=warning -dotnet_diagnostic.cs0618.severity=warning -dotnet_diagnostic.cs0628.severity=warning -dotnet_diagnostic.cs0642.severity=warning -dotnet_diagnostic.cs0649.severity=warning -dotnet_diagnostic.cs0652.severity=warning -dotnet_diagnostic.cs0657.severity=warning -dotnet_diagnostic.cs0658.severity=warning -dotnet_diagnostic.cs0659.severity=warning -dotnet_diagnostic.cs0660.severity=warning -dotnet_diagnostic.cs0661.severity=warning -dotnet_diagnostic.cs0665.severity=warning -dotnet_diagnostic.cs0672.severity=warning -dotnet_diagnostic.cs0675.severity=warning -dotnet_diagnostic.cs0693.severity=warning -dotnet_diagnostic.cs1030.severity=warning -dotnet_diagnostic.cs1058.severity=warning -dotnet_diagnostic.cs1066.severity=warning -dotnet_diagnostic.cs1522.severity=warning -dotnet_diagnostic.cs1570.severity=warning -dotnet_diagnostic.cs1571.severity=warning -dotnet_diagnostic.cs1572.severity=warning -dotnet_diagnostic.cs1573.severity=warning -dotnet_diagnostic.cs1574.severity=warning -dotnet_diagnostic.cs1580.severity=warning -dotnet_diagnostic.cs1581.severity=warning -dotnet_diagnostic.cs1584.severity=warning -dotnet_diagnostic.cs1587.severity=warning -dotnet_diagnostic.cs1589.severity=warning -dotnet_diagnostic.cs1590.severity=warning -dotnet_diagnostic.cs1591.severity=warning -dotnet_diagnostic.cs1592.severity=warning -dotnet_diagnostic.cs1710.severity=warning -dotnet_diagnostic.cs1711.severity=warning -dotnet_diagnostic.cs1712.severity=warning -dotnet_diagnostic.cs1717.severity=warning -dotnet_diagnostic.cs1723.severity=warning -dotnet_diagnostic.cs1911.severity=warning -dotnet_diagnostic.cs1957.severity=warning -dotnet_diagnostic.cs1981.severity=warning -dotnet_diagnostic.cs1998.severity=warning -dotnet_diagnostic.cs4014.severity=warning -dotnet_diagnostic.cs7022.severity=warning -dotnet_diagnostic.cs7023.severity=warning -dotnet_diagnostic.cs7095.severity=warning -dotnet_diagnostic.cs8094.severity=warning -dotnet_diagnostic.cs8123.severity=warning -dotnet_diagnostic.cs8321.severity=warning -dotnet_diagnostic.cs8383.severity=warning -dotnet_diagnostic.cs8416.severity=warning -dotnet_diagnostic.cs8417.severity=warning -dotnet_diagnostic.cs8424.severity=warning -dotnet_diagnostic.cs8425.severity=warning -dotnet_diagnostic.cs8509.severity=warning -dotnet_diagnostic.cs8524.severity=warning -dotnet_diagnostic.cs8597.severity=warning -dotnet_diagnostic.cs8600.severity=warning -dotnet_diagnostic.cs8601.severity=warning -dotnet_diagnostic.cs8602.severity=warning -dotnet_diagnostic.cs8603.severity=warning -dotnet_diagnostic.cs8604.severity=warning -dotnet_diagnostic.cs8605.severity=warning -dotnet_diagnostic.cs8607.severity=warning -dotnet_diagnostic.cs8608.severity=warning -dotnet_diagnostic.cs8609.severity=warning -dotnet_diagnostic.cs8610.severity=warning -dotnet_diagnostic.cs8611.severity=warning -dotnet_diagnostic.cs8612.severity=warning -dotnet_diagnostic.cs8613.severity=warning -dotnet_diagnostic.cs8614.severity=warning -dotnet_diagnostic.cs8615.severity=warning -dotnet_diagnostic.cs8616.severity=warning -dotnet_diagnostic.cs8617.severity=warning -dotnet_diagnostic.cs8618.severity=warning -dotnet_diagnostic.cs8619.severity=warning -dotnet_diagnostic.cs8620.severity=warning -dotnet_diagnostic.cs8621.severity=warning -dotnet_diagnostic.cs8622.severity=warning -dotnet_diagnostic.cs8624.severity=warning -dotnet_diagnostic.cs8625.severity=warning -dotnet_diagnostic.cs8629.severity=warning -dotnet_diagnostic.cs8631.severity=warning -dotnet_diagnostic.cs8632.severity=none -dotnet_diagnostic.cs8633.severity=warning -dotnet_diagnostic.cs8634.severity=warning -dotnet_diagnostic.cs8643.severity=warning -dotnet_diagnostic.cs8644.severity=warning -dotnet_diagnostic.cs8645.severity=warning -dotnet_diagnostic.cs8655.severity=warning -dotnet_diagnostic.cs8656.severity=warning -dotnet_diagnostic.cs8667.severity=warning -dotnet_diagnostic.cs8669.severity=none -dotnet_diagnostic.cs8670.severity=warning -dotnet_diagnostic.cs8714.severity=warning -dotnet_diagnostic.cs8762.severity=warning -dotnet_diagnostic.cs8763.severity=warning -dotnet_diagnostic.cs8764.severity=warning -dotnet_diagnostic.cs8765.severity=warning -dotnet_diagnostic.cs8766.severity=warning -dotnet_diagnostic.cs8767.severity=warning -dotnet_diagnostic.cs8768.severity=warning -dotnet_diagnostic.cs8769.severity=warning -dotnet_diagnostic.cs8770.severity=warning -dotnet_diagnostic.cs8774.severity=warning -dotnet_diagnostic.cs8775.severity=warning -dotnet_diagnostic.cs8776.severity=warning -dotnet_diagnostic.cs8777.severity=warning -dotnet_diagnostic.cs8794.severity=warning -dotnet_diagnostic.cs8819.severity=warning -dotnet_diagnostic.cs8824.severity=warning -dotnet_diagnostic.cs8825.severity=warning -dotnet_diagnostic.cs8846.severity=warning -dotnet_diagnostic.cs8847.severity=warning -dotnet_diagnostic.cs8851.severity=warning -dotnet_diagnostic.cs8860.severity=warning -dotnet_diagnostic.cs8892.severity=warning -dotnet_diagnostic.cs8907.severity=warning -dotnet_diagnostic.cs8947.severity=warning -dotnet_diagnostic.cs8960.severity=warning -dotnet_diagnostic.cs8961.severity=warning -dotnet_diagnostic.cs8962.severity=warning -dotnet_diagnostic.cs8963.severity=warning -dotnet_diagnostic.cs8965.severity=warning -dotnet_diagnostic.cs8966.severity=warning -dotnet_diagnostic.cs8971.severity=warning -dotnet_diagnostic.wme006.severity=warning -dotnet_naming_rule.constants_rule.import_to_resharper=as_predefined -dotnet_naming_rule.constants_rule.severity = warning -dotnet_naming_rule.constants_rule.style = upper_camel_case_style -dotnet_naming_rule.constants_rule.symbols=constants_symbols -dotnet_naming_rule.event_rule.import_to_resharper=as_predefined -dotnet_naming_rule.event_rule.severity = warning -dotnet_naming_rule.event_rule.style = upper_camel_case_style -dotnet_naming_rule.event_rule.symbols=event_symbols -dotnet_naming_rule.interfaces_rule.import_to_resharper=as_predefined -dotnet_naming_rule.interfaces_rule.severity = warning -dotnet_naming_rule.interfaces_rule.style = i_upper_camel_case_style -dotnet_naming_rule.interfaces_rule.symbols=interfaces_symbols -dotnet_naming_rule.locals_rule.import_to_resharper=as_predefined -dotnet_naming_rule.locals_rule.severity = warning -dotnet_naming_rule.locals_rule.style = lower_camel_case_style_1 -dotnet_naming_rule.locals_rule.symbols=locals_symbols -dotnet_naming_rule.local_constants_rule.import_to_resharper=as_predefined -dotnet_naming_rule.local_constants_rule.severity = warning -dotnet_naming_rule.local_constants_rule.style = lower_camel_case_style_1 -dotnet_naming_rule.local_constants_rule.symbols=local_constants_symbols -dotnet_naming_rule.local_functions_rule.import_to_resharper=as_predefined -dotnet_naming_rule.local_functions_rule.severity = warning -dotnet_naming_rule.local_functions_rule.style = upper_camel_case_style -dotnet_naming_rule.local_functions_rule.symbols=local_functions_symbols -dotnet_naming_rule.method_rule.import_to_resharper=as_predefined -dotnet_naming_rule.method_rule.severity = warning -dotnet_naming_rule.method_rule.style = upper_camel_case_style -dotnet_naming_rule.method_rule.symbols=method_symbols -dotnet_naming_rule.parameters_rule.import_to_resharper=as_predefined -dotnet_naming_rule.parameters_rule.severity = warning -dotnet_naming_rule.parameters_rule.style = lower_camel_case_style_1 -dotnet_naming_rule.parameters_rule.symbols=parameters_symbols -dotnet_naming_rule.private_constants_rule.import_to_resharper=as_predefined -dotnet_naming_rule.private_constants_rule.severity = warning -dotnet_naming_rule.private_constants_rule.style = upper_camel_case_style -dotnet_naming_rule.private_constants_rule.symbols=private_constants_symbols -dotnet_naming_rule.private_instance_fields_rule.import_to_resharper=as_predefined -dotnet_naming_rule.private_instance_fields_rule.severity = warning -dotnet_naming_rule.private_instance_fields_rule.style = lower_camel_case_style -dotnet_naming_rule.private_instance_fields_rule.symbols=private_instance_fields_symbols -dotnet_naming_rule.private_static_fields_rule.import_to_resharper=as_predefined -dotnet_naming_rule.private_static_fields_rule.severity = warning -dotnet_naming_rule.private_static_fields_rule.style = lower_camel_case_style -dotnet_naming_rule.private_static_fields_rule.symbols=private_static_fields_symbols -dotnet_naming_rule.private_static_readonly_rule.import_to_resharper=as_predefined -dotnet_naming_rule.private_static_readonly_rule.severity = warning -dotnet_naming_rule.private_static_readonly_rule.style = upper_camel_case_style -dotnet_naming_rule.private_static_readonly_rule.symbols=private_static_readonly_symbols -dotnet_naming_rule.property_rule.import_to_resharper=as_predefined -dotnet_naming_rule.property_rule.severity = warning -dotnet_naming_rule.property_rule.style = upper_camel_case_style -dotnet_naming_rule.property_rule.symbols=property_symbols -dotnet_naming_rule.public_fields_rule.import_to_resharper=as_predefined -dotnet_naming_rule.public_fields_rule.severity = warning -dotnet_naming_rule.public_fields_rule.style = upper_camel_case_style -dotnet_naming_rule.public_fields_rule.symbols=public_fields_symbols -dotnet_naming_rule.static_readonly_rule.import_to_resharper=as_predefined -dotnet_naming_rule.static_readonly_rule.severity = warning -dotnet_naming_rule.static_readonly_rule.style = upper_camel_case_style -dotnet_naming_rule.static_readonly_rule.symbols=static_readonly_symbols -dotnet_naming_rule.types_and_namespaces_rule.import_to_resharper=as_predefined -dotnet_naming_rule.types_and_namespaces_rule.severity = warning -dotnet_naming_rule.types_and_namespaces_rule.style = upper_camel_case_style -dotnet_naming_rule.types_and_namespaces_rule.symbols=types_and_namespaces_symbols -dotnet_naming_rule.type_parameters_rule.import_to_resharper=as_predefined -dotnet_naming_rule.type_parameters_rule.severity = warning -dotnet_naming_rule.type_parameters_rule.style = t_upper_camel_case_style -dotnet_naming_rule.type_parameters_rule.symbols=type_parameters_symbols -dotnet_naming_style.i_upper_camel_case_style.capitalization=pascal_case -dotnet_naming_style.i_upper_camel_case_style.required_prefix=I -dotnet_naming_style.lower_camel_case_style.capitalization=camel_case -dotnet_naming_style.lower_camel_case_style.required_prefix=_ -dotnet_naming_style.lower_camel_case_style_1.capitalization=camel_case -dotnet_naming_style.t_upper_camel_case_style.capitalization=pascal_case -dotnet_naming_style.t_upper_camel_case_style.required_prefix=T -dotnet_naming_style.upper_camel_case_style.capitalization=pascal_case -dotnet_naming_symbols.constants_symbols.applicable_accessibilities=public,internal,protected,protected_internal,private_protected -dotnet_naming_symbols.constants_symbols.applicable_kinds=field -dotnet_naming_symbols.constants_symbols.required_modifiers=const -dotnet_naming_symbols.event_symbols.applicable_accessibilities=* -dotnet_naming_symbols.event_symbols.applicable_kinds=event -dotnet_naming_symbols.interfaces_symbols.applicable_accessibilities=* -dotnet_naming_symbols.interfaces_symbols.applicable_kinds=interface -dotnet_naming_symbols.locals_symbols.applicable_accessibilities=* -dotnet_naming_symbols.locals_symbols.applicable_kinds=local -dotnet_naming_symbols.local_constants_symbols.applicable_accessibilities=* -dotnet_naming_symbols.local_constants_symbols.applicable_kinds=local -dotnet_naming_symbols.local_constants_symbols.required_modifiers=const -dotnet_naming_symbols.local_functions_symbols.applicable_accessibilities=* -dotnet_naming_symbols.local_functions_symbols.applicable_kinds=local_function -dotnet_naming_symbols.method_symbols.applicable_accessibilities=* -dotnet_naming_symbols.method_symbols.applicable_kinds=method -dotnet_naming_symbols.parameters_symbols.applicable_accessibilities=* -dotnet_naming_symbols.parameters_symbols.applicable_kinds=parameter -dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities=private -dotnet_naming_symbols.private_constants_symbols.applicable_kinds=field -dotnet_naming_symbols.private_constants_symbols.required_modifiers=const -dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities=private -dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds=field -dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities=private -dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds=field -dotnet_naming_symbols.private_static_fields_symbols.required_modifiers=static -dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities=private -dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds=field -dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers=static,readonly -dotnet_naming_symbols.property_symbols.applicable_accessibilities=* -dotnet_naming_symbols.property_symbols.applicable_kinds=property -dotnet_naming_symbols.public_fields_symbols.applicable_accessibilities=public,internal,protected,protected_internal,private_protected -dotnet_naming_symbols.public_fields_symbols.applicable_kinds=field -dotnet_naming_symbols.static_readonly_symbols.applicable_accessibilities=public,internal,protected,protected_internal,private_protected -dotnet_naming_symbols.static_readonly_symbols.applicable_kinds=field -dotnet_naming_symbols.static_readonly_symbols.required_modifiers=static,readonly -dotnet_naming_symbols.types_and_namespaces_symbols.applicable_accessibilities=* -dotnet_naming_symbols.types_and_namespaces_symbols.applicable_kinds=namespace,class,struct,enum,delegate -dotnet_naming_symbols.type_parameters_symbols.applicable_accessibilities=* -dotnet_naming_symbols.type_parameters_symbols.applicable_kinds=type_parameter -dotnet_separate_import_directive_groups=false -dotnet_sort_system_directives_first=true -dotnet_style_parentheses_in_arithmetic_binary_operators=never_if_unnecessary:suggestion -dotnet_style_parentheses_in_other_binary_operators=never_if_unnecessary:suggestion -dotnet_style_parentheses_in_relational_binary_operators=never_if_unnecessary:suggestion -dotnet_style_predefined_type_for_locals_parameters_members=true:suggestion -dotnet_style_predefined_type_for_member_access=true:suggestion -dotnet_style_qualification_for_event=false:suggestion -dotnet_style_qualification_for_field=false:suggestion -dotnet_style_qualification_for_method=false:suggestion -dotnet_style_qualification_for_property=false:suggestion -dotnet_style_require_accessibility_modifiers=for_non_interface_members:suggestion -file_header_template= - -# ReSharper properties -resharper_accessor_owner_body=expression_body -resharper_alignment_tab_fill_style=use_spaces -resharper_align_first_arg_by_paren=false -resharper_align_linq_query=false -resharper_align_multiline_argument=true -resharper_align_multiline_array_and_object_initializer=false -resharper_align_multiline_array_initializer=true -resharper_align_multiline_binary_expressions_chain=false -resharper_align_multiline_binary_patterns=false -resharper_align_multiline_ctor_init=true -resharper_align_multiline_expression_braces=false -resharper_align_multiline_implements_list=true -resharper_align_multiline_property_pattern=false -resharper_align_multiline_statement_conditions=true -resharper_align_multiline_switch_expression=false -resharper_align_multiline_type_argument=true -resharper_align_multiline_type_parameter=true -resharper_align_multline_type_parameter_constrains=true -resharper_align_multline_type_parameter_list=false -resharper_align_tuple_components=false -resharper_align_union_type_usage=true -resharper_allow_alias=true -resharper_allow_comment_after_lbrace=false -resharper_allow_far_alignment=false -resharper_always_use_end_of_line_brace_style=false -resharper_apply_auto_detected_rules=false -resharper_apply_on_completion=false -resharper_arguments_anonymous_function=positional -resharper_arguments_literal=positional -resharper_arguments_named=positional -resharper_arguments_other=positional -resharper_arguments_skip_single=false -resharper_arguments_string_literal=positional -resharper_attribute_style=do_not_touch -resharper_autodetect_indent_settings=false -resharper_blank_lines_after_block_statements=1 -resharper_blank_lines_after_case=0 -resharper_blank_lines_after_control_transfer_statements=1 -resharper_blank_lines_after_file_scoped_namespace_directive=1 -resharper_blank_lines_after_imports=1 -resharper_blank_lines_after_multiline_statements=0 -resharper_blank_lines_after_options=1 -resharper_blank_lines_after_start_comment=1 -resharper_blank_lines_after_using_list=1 -resharper_blank_lines_around_accessor=0 -resharper_blank_lines_around_auto_property=1 -resharper_blank_lines_around_block_case_section=0 -resharper_blank_lines_around_class_definition=1 -resharper_blank_lines_around_field=1 -resharper_blank_lines_around_function_declaration=0 -resharper_blank_lines_around_function_definition=1 -resharper_blank_lines_around_global_attribute=0 -resharper_blank_lines_around_invocable=1 -resharper_blank_lines_around_local_method=1 -resharper_blank_lines_around_multiline_case_section=0 -resharper_blank_lines_around_namespace=1 -resharper_blank_lines_around_other_declaration=0 -resharper_blank_lines_around_property=1 -resharper_blank_lines_around_razor_functions=1 -resharper_blank_lines_around_razor_helpers=1 -resharper_blank_lines_around_razor_sections=1 -resharper_blank_lines_around_region=1 -resharper_blank_lines_around_single_line_accessor=0 -resharper_blank_lines_around_single_line_auto_property=0 -resharper_blank_lines_around_single_line_field=0 -resharper_blank_lines_around_single_line_function_definition=0 -resharper_blank_lines_around_single_line_invocable=0 -resharper_blank_lines_around_single_line_local_method=0 -resharper_blank_lines_around_single_line_property=0 -resharper_blank_lines_around_single_line_type=0 -resharper_blank_lines_around_type=1 -resharper_blank_lines_before_block_statements=0 -resharper_blank_lines_before_case=0 -resharper_blank_lines_before_control_transfer_statements=0 -resharper_blank_lines_before_multiline_statements=0 -resharper_blank_lines_before_single_line_comment=0 -resharper_blank_lines_inside_namespace=0 -resharper_blank_lines_inside_region=1 -resharper_blank_lines_inside_type=0 -resharper_blank_line_after_pi=true -resharper_braces_for_dowhile=required -resharper_braces_for_fixed=required -resharper_braces_for_for=required_for_multiline -resharper_braces_for_foreach=required_for_multiline -resharper_braces_for_ifelse=not_required_for_both -resharper_braces_for_lock=required -resharper_braces_for_using=required -resharper_braces_for_while=required_for_multiline -resharper_braces_redundant=true -resharper_break_template_declaration=line_break -resharper_can_use_global_alias=true -resharper_configure_await_analysis_mode=disabled -resharper_constructor_or_destructor_body=expression_body -resharper_continuous_indent_multiplier=1 -resharper_continuous_line_indent=single -resharper_cpp_align_multiline_argument=true -resharper_cpp_align_multiline_calls_chain=true -resharper_cpp_align_multiline_extends_list=true -resharper_cpp_align_multiline_for_stmt=true -resharper_cpp_align_multiline_parameter=true -resharper_cpp_align_multiple_declaration=true -resharper_cpp_align_ternary=align_not_nested -resharper_cpp_anonymous_method_declaration_braces=next_line -resharper_cpp_case_block_braces=next_line_shifted_2 -resharper_cpp_empty_block_style=multiline -resharper_cpp_indent_switch_labels=false -resharper_cpp_insert_final_newline=false -resharper_cpp_int_align_comments=false -resharper_cpp_invocable_declaration_braces=next_line -resharper_cpp_max_line_length=120 -resharper_cpp_new_line_before_catch=true -resharper_cpp_new_line_before_else=true -resharper_cpp_new_line_before_while=true -resharper_cpp_other_braces=next_line -resharper_cpp_space_around_binary_operator=true -resharper_cpp_type_declaration_braces=next_line -resharper_cpp_wrap_arguments_style=wrap_if_long -resharper_cpp_wrap_lines=true -resharper_cpp_wrap_parameters_style=wrap_if_long -resharper_csharp_align_multiline_argument=false -resharper_csharp_align_multiline_calls_chain=false -resharper_csharp_align_multiline_expression=false -resharper_csharp_align_multiline_extends_list=false -resharper_csharp_align_multiline_for_stmt=false -resharper_csharp_align_multiline_parameter=false -resharper_csharp_align_multiple_declaration=true -resharper_csharp_empty_block_style=together -resharper_csharp_insert_final_newline=true -resharper_csharp_int_align_comments=true -resharper_csharp_max_line_length=144 -resharper_csharp_naming_rule.enum_member=AaBb -resharper_csharp_naming_rule.method_property_event=AaBb -resharper_csharp_naming_rule.other=AaBb -resharper_csharp_new_line_before_while=false -resharper_csharp_prefer_qualified_reference=false -resharper_csharp_space_after_unary_operator=false -resharper_csharp_wrap_arguments_style=wrap_if_long -resharper_csharp_wrap_before_binary_opsign=true -resharper_csharp_wrap_for_stmt_header_style=wrap_if_long -resharper_csharp_wrap_lines=true -resharper_csharp_wrap_parameters_style=wrap_if_long -resharper_css_brace_style=end_of_line -resharper_css_insert_final_newline=false -resharper_css_keep_blank_lines_between_declarations=1 -resharper_css_max_line_length=120 -resharper_css_wrap_lines=true -resharper_cxxcli_property_declaration_braces=next_line -resharper_declarations_style=separate_lines -resharper_default_exception_variable_name=e -resharper_default_value_when_type_evident=default_literal -resharper_default_value_when_type_not_evident=default_literal -resharper_delete_quotes_from_solid_values=false -resharper_disable_blank_line_changes=false -resharper_disable_formatter=false -resharper_disable_indenter=false -resharper_disable_int_align=false -resharper_disable_line_break_changes=false -resharper_disable_line_break_removal=false -resharper_disable_space_changes=false -resharper_disable_space_changes_before_trailing_comment=false -resharper_dont_remove_extra_blank_lines=false -resharper_enable_wrapping=false -resharper_enforce_line_ending_style=false -resharper_event_handler_pattern_long=$object$On$event$ -resharper_event_handler_pattern_short=On$event$ -resharper_expression_braces=inside -resharper_expression_pars=inside -resharper_extra_spaces=remove_all -resharper_force_attribute_style=separate -resharper_force_chop_compound_do_expression=false -resharper_force_chop_compound_if_expression=false -resharper_force_chop_compound_while_expression=false -resharper_force_control_statements_braces=do_not_change -resharper_force_linebreaks_inside_complex_literals=true -resharper_force_variable_declarations_on_new_line=false -resharper_format_leading_spaces_decl=false -resharper_free_block_braces=next_line -resharper_function_declaration_return_type_style=do_not_change -resharper_function_definition_return_type_style=do_not_change -resharper_generator_mode=false -resharper_html_attribute_indent=align_by_first_attribute -resharper_html_insert_final_newline=false -resharper_html_linebreak_before_elements=body,div,p,form,h1,h2,h3 -resharper_html_max_blank_lines_between_tags=2 -resharper_html_max_line_length=120 -resharper_html_pi_attribute_style=on_single_line -resharper_html_space_before_self_closing=false -resharper_html_wrap_lines=true -resharper_ignore_space_preservation=false -resharper_include_prefix_comment_in_indent=false -resharper_indent_access_specifiers_from_class=false -resharper_indent_aligned_ternary=true -resharper_indent_anonymous_method_block=false -resharper_indent_braces_inside_statement_conditions=true -resharper_indent_case_from_select=true -resharper_indent_child_elements=OneIndent -resharper_indent_class_members_from_access_specifiers=false -resharper_indent_comment=true -resharper_indent_inside_namespace=true -resharper_indent_invocation_pars=inside -resharper_indent_left_par_inside_expression=false -resharper_indent_method_decl_pars=inside -resharper_indent_nested_fixed_stmt=false -resharper_indent_nested_foreach_stmt=true -resharper_indent_nested_for_stmt=true -resharper_indent_nested_lock_stmt=false -resharper_indent_nested_usings_stmt=false -resharper_indent_nested_while_stmt=true -resharper_indent_pars=inside -resharper_indent_preprocessor_directives=none -resharper_indent_preprocessor_if=no_indent -resharper_indent_preprocessor_other=no_indent -resharper_indent_preprocessor_region=usual_indent -resharper_indent_statement_pars=inside -resharper_indent_text=OneIndent -resharper_indent_typearg_angles=inside -resharper_indent_typeparam_angles=inside -resharper_indent_type_constraints=true -resharper_indent_wrapped_function_names=false -resharper_instance_members_qualify_declared_in=this_class, base_class -resharper_int_align=true -resharper_int_align_assignments=true -resharper_int_align_binary_expressions=false -resharper_int_align_declaration_names=false -resharper_int_align_eq=false -resharper_int_align_fields=true -resharper_int_align_fix_in_adjacent=true -resharper_int_align_invocations=true -resharper_int_align_methods=true -resharper_int_align_nested_ternary=true -resharper_int_align_parameters=false -resharper_int_align_properties=true -resharper_int_align_property_patterns=true -resharper_int_align_switch_expressions=true -resharper_int_align_switch_sections=true -resharper_int_align_variables=true -resharper_js_align_multiline_parameter=false -resharper_js_align_multiple_declaration=false -resharper_js_align_ternary=none -resharper_js_brace_style=end_of_line -resharper_js_empty_block_style=multiline -resharper_js_indent_switch_labels=false -resharper_js_insert_final_newline=false -resharper_js_keep_blank_lines_between_declarations=2 -resharper_js_max_line_length=120 -resharper_js_new_line_before_catch=false -resharper_js_new_line_before_else=false -resharper_js_new_line_before_finally=false -resharper_js_new_line_before_while=false -resharper_js_space_around_binary_operator=true -resharper_js_wrap_arguments_style=chop_if_long -resharper_js_wrap_before_binary_opsign=false -resharper_js_wrap_for_stmt_header_style=chop_if_long -resharper_js_wrap_lines=true -resharper_js_wrap_parameters_style=chop_if_long -resharper_keep_blank_lines_in_code=2 -resharper_keep_blank_lines_in_declarations=2 -resharper_keep_existing_attribute_arrangement=false -resharper_keep_existing_declaration_block_arrangement=false -resharper_keep_existing_declaration_parens_arrangement=true -resharper_keep_existing_embedded_arrangement=false -resharper_keep_existing_embedded_block_arrangement=false -resharper_keep_existing_enum_arrangement=false -resharper_keep_existing_expr_member_arrangement=false -resharper_keep_existing_initializer_arrangement=false -resharper_keep_existing_invocation_parens_arrangement=true -resharper_keep_existing_property_patterns_arrangement=true -resharper_keep_existing_switch_expression_arrangement=false -resharper_keep_nontrivial_alias=true -resharper_keep_user_linebreaks=true -resharper_keep_user_wrapping=true -resharper_linebreaks_around_razor_statements=true -resharper_linebreaks_inside_tags_for_elements_longer_than=2147483647 -resharper_linebreaks_inside_tags_for_elements_with_child_elements=true -resharper_linebreaks_inside_tags_for_multiline_elements=true -resharper_linebreak_before_all_elements=false -resharper_linebreak_before_multiline_elements=true -resharper_linebreak_before_singleline_elements=false -resharper_line_break_after_colon_in_member_initializer_lists=do_not_change -resharper_line_break_after_comma_in_member_initializer_lists=false -resharper_line_break_before_comma_in_member_initializer_lists=false -resharper_line_break_before_requires_clause=do_not_change -resharper_linkage_specification_braces=end_of_line -resharper_linkage_specification_indentation=none -resharper_local_function_body=expression_body -resharper_macro_block_begin= -resharper_macro_block_end= -resharper_max_array_initializer_elements_on_line=10000 -resharper_max_attribute_length_for_same_line=38 -resharper_max_enum_members_on_line=1 -resharper_max_formal_parameters_on_line=10000 -resharper_max_initializer_elements_on_line=1 -resharper_max_invocation_arguments_on_line=10000 -resharper_media_query_style=same_line -resharper_member_initializer_list_style=do_not_change -resharper_method_or_operator_body=expression_body -resharper_min_blank_lines_after_imports=0 -resharper_min_blank_lines_around_fields=0 -resharper_min_blank_lines_around_functions=1 -resharper_min_blank_lines_around_types=1 -resharper_min_blank_lines_between_declarations=1 -resharper_namespace_declaration_braces=next_line -resharper_namespace_indentation=all -resharper_nested_ternary_style=autodetect -resharper_new_line_before_enumerators=true -resharper_normalize_tag_names=false -resharper_no_indent_inside_elements=html,body,thead,tbody,tfoot -resharper_no_indent_inside_if_element_longer_than=200 -resharper_object_creation_when_type_evident=target_typed -resharper_object_creation_when_type_not_evident=explicitly_typed -resharper_old_engine=false -resharper_options_braces_pointy=false -resharper_outdent_binary_ops=true -resharper_outdent_binary_pattern_ops=false -resharper_outdent_commas=false -resharper_outdent_dots=false -resharper_outdent_namespace_member=false -resharper_outdent_statement_labels=false -resharper_outdent_ternary_ops=false -resharper_parentheses_non_obvious_operations=none, bitwise, bitwise_inclusive_or, bitwise_exclusive_or, shift, bitwise_and -resharper_parentheses_redundancy_style=remove_if_not_clarifies_precedence -resharper_parentheses_same_type_operations=false -resharper_pi_attributes_indent=align_by_first_attribute -resharper_place_attribute_on_same_line=false -resharper_place_class_decorator_on_the_same_line=false -resharper_place_comments_at_first_column=false -resharper_place_constructor_initializer_on_same_line=false -resharper_place_each_decorator_on_new_line=false -resharper_place_event_attribute_on_same_line=false -resharper_place_expr_accessor_on_single_line=true -resharper_place_expr_method_on_single_line=false -resharper_place_expr_property_on_single_line=false -resharper_place_field_decorator_on_the_same_line=false -resharper_place_linq_into_on_new_line=true -resharper_place_method_decorator_on_the_same_line=false -resharper_place_namespace_definitions_on_same_line=false -resharper_place_property_attribute_on_same_line=false -resharper_place_property_decorator_on_the_same_line=false -resharper_place_simple_case_statement_on_same_line=if_owner_is_single_line -resharper_place_simple_embedded_statement_on_same_line=false -resharper_place_simple_enum_on_single_line=true -resharper_place_simple_initializer_on_single_line=true -resharper_place_simple_property_pattern_on_single_line=true -resharper_place_simple_switch_expression_on_single_line=true -resharper_place_template_args_on_new_line=false -resharper_place_type_constraints_on_same_line=true -resharper_prefer_explicit_discard_declaration=false -resharper_prefer_separate_deconstructed_variables_declaration=false -resharper_preserve_spaces_inside_tags=pre,textarea -resharper_properties_style=separate_lines_for_nonsingle -resharper_protobuf_brace_style=end_of_line -resharper_protobuf_empty_block_style=together_same_line -resharper_protobuf_insert_final_newline=false -resharper_protobuf_max_line_length=120 -resharper_protobuf_wrap_lines=true -resharper_qualified_using_at_nested_scope=false -resharper_quote_style=doublequoted -resharper_razor_prefer_qualified_reference=true -resharper_remove_blank_lines_near_braces=false -resharper_remove_blank_lines_near_braces_in_code=true -resharper_remove_blank_lines_near_braces_in_declarations=true -resharper_remove_this_qualifier=true -resharper_requires_expression_braces=next_line -resharper_resx_attribute_indent=single_indent -resharper_resx_insert_final_newline=false -resharper_resx_linebreak_before_elements= -resharper_resx_max_blank_lines_between_tags=0 -resharper_resx_max_line_length=2147483647 -resharper_resx_pi_attribute_style=do_not_touch -resharper_resx_space_before_self_closing=false -resharper_resx_wrap_lines=false -resharper_resx_wrap_tags_and_pi=false -resharper_resx_wrap_text=false -resharper_selector_style=same_line -resharper_show_autodetect_configure_formatting_tip=true -resharper_simple_blocks=do_not_change -resharper_simple_block_style=do_not_change -resharper_simple_case_statement_style=do_not_change -resharper_simple_embedded_statement_style=do_not_change -resharper_single_statement_function_style=do_not_change -resharper_sort_attributes=false -resharper_sort_class_selectors=false -resharper_sort_usings=true -resharper_sort_usings_lowercase_first=false -resharper_spaces_around_eq_in_attribute=false -resharper_spaces_around_eq_in_pi_attribute=false -resharper_spaces_inside_tags=false -resharper_space_after_arrow=true -resharper_space_after_attributes=true -resharper_space_after_attribute_target_colon=true -resharper_space_after_cast=false -resharper_space_after_colon=true -resharper_space_after_colon_in_case=true -resharper_space_after_colon_in_inheritance_clause=true -resharper_space_after_colon_in_type_annotation=true -resharper_space_after_comma=true -resharper_space_after_for_colon=true -resharper_space_after_function_comma=true -resharper_space_after_keywords_in_control_flow_statements=true -resharper_space_after_last_attribute=false -resharper_space_after_last_pi_attribute=false -resharper_space_after_media_colon=true -resharper_space_after_media_comma=true -resharper_space_after_operator_keyword=true -resharper_space_after_property_colon=true -resharper_space_after_property_semicolon=true -resharper_space_after_ptr_in_data_member=true -resharper_space_after_ptr_in_data_members=false -resharper_space_after_ptr_in_method=true -resharper_space_after_ref_in_data_member=true -resharper_space_after_ref_in_data_members=false -resharper_space_after_ref_in_method=true -resharper_space_after_selector_comma=true -resharper_space_after_semicolon_in_for_statement=true -resharper_space_after_separator=false -resharper_space_after_ternary_colon=true -resharper_space_after_ternary_quest=true -resharper_space_after_triple_slash=true -resharper_space_after_type_parameter_constraint_colon=true -resharper_space_around_additive_op=true -resharper_space_around_alias_eq=true -resharper_space_around_assignment_op=true -resharper_space_around_assignment_operator=true -resharper_space_around_attribute_match_operator=false -resharper_space_around_deref_in_trailing_return_type=true -resharper_space_around_lambda_arrow=true -resharper_space_around_member_access_operator=false -resharper_space_around_operator=true -resharper_space_around_pipe_or_amper_in_type_usage=true -resharper_space_around_relational_op=true -resharper_space_around_selector_operator=true -resharper_space_around_shift_op=true -resharper_space_around_stmt_colon=true -resharper_space_around_ternary_operator=true -resharper_space_before_array_rank_parentheses=false -resharper_space_before_arrow=true -resharper_space_before_attribute_target_colon=false -resharper_space_before_checked_parentheses=false -resharper_space_before_colon=false -resharper_space_before_colon_in_case=false -resharper_space_before_colon_in_inheritance_clause=true -resharper_space_before_colon_in_type_annotation=false -resharper_space_before_comma=false -resharper_space_before_default_parentheses=false -resharper_space_before_empty_invocation_parentheses=false -resharper_space_before_empty_method_parentheses=false -resharper_space_before_for_colon=true -resharper_space_before_function_comma=false -resharper_space_before_initializer_braces=false -resharper_space_before_invocation_parentheses=false -resharper_space_before_label_colon=false -resharper_space_before_lambda_parentheses=false -resharper_space_before_media_colon=false -resharper_space_before_media_comma=false -resharper_space_before_method_parentheses=false -resharper_space_before_nameof_parentheses=false -resharper_space_before_new_parentheses=false -resharper_space_before_nullable_mark=false -resharper_space_before_open_square_brackets=false -resharper_space_before_pointer_asterik_declaration=false -resharper_space_before_property_colon=false -resharper_space_before_property_semicolon=false -resharper_space_before_ptr_in_abstract_decl=false -resharper_space_before_ptr_in_data_member=false -resharper_space_before_ptr_in_data_members=true -resharper_space_before_ptr_in_method=false -resharper_space_before_ref_in_abstract_decl=false -resharper_space_before_ref_in_data_member=false -resharper_space_before_ref_in_data_members=true -resharper_space_before_ref_in_method=false -resharper_space_before_selector_comma=false -resharper_space_before_semicolon=false -resharper_space_before_semicolon_in_for_statement=false -resharper_space_before_separator=false -resharper_space_before_singleline_accessorholder=true -resharper_space_before_sizeof_parentheses=false -resharper_space_before_template_args=false -resharper_space_before_template_params=true -resharper_space_before_ternary_colon=true -resharper_space_before_ternary_quest=true -resharper_space_before_trailing_comment=true -resharper_space_before_typeof_parentheses=false -resharper_space_before_type_argument_angle=false -resharper_space_before_type_parameters_brackets=false -resharper_space_before_type_parameter_angle=false -resharper_space_before_type_parameter_constraint_colon=true -resharper_space_before_type_parameter_parentheses=true -resharper_space_between_accessors_in_singleline_property=true -resharper_space_between_attribute_sections=true -resharper_space_between_closing_angle_brackets_in_template_args=false -resharper_space_between_empty_square_brackets=false -resharper_space_between_keyword_and_expression=true -resharper_space_between_keyword_and_type=true -resharper_space_between_method_call_empty_parameter_list_parentheses=false -resharper_space_between_method_call_name_and_opening_parenthesis=false -resharper_space_between_method_call_parameter_list_parentheses=false -resharper_space_between_method_declaration_empty_parameter_list_parentheses=false -resharper_space_between_method_declaration_name_and_open_parenthesis=false -resharper_space_between_method_declaration_parameter_list_parentheses=false -resharper_space_between_parentheses_of_control_flow_statements=false -resharper_space_between_square_brackets=false -resharper_space_between_typecast_parentheses=false -resharper_space_colon_after=true -resharper_space_colon_before=false -resharper_space_comma=true -resharper_space_equals=true -resharper_space_inside_braces=true -resharper_space_in_singleline_accessorholder=true -resharper_space_in_singleline_anonymous_method=true -resharper_space_in_singleline_method=true -resharper_space_near_postfix_and_prefix_op=false -resharper_space_within_array_initialization_braces=false -resharper_space_within_array_rank_empty_parentheses=false -resharper_space_within_array_rank_parentheses=false -resharper_space_within_attribute_angles=false -resharper_space_within_attribute_match_brackets=false -resharper_space_within_checked_parentheses=false -resharper_space_within_default_parentheses=false -resharper_space_within_empty_braces=true -resharper_space_within_empty_initializer_braces=false -resharper_space_within_empty_invocation_parentheses=false -resharper_space_within_empty_method_parentheses=false -resharper_space_within_empty_object_literal_braces=false -resharper_space_within_empty_template_params=false -resharper_space_within_expression_parentheses=false -resharper_space_within_function_parentheses=false -resharper_space_within_import_braces=true -resharper_space_within_initializer_braces=false -resharper_space_within_invocation_parentheses=false -resharper_space_within_media_block=true -resharper_space_within_media_parentheses=false -resharper_space_within_method_parentheses=false -resharper_space_within_nameof_parentheses=false -resharper_space_within_new_parentheses=false -resharper_space_within_object_literal_braces=true -resharper_space_within_parentheses=false -resharper_space_within_property_block=true -resharper_space_within_single_line_array_initializer_braces=true -resharper_space_within_sizeof_parentheses=false -resharper_space_within_template_args=false -resharper_space_within_template_argument=false -resharper_space_within_template_params=false -resharper_space_within_tuple_parentheses=false -resharper_space_within_typeof_parentheses=false -resharper_space_within_type_argument_angles=false -resharper_space_within_type_parameters_brackets=false -resharper_space_within_type_parameter_angles=false -resharper_space_within_type_parameter_parentheses=false -resharper_special_else_if_treatment=true -resharper_static_members_qualify_members=none -resharper_static_members_qualify_with=declared_type -resharper_stick_comment=true -resharper_support_vs_event_naming_pattern=true -resharper_termination_style=ensure_semicolon -resharper_toplevel_function_declaration_return_type_style=do_not_change -resharper_toplevel_function_definition_return_type_style=do_not_change -resharper_trailing_comma_in_multiline_lists=true -resharper_trailing_comma_in_singleline_lists=false -resharper_types_braces=end_of_line -resharper_use_continuous_indent_inside_initializer_braces=true -resharper_use_continuous_indent_inside_parens=true -resharper_use_continuous_line_indent_in_expression_braces=false -resharper_use_continuous_line_indent_in_method_pars=false -resharper_use_heuristics_for_body_style=true -resharper_use_indents_from_main_language_in_file=true -resharper_use_indent_from_previous_element=true -resharper_use_indent_from_vs=false -resharper_use_roslyn_logic_for_evident_types=false -resharper_vb_align_multiline_argument=true -resharper_vb_align_multiline_expression=true -resharper_vb_align_multiline_parameter=true -resharper_vb_align_multiple_declaration=true -resharper_vb_insert_final_newline=false -resharper_vb_max_line_length=120 -resharper_vb_place_field_attribute_on_same_line=true -resharper_vb_place_method_attribute_on_same_line=false -resharper_vb_place_type_attribute_on_same_line=false -resharper_vb_prefer_qualified_reference=false -resharper_vb_space_after_unary_operator=true -resharper_vb_space_around_multiplicative_op=false -resharper_vb_wrap_arguments_style=wrap_if_long -resharper_vb_wrap_before_binary_opsign=false -resharper_vb_wrap_lines=true -resharper_vb_wrap_parameters_style=wrap_if_long -resharper_wrap_after_binary_opsign=true -resharper_wrap_after_declaration_lpar=false -resharper_wrap_after_dot=false -resharper_wrap_after_dot_in_method_calls=false -resharper_wrap_after_expression_lbrace=true -resharper_wrap_after_invocation_lpar=false -resharper_wrap_around_elements=true -resharper_wrap_array_initializer_style=chop_always -resharper_wrap_array_literals=chop_if_long -resharper_wrap_base_clause_style=wrap_if_long -resharper_wrap_before_arrow_with_expressions=true -resharper_wrap_before_binary_pattern_op=true -resharper_wrap_before_colon=false -resharper_wrap_before_comma=false -resharper_wrap_before_comma_in_base_clause=false -resharper_wrap_before_declaration_lpar=false -resharper_wrap_before_declaration_rpar=false -resharper_wrap_before_dot=true -resharper_wrap_before_eq=false -resharper_wrap_before_expression_rbrace=true -resharper_wrap_before_extends_colon=false -resharper_wrap_before_first_type_parameter_constraint=false -resharper_wrap_before_invocation_lpar=false -resharper_wrap_before_invocation_rpar=false -resharper_wrap_before_linq_expression=false -resharper_wrap_before_ternary_opsigns=true -resharper_wrap_before_type_parameter_langle=false -resharper_wrap_braced_init_list_style=wrap_if_long -resharper_wrap_chained_binary_expressions=chop_if_long -resharper_wrap_chained_binary_patterns=wrap_if_long -resharper_wrap_chained_method_calls=wrap_if_long -resharper_wrap_ctor_initializer_style=wrap_if_long -resharper_wrap_enumeration_style=chop_if_long -resharper_wrap_enum_declaration=chop_always -resharper_wrap_enum_style=do_not_change -resharper_wrap_extends_list_style=wrap_if_long -resharper_wrap_imports=chop_if_long -resharper_wrap_multiple_declaration_style=chop_if_long -resharper_wrap_multiple_type_parameter_constraints_style=chop_if_long -resharper_wrap_object_literals=chop_if_long -resharper_wrap_property_pattern=chop_if_long -resharper_wrap_switch_expression=chop_always -resharper_wrap_ternary_expr_style=chop_if_long -resharper_wrap_union_type_usage=chop_if_long -resharper_wrap_verbatim_interpolated_strings=no_wrap -resharper_xmldoc_attribute_indent=single_indent -resharper_xmldoc_insert_final_newline=false -resharper_xmldoc_linebreak_before_elements=summary,remarks,example,returns,param,typeparam,value,para -resharper_xmldoc_max_blank_lines_between_tags=0 -resharper_xmldoc_max_line_length=120 -resharper_xmldoc_pi_attribute_style=do_not_touch -resharper_xmldoc_space_before_self_closing=true -resharper_xmldoc_wrap_lines=true -resharper_xmldoc_wrap_tags_and_pi=true -resharper_xmldoc_wrap_text=true -resharper_xml_attribute_indent=align_by_first_attribute -resharper_xml_insert_final_newline=false -resharper_xml_linebreak_before_elements= -resharper_xml_max_blank_lines_between_tags=2 -resharper_xml_max_line_length=120 -resharper_xml_pi_attribute_style=do_not_touch -resharper_xml_space_before_self_closing=true -resharper_xml_wrap_lines=true -resharper_xml_wrap_tags_and_pi=true -resharper_xml_wrap_text=false - -# ReSharper inspection severities -resharper_abstract_class_constructor_can_be_made_protected_highlighting=hint -resharper_access_rights_in_text_highlighting=warning -resharper_access_to_disposed_closure_highlighting=warning -resharper_access_to_for_each_variable_in_closure_highlighting=warning -resharper_access_to_modified_closure_highlighting=warning -resharper_access_to_static_member_via_derived_type_highlighting=warning -resharper_address_of_marshal_by_ref_object_highlighting=warning -resharper_amd_dependency_path_problem_highlighting=none -resharper_amd_external_module_highlighting=suggestion -resharper_angular_html_banana_highlighting=warning -resharper_annotate_can_be_null_parameter_highlighting=none -resharper_annotate_can_be_null_type_member_highlighting=none -resharper_annotate_not_null_parameter_highlighting=none -resharper_annotate_not_null_type_member_highlighting=none -resharper_annotation_conflict_in_hierarchy_highlighting=warning -resharper_annotation_redundancy_at_value_type_highlighting=warning -resharper_annotation_redundancy_in_hierarchy_highlighting=warning -resharper_arguments_style_anonymous_function_highlighting=hint -resharper_arguments_style_literal_highlighting=hint -resharper_arguments_style_named_expression_highlighting=hint -resharper_arguments_style_other_highlighting=hint -resharper_arguments_style_string_literal_highlighting=hint -resharper_arrange_accessor_owner_body_highlighting=suggestion -resharper_arrange_attributes_highlighting=none -resharper_arrange_constructor_or_destructor_body_highlighting=hint -resharper_arrange_default_value_when_type_evident_highlighting=suggestion -resharper_arrange_default_value_when_type_not_evident_highlighting=hint -resharper_arrange_local_function_body_highlighting=hint -resharper_arrange_method_or_operator_body_highlighting=hint -resharper_arrange_missing_parentheses_highlighting=hint -resharper_arrange_namespace_body_highlighting=hint -resharper_arrange_object_creation_when_type_evident_highlighting=suggestion -resharper_arrange_object_creation_when_type_not_evident_highlighting=hint -resharper_arrange_redundant_parentheses_highlighting=hint -resharper_arrange_static_member_qualifier_highlighting=hint -resharper_arrange_this_qualifier_highlighting=hint -resharper_arrange_trailing_comma_in_multiline_lists_highlighting=hint -resharper_arrange_trailing_comma_in_singleline_lists_highlighting=hint -resharper_arrange_type_member_modifiers_highlighting=hint -resharper_arrange_type_modifiers_highlighting=hint -resharper_arrange_var_keywords_in_deconstructing_declaration_highlighting=suggestion -resharper_asp_content_placeholder_not_resolved_highlighting=error -resharper_asp_custom_page_parser_filter_type_highlighting=warning -resharper_asp_dead_code_highlighting=warning -resharper_asp_entity_highlighting=warning -resharper_asp_image_highlighting=warning -resharper_asp_invalid_control_type_highlighting=error -resharper_asp_not_resolved_highlighting=error -resharper_asp_ods_method_reference_resolve_error_highlighting=error -resharper_asp_resolve_warning_highlighting=warning -resharper_asp_skin_not_resolved_highlighting=error -resharper_asp_tag_attribute_with_optional_value_highlighting=warning -resharper_asp_theme_not_resolved_highlighting=error -resharper_asp_unused_register_directive_highlighting_highlighting=warning -resharper_asp_warning_highlighting=warning -resharper_assigned_value_is_never_used_highlighting=warning -resharper_assigned_value_wont_be_assigned_to_corresponding_field_highlighting=warning -resharper_assignment_in_conditional_expression_highlighting=warning -resharper_assignment_in_condition_expression_highlighting=warning -resharper_assignment_is_fully_discarded_highlighting=warning -resharper_assign_null_to_not_null_attribute_highlighting=warning -resharper_assign_to_constant_highlighting=error -resharper_assign_to_implicit_global_in_function_scope_highlighting=warning -resharper_asxx_path_error_highlighting=warning -resharper_async_iterator_invocation_without_await_foreach_highlighting=warning -resharper_async_void_lambda_highlighting=warning -resharper_async_void_method_highlighting=none -resharper_auto_property_can_be_made_get_only_global_highlighting=suggestion -resharper_auto_property_can_be_made_get_only_local_highlighting=suggestion -resharper_bad_attribute_brackets_spaces_highlighting=none -resharper_bad_braces_spaces_highlighting=none -resharper_bad_child_statement_indent_highlighting=warning -resharper_bad_colon_spaces_highlighting=none -resharper_bad_comma_spaces_highlighting=none -resharper_bad_control_braces_indent_highlighting=suggestion -resharper_bad_control_braces_line_breaks_highlighting=none -resharper_bad_declaration_braces_indent_highlighting=none -resharper_bad_declaration_braces_line_breaks_highlighting=none -resharper_bad_empty_braces_line_breaks_highlighting=none -resharper_bad_expression_braces_indent_highlighting=none -resharper_bad_expression_braces_line_breaks_highlighting=none -resharper_bad_generic_brackets_spaces_highlighting=none -resharper_bad_indent_highlighting=none -resharper_bad_linq_line_breaks_highlighting=none -resharper_bad_list_line_breaks_highlighting=none -resharper_bad_member_access_spaces_highlighting=none -resharper_bad_namespace_braces_indent_highlighting=none -resharper_bad_parens_line_breaks_highlighting=none -resharper_bad_parens_spaces_highlighting=none -resharper_bad_preprocessor_indent_highlighting=none -resharper_bad_semicolon_spaces_highlighting=none -resharper_bad_spaces_after_keyword_highlighting=none -resharper_bad_square_brackets_spaces_highlighting=none -resharper_bad_switch_braces_indent_highlighting=none -resharper_bad_symbol_spaces_highlighting=none -resharper_base_member_has_params_highlighting=warning -resharper_base_method_call_with_default_parameter_highlighting=warning -resharper_base_object_equals_is_object_equals_highlighting=warning -resharper_base_object_get_hash_code_call_in_get_hash_code_highlighting=warning -resharper_bitwise_operator_on_enum_without_flags_highlighting=warning -resharper_block_scope_redeclaration_highlighting=error -resharper_built_in_type_reference_style_for_member_access_highlighting=hint -resharper_built_in_type_reference_style_highlighting=hint -resharper_by_ref_argument_is_volatile_field_highlighting=warning -resharper_caller_callee_using_error_highlighting=error -resharper_caller_callee_using_highlighting=warning -resharper_cannot_apply_equality_operator_to_type_highlighting=warning -resharper_center_tag_is_obsolete_highlighting=warning -resharper_check_for_reference_equality_instead_1_highlighting=suggestion -resharper_check_for_reference_equality_instead_2_highlighting=suggestion -resharper_check_for_reference_equality_instead_3_highlighting=suggestion -resharper_check_for_reference_equality_instead_4_highlighting=suggestion -resharper_check_namespace_highlighting=warning -resharper_class_cannot_be_instantiated_highlighting=warning -resharper_class_can_be_sealed_global_highlighting=none -resharper_class_can_be_sealed_local_highlighting=none -resharper_class_highlighting=suggestion -resharper_class_never_instantiated_global_highlighting=suggestion -resharper_class_never_instantiated_local_highlighting=suggestion -resharper_class_with_virtual_members_never_inherited_global_highlighting=suggestion -resharper_class_with_virtual_members_never_inherited_local_highlighting=suggestion -resharper_clear_attribute_is_obsolete_all_highlighting=warning -resharper_clear_attribute_is_obsolete_highlighting=warning -resharper_closure_on_modified_variable_highlighting=warning -resharper_coerced_equals_using_highlighting=warning -resharper_coerced_equals_using_with_null_undefined_highlighting=none -resharper_collection_never_queried_global_highlighting=warning -resharper_collection_never_queried_local_highlighting=warning -resharper_collection_never_updated_global_highlighting=warning -resharper_collection_never_updated_local_highlighting=warning -resharper_comma_not_valid_here_highlighting=error -resharper_comment_typo_highlighting=suggestion -resharper_common_js_external_module_highlighting=suggestion -resharper_compare_non_constrained_generic_with_null_highlighting=none -resharper_compare_of_floats_by_equality_operator_highlighting=none -resharper_conditional_ternary_equal_branch_highlighting=warning -resharper_condition_is_always_const_highlighting=warning -resharper_condition_is_always_true_or_false_highlighting=warning -resharper_confusing_char_as_integer_in_constructor_highlighting=warning -resharper_constant_conditional_access_qualifier_highlighting=warning -resharper_constant_null_coalescing_condition_highlighting=warning -resharper_constructor_call_not_used_highlighting=warning -resharper_constructor_initializer_loop_highlighting=warning -resharper_container_annotation_redundancy_highlighting=warning -resharper_context_value_is_provided_highlighting=none -resharper_contract_annotation_not_parsed_highlighting=warning -resharper_convert_closure_to_method_group_highlighting=suggestion -resharper_convert_conditional_ternary_expression_to_switch_expression_highlighting=hint -resharper_convert_if_do_to_while_highlighting=suggestion -resharper_convert_if_statement_to_conditional_ternary_expression_highlighting=suggestion -resharper_convert_if_statement_to_null_coalescing_assignment_highlighting=suggestion -resharper_convert_if_statement_to_null_coalescing_expression_highlighting=suggestion -resharper_convert_if_statement_to_return_statement_highlighting=hint -resharper_convert_if_statement_to_switch_expression_highlighting=hint -resharper_convert_if_statement_to_switch_statement_highlighting=hint -resharper_convert_if_to_or_expression_highlighting=suggestion -resharper_convert_nullable_to_short_form_highlighting=suggestion -resharper_convert_switch_statement_to_switch_expression_highlighting=hint -resharper_convert_to_auto_property_highlighting=suggestion -resharper_convert_to_auto_property_when_possible_highlighting=hint -resharper_convert_to_auto_property_with_private_setter_highlighting=hint -resharper_convert_to_compound_assignment_highlighting=hint -resharper_convert_to_constant_global_highlighting=hint -resharper_convert_to_constant_local_highlighting=hint -resharper_convert_to_lambda_expression_highlighting=suggestion -resharper_convert_to_lambda_expression_when_possible_highlighting=none -resharper_convert_to_local_function_highlighting=suggestion -resharper_convert_to_null_coalescing_compound_assignment_highlighting=suggestion -resharper_convert_to_primary_constructor_highlighting=suggestion -resharper_convert_to_static_class_highlighting=suggestion -resharper_convert_to_using_declaration_highlighting=suggestion -resharper_convert_to_vb_auto_property_highlighting=suggestion -resharper_convert_to_vb_auto_property_when_possible_highlighting=hint -resharper_convert_to_vb_auto_property_with_private_setter_highlighting=hint -resharper_convert_type_check_pattern_to_null_check_highlighting=warning -resharper_convert_type_check_to_null_check_highlighting=warning -resharper_co_variant_array_conversion_highlighting=warning -resharper_cpp_abstract_class_without_specifier_highlighting=warning -resharper_cpp_abstract_final_class_highlighting=warning -resharper_cpp_abstract_virtual_function_call_in_ctor_highlighting=error -resharper_cpp_access_specifier_with_no_declarations_highlighting=suggestion -resharper_cpp_assigned_value_is_never_used_highlighting=warning -resharper_cpp_awaiter_type_is_not_class_highlighting=warning -resharper_cpp_bad_angle_brackets_spaces_highlighting=none -resharper_cpp_bad_braces_spaces_highlighting=none -resharper_cpp_bad_child_statement_indent_highlighting=none -resharper_cpp_bad_colon_spaces_highlighting=none -resharper_cpp_bad_comma_spaces_highlighting=none -resharper_cpp_bad_control_braces_indent_highlighting=none -resharper_cpp_bad_control_braces_line_breaks_highlighting=none -resharper_cpp_bad_declaration_braces_indent_highlighting=none -resharper_cpp_bad_declaration_braces_line_breaks_highlighting=none -resharper_cpp_bad_empty_braces_line_breaks_highlighting=none -resharper_cpp_bad_expression_braces_indent_highlighting=none -resharper_cpp_bad_expression_braces_line_breaks_highlighting=none -resharper_cpp_bad_indent_highlighting=none -resharper_cpp_bad_list_line_breaks_highlighting=none -resharper_cpp_bad_member_access_spaces_highlighting=none -resharper_cpp_bad_namespace_braces_indent_highlighting=none -resharper_cpp_bad_parens_line_breaks_highlighting=none -resharper_cpp_bad_parens_spaces_highlighting=none -resharper_cpp_bad_semicolon_spaces_highlighting=none -resharper_cpp_bad_spaces_after_keyword_highlighting=none -resharper_cpp_bad_square_brackets_spaces_highlighting=none -resharper_cpp_bad_switch_braces_indent_highlighting=none -resharper_cpp_bad_symbol_spaces_highlighting=none -resharper_cpp_boolean_increment_expression_highlighting=warning -resharper_cpp_boost_format_bad_code_highlighting=warning -resharper_cpp_boost_format_legacy_code_highlighting=suggestion -resharper_cpp_boost_format_mixed_args_highlighting=error -resharper_cpp_boost_format_too_few_args_highlighting=error -resharper_cpp_boost_format_too_many_args_highlighting=warning -resharper_cpp_clang_tidy_abseil_duration_addition_highlighting=none -resharper_cpp_clang_tidy_abseil_duration_comparison_highlighting=none -resharper_cpp_clang_tidy_abseil_duration_conversion_cast_highlighting=none -resharper_cpp_clang_tidy_abseil_duration_division_highlighting=none -resharper_cpp_clang_tidy_abseil_duration_factory_float_highlighting=none -resharper_cpp_clang_tidy_abseil_duration_factory_scale_highlighting=none -resharper_cpp_clang_tidy_abseil_duration_subtraction_highlighting=none -resharper_cpp_clang_tidy_abseil_duration_unnecessary_conversion_highlighting=none -resharper_cpp_clang_tidy_abseil_faster_strsplit_delimiter_highlighting=none -resharper_cpp_clang_tidy_abseil_no_internal_dependencies_highlighting=none -resharper_cpp_clang_tidy_abseil_no_namespace_highlighting=none -resharper_cpp_clang_tidy_abseil_redundant_strcat_calls_highlighting=none -resharper_cpp_clang_tidy_abseil_string_find_startswith_highlighting=none -resharper_cpp_clang_tidy_abseil_string_find_str_contains_highlighting=none -resharper_cpp_clang_tidy_abseil_str_cat_append_highlighting=none -resharper_cpp_clang_tidy_abseil_time_comparison_highlighting=none -resharper_cpp_clang_tidy_abseil_time_subtraction_highlighting=none -resharper_cpp_clang_tidy_abseil_upgrade_duration_conversions_highlighting=none -resharper_cpp_clang_tidy_altera_id_dependent_backward_branch_highlighting=none -resharper_cpp_clang_tidy_altera_kernel_name_restriction_highlighting=none -resharper_cpp_clang_tidy_altera_single_work_item_barrier_highlighting=none -resharper_cpp_clang_tidy_altera_struct_pack_align_highlighting=none -resharper_cpp_clang_tidy_altera_unroll_loops_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_accept4_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_accept_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_creat_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_dup_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_epoll_create1_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_epoll_create_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_fopen_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_inotify_init1_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_inotify_init_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_memfd_create_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_open_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_pipe2_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_pipe_highlighting=none -resharper_cpp_clang_tidy_android_cloexec_socket_highlighting=none -resharper_cpp_clang_tidy_android_comparison_in_temp_failure_retry_highlighting=none -resharper_cpp_clang_tidy_boost_use_to_string_highlighting=suggestion -resharper_cpp_clang_tidy_bugprone_argument_comment_highlighting=suggestion -resharper_cpp_clang_tidy_bugprone_assert_side_effect_highlighting=warning -resharper_cpp_clang_tidy_bugprone_bad_signal_to_kill_thread_highlighting=warning -resharper_cpp_clang_tidy_bugprone_bool_pointer_implicit_conversion_highlighting=none -resharper_cpp_clang_tidy_bugprone_branch_clone_highlighting=warning -resharper_cpp_clang_tidy_bugprone_copy_constructor_init_highlighting=warning -resharper_cpp_clang_tidy_bugprone_dangling_handle_highlighting=warning -resharper_cpp_clang_tidy_bugprone_dynamic_static_initializers_highlighting=warning -resharper_cpp_clang_tidy_bugprone_easily_swappable_parameters_highlighting=none -resharper_cpp_clang_tidy_bugprone_exception_escape_highlighting=none -resharper_cpp_clang_tidy_bugprone_fold_init_type_highlighting=warning -resharper_cpp_clang_tidy_bugprone_forwarding_reference_overload_highlighting=warning -resharper_cpp_clang_tidy_bugprone_forward_declaration_namespace_highlighting=warning -resharper_cpp_clang_tidy_bugprone_implicit_widening_of_multiplication_result_highlighting=warning -resharper_cpp_clang_tidy_bugprone_inaccurate_erase_highlighting=warning -resharper_cpp_clang_tidy_bugprone_incorrect_roundings_highlighting=warning -resharper_cpp_clang_tidy_bugprone_infinite_loop_highlighting=warning -resharper_cpp_clang_tidy_bugprone_integer_division_highlighting=warning -resharper_cpp_clang_tidy_bugprone_lambda_function_name_highlighting=warning -resharper_cpp_clang_tidy_bugprone_macro_parentheses_highlighting=warning -resharper_cpp_clang_tidy_bugprone_macro_repeated_side_effects_highlighting=warning -resharper_cpp_clang_tidy_bugprone_misplaced_operator_in_strlen_in_alloc_highlighting=warning -resharper_cpp_clang_tidy_bugprone_misplaced_pointer_arithmetic_in_alloc_highlighting=warning -resharper_cpp_clang_tidy_bugprone_misplaced_widening_cast_highlighting=warning -resharper_cpp_clang_tidy_bugprone_move_forwarding_reference_highlighting=warning -resharper_cpp_clang_tidy_bugprone_multiple_statement_macro_highlighting=warning -resharper_cpp_clang_tidy_bugprone_narrowing_conversions_highlighting=warning -resharper_cpp_clang_tidy_bugprone_not_null_terminated_result_highlighting=warning -resharper_cpp_clang_tidy_bugprone_no_escape_highlighting=warning -resharper_cpp_clang_tidy_bugprone_parent_virtual_call_highlighting=warning -resharper_cpp_clang_tidy_bugprone_posix_return_highlighting=warning -resharper_cpp_clang_tidy_bugprone_redundant_branch_condition_highlighting=warning -resharper_cpp_clang_tidy_bugprone_reserved_identifier_highlighting=warning -resharper_cpp_clang_tidy_bugprone_signal_handler_highlighting=warning -resharper_cpp_clang_tidy_bugprone_signed_char_misuse_highlighting=warning -resharper_cpp_clang_tidy_bugprone_sizeof_container_highlighting=warning -resharper_cpp_clang_tidy_bugprone_sizeof_expression_highlighting=warning -resharper_cpp_clang_tidy_bugprone_spuriously_wake_up_functions_highlighting=warning -resharper_cpp_clang_tidy_bugprone_string_constructor_highlighting=warning -resharper_cpp_clang_tidy_bugprone_string_integer_assignment_highlighting=warning -resharper_cpp_clang_tidy_bugprone_string_literal_with_embedded_nul_highlighting=warning -resharper_cpp_clang_tidy_bugprone_suspicious_enum_usage_highlighting=warning -resharper_cpp_clang_tidy_bugprone_suspicious_include_highlighting=warning -resharper_cpp_clang_tidy_bugprone_suspicious_memset_usage_highlighting=warning -resharper_cpp_clang_tidy_bugprone_suspicious_missing_comma_highlighting=warning -resharper_cpp_clang_tidy_bugprone_suspicious_semicolon_highlighting=warning -resharper_cpp_clang_tidy_bugprone_suspicious_string_compare_highlighting=warning -resharper_cpp_clang_tidy_bugprone_swapped_arguments_highlighting=warning -resharper_cpp_clang_tidy_bugprone_terminating_continue_highlighting=warning -resharper_cpp_clang_tidy_bugprone_throw_keyword_missing_highlighting=warning -resharper_cpp_clang_tidy_bugprone_too_small_loop_variable_highlighting=warning -resharper_cpp_clang_tidy_bugprone_undefined_memory_manipulation_highlighting=warning -resharper_cpp_clang_tidy_bugprone_undelegated_constructor_highlighting=warning -resharper_cpp_clang_tidy_bugprone_unhandled_exception_at_new_highlighting=none -resharper_cpp_clang_tidy_bugprone_unhandled_self_assignment_highlighting=warning -resharper_cpp_clang_tidy_bugprone_unused_raii_highlighting=warning -resharper_cpp_clang_tidy_bugprone_unused_return_value_highlighting=warning -resharper_cpp_clang_tidy_bugprone_use_after_move_highlighting=warning -resharper_cpp_clang_tidy_bugprone_virtual_near_miss_highlighting=suggestion -resharper_cpp_clang_tidy_cert_con36_c_highlighting=none -resharper_cpp_clang_tidy_cert_con54_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_dcl03_c_highlighting=none -resharper_cpp_clang_tidy_cert_dcl16_c_highlighting=none -resharper_cpp_clang_tidy_cert_dcl21_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_dcl37_c_highlighting=none -resharper_cpp_clang_tidy_cert_dcl50_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_dcl51_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_dcl54_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_dcl58_cpp_highlighting=warning -resharper_cpp_clang_tidy_cert_dcl59_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_env33_c_highlighting=none -resharper_cpp_clang_tidy_cert_err09_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_err34_c_highlighting=suggestion -resharper_cpp_clang_tidy_cert_err52_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_err58_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_err60_cpp_highlighting=warning -resharper_cpp_clang_tidy_cert_err61_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_fio38_c_highlighting=none -resharper_cpp_clang_tidy_cert_flp30_c_highlighting=warning -resharper_cpp_clang_tidy_cert_mem57_cpp_highlighting=warning -resharper_cpp_clang_tidy_cert_msc30_c_highlighting=none -resharper_cpp_clang_tidy_cert_msc32_c_highlighting=none -resharper_cpp_clang_tidy_cert_msc50_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_msc51_cpp_highlighting=warning -resharper_cpp_clang_tidy_cert_oop11_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_oop54_cpp_highlighting=none -resharper_cpp_clang_tidy_cert_oop57_cpp_highlighting=warning -resharper_cpp_clang_tidy_cert_oop58_cpp_highlighting=warning -resharper_cpp_clang_tidy_cert_pos44_c_highlighting=none -resharper_cpp_clang_tidy_cert_pos47_c_highlighting=none -resharper_cpp_clang_tidy_cert_sig30_c_highlighting=none -resharper_cpp_clang_tidy_cert_str34_c_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_api_modeling_google_g_test_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_cast_value_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_api_modeling_llvm_return_value_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_api_modeling_std_c_library_functions_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_api_modeling_trust_nonnull_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_builtin_builtin_functions_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_builtin_no_return_functions_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_call_and_message_modeling_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_divide_zero_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_dynamic_type_propagation_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_nonnil_string_constants_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_non_null_param_checker_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_null_dereference_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_stack_address_escape_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_stack_addr_escape_base_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_undefined_binary_operator_result_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_array_subscript_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_assign_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_branch_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_captured_block_variable_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_uninitialized_undef_return_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_core_vla_size_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_cplusplus_inner_pointer_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_cplusplus_move_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_cplusplus_new_delete_leaks_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_cplusplus_placement_new_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_cplusplus_pure_virtual_call_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_cplusplus_self_assignment_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_cplusplus_smart_ptr_modeling_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_cplusplus_virtual_call_modeling_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_deadcode_dead_stores_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_fuchsia_handle_checker_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_nullability_nullability_base_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_dereferenced_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_passed_to_nonnull_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_nullability_nullable_returned_from_nonnull_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_nullability_null_passed_to_nonnull_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_nullability_null_returned_from_nonnull_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_uninitialized_object_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_optin_cplusplus_virtual_call_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_optin_mpi_mpi_checker_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_empty_localization_context_checker_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_optin_osx_cocoa_localizability_non_localized_string_checker_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_optin_osx_os_object_c_style_cast_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_optin_performance_gcd_antipattern_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_optin_performance_padding_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_optin_portability_unix_api_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_api_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_at_sync_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_autorelease_write_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_class_release_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_dealloc_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_incompatible_method_types_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_loops_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_missing_super_call_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_nil_arg_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_non_nil_return_value_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_autorelease_pool_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_ns_error_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_obj_c_generics_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_base_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_retain_count_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_run_loop_autorelease_leak_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_self_init_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_super_dealloc_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_unused_ivars_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_cocoa_variadic_method_types_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_error_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_number_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_cf_retain_release_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_out_of_bounds_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_core_foundation_containers_pointer_sized_values_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_mig_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_ns_or_cf_error_deref_checker_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_number_object_conversion_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_obj_c_property_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_os_object_retain_count_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_osx_sec_keychain_api_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_float_loop_counter_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcmp_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bcopy_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_bzero_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_decode_value_of_obj_c_type_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_deprecated_or_unsafe_buffer_handling_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_getpw_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_gets_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mkstemp_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_mktemp_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_rand_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_security_syntax_checker_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_strcpy_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_unchecked_return_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_security_insecure_api_vfork_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_unix_api_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_bad_size_arg_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_c_string_modeling_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_unix_cstring_null_arg_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_unix_dynamic_memory_modeling_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_unix_malloc_sizeof_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_unix_mismatched_deallocator_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_unix_vfork_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_valist_copy_to_self_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_valist_uninitialized_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_valist_unterminated_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_valist_valist_base_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_webkit_no_uncounted_member_checker_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_webkit_ref_cntbl_base_virtual_dtor_highlighting=none -resharper_cpp_clang_tidy_clang_analyzer_webkit_uncounted_lambda_captures_checker_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_absolute_value_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_abstract_final_class_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_abstract_vbase_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_address_of_packed_member_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_address_of_temporary_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_aix_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_align_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_alloca_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_alloca_with_align_alignof_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_delete_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_ellipsis_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_macro_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_member_template_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ambiguous_reversed_operator_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_analyzer_incompatible_plugin_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_anonymous_pack_parens_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_anon_enum_enum_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_arc_bridge_casts_disallowed_in_nonarc_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_arc_maybe_repeated_use_of_weak_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_arc_non_pod_memaccess_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_arc_perform_selector_leaks_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_arc_repeated_use_of_weak_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_arc_retain_cycles_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_arc_unsafe_retained_assign_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_argument_outside_range_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_array_bounds_pointer_arithmetic_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_asm_operand_widths_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_assign_enum_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_assume_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_atimport_in_framework_header_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_atomic_alignment_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_atomic_implicit_seq_cst_highlighting=suggestion -resharper_cpp_clang_tidy_clang_diagnostic_atomic_memory_ordering_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_atomic_property_with_user_defined_accessor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_attribute_packed_for_bitfield_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_at_protocol_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_auto_disable_vptr_sanitizer_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_auto_import_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_auto_storage_class_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_auto_var_id_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_availability_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_avr_rtlib_linking_quirks_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_backslash_newline_escape_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bad_function_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_binding_in_condition_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bind_to_temporary_copy_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bitfield_constant_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bitfield_enum_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bitfield_width_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bitwise_conditional_parentheses_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bitwise_op_parentheses_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_block_capture_autoreleasing_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bool_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bool_operation_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_braced_scalar_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_bridge_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_builtin_assume_aligned_alignment_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_builtin_macro_redefined_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_builtin_memcpy_chk_size_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_builtin_requires_header_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_c11_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_c2x_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_c99_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_c99_designator_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_c99_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_called_once_parameter_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_call_to_pure_virtual_from_ctor_dtor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cast_align_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cast_calling_convention_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cast_function_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cast_of_sel_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cast_qual_unrelated_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cf_string_literal_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_char_subscripts_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_clang_cl_pch_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_class_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_class_varargs_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cmse_union_leak_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_comma_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_comment_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_compare_distinct_pointer_types_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_completion_handler_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_complex_component_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_macro_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_by_space_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_compound_token_split_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_concepts_ts_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_conditional_type_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_conditional_uninitialized_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_config_macros_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_constant_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_constant_evaluated_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_constant_logical_operand_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_constexpr_not_const_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_consumed_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_coroutine_missing_unhandled_exception_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_covered_switch_default_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_deprecated_writable_strings_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp11_compat_reserved_user_defined_literal_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp11_extra_semi_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp11_inline_namespace_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp11_long_long_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp11_narrowing_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp14_binary_literal_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp14_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp14_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_mangling_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp17_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp17_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp20_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp20_designator_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp20_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp2a_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp2b_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_bind_to_temporary_copy_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_extra_semi_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_local_type_template_args_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_compat_unnamed_type_template_args_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_binary_literal_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp98_cpp11_cpp14_cpp17_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cpp_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cstring_format_directive_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ctad_maybe_unsupported_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_ctu_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_cuda_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_custom_atomic_properties_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_cxx_attribute_extension_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dangling_else_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dangling_field_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dangling_gsl_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dangling_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dangling_initializer_list_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_darwin_sdk_settings_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_date_time_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dealloc_in_category_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_debug_compression_unavailable_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_declaration_after_statement_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_defaulted_function_deleted_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_delegating_ctor_cycles_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_delete_abstract_non_virtual_dtor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_delete_incomplete_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_delete_non_abstract_non_virtual_dtor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_delete_non_virtual_dtor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_altivec_src_compat_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_anon_enum_enum_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_array_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_attributes_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_comma_subscript_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_dtor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_copy_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_copy_with_user_provided_dtor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_declarations_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_dynamic_exception_spec_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_conditional_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_enum_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_enum_float_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_implementations_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_increment_bool_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_isa_usage_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_objc_pointer_introspection_perform_selector_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_register_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_this_capture_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_deprecated_volatile_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_direct_ivar_access_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_disabled_macro_expansion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_distributed_object_modifiers_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_division_by_zero_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dllexport_explicit_instantiation_decl_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dllimport_static_field_def_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dll_attribute_on_redeclaration_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_documentation_deprecated_sync_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_documentation_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_documentation_html_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_documentation_pedantic_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_documentation_unknown_command_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_dollar_in_identifier_extension_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_double_promotion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dtor_name_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dtor_typedef_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_duplicate_decl_specifier_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_duplicate_enum_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_arg_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_duplicate_method_match_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_duplicate_protocol_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dynamic_class_memaccess_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_dynamic_exception_spec_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_embedded_directive_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_empty_body_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_empty_decomposition_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_empty_init_stmt_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_empty_translation_unit_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_encode_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_conditional_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_enum_compare_switch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_enum_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_enum_enum_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_enum_float_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_enum_too_large_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_error_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_exceptions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_excess_initializers_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_exit_time_destructors_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_expansion_to_defined_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_explicit_initialize_call_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_explicit_ownership_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_export_unnamed_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_export_using_directive_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_extern_c_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_extern_initializer_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_extra_qualification_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_extra_semi_stmt_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_extra_tokens_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_final_dtor_non_final_class_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_fixed_enum_extension_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_fixed_point_overflow_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_flag_enum_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_flexible_array_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_float_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_float_equal_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_float_overflow_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_float_zero_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_extra_args_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_insufficient_args_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_invalid_specifier_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_nonliteral_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_non_iso_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_pedantic_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_security_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_type_confusion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_format_zero_length_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_fortify_source_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_for_loop_analysis_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_four_char_constants_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_framework_include_private_from_public_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_frame_address_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_frame_larger_than_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_free_nonheap_object_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_function_def_in_objc_container_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_function_multiversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gcc_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_global_constructors_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_global_isel_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_alignof_expression_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_anonymous_struct_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_gnu_array_member_paren_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_auto_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_binary_literal_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_case_range_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_complex_integer_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_compound_literal_initializer_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_conditional_omitted_operand_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_designator_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_initializer_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_empty_struct_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_initializer_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_flexible_array_union_member_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_folding_constant_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_imaginary_constant_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_include_next_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_inline_cpp_without_extern_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_label_as_value_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_redeclared_enum_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_statement_expression_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_static_float_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_string_literal_operator_template_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_union_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_variable_sized_type_not_at_end_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_gnu_zero_variadic_macro_arguments_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_header_guard_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_header_hygiene_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_hip_only_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_idiomatic_parentheses_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ignored_attributes_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_ignored_availability_without_sdk_settings_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_ignored_optimization_argument_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragmas_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_intrinsic_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ignored_pragma_optimize_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_ignored_qualifiers_highlighting=suggestion -resharper_cpp_clang_tidy_clang_diagnostic_implicitly_unsigned_literal_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_atomic_properties_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_const_int_float_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_conversion_floating_point_to_bool_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_exception_spec_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_fallthrough_per_function_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_fixed_point_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_float_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_function_declaration_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_float_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_int_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_implicit_retain_self_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_import_preprocessor_directive_pedantic_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_inaccessible_base_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_include_next_absolute_path_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_include_next_outside_header_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incompatible_exception_spec_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incompatible_function_pointer_types_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incompatible_library_redeclaration_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incompatible_ms_struct_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_discards_qualifiers_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incompatible_pointer_types_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incompatible_property_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incompatible_sysroot_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incomplete_framework_module_declaration_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incomplete_implementation_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incomplete_module_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incomplete_setjmp_declaration_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_incomplete_umbrella_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_dllimport_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_destructor_override_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_inconsistent_missing_override_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_increment_bool_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_independent_class_attribute_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_infinite_recursion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_initializer_overrides_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_injected_class_name_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_inline_asm_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_inline_namespace_reopened_noninline_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_inline_new_delete_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_instantiation_after_specialization_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_integer_overflow_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_interrupt_service_routine_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_int_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_int_in_bool_context_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_int_to_pointer_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_int_to_void_pointer_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_constexpr_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_iboutlet_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_initializer_from_system_header_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_ios_deployment_target_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_noreturn_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_no_builtin_names_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_offsetof_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_or_nonexistent_directory_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_partial_specialization_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_pp_token_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_source_encoding_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_invalid_token_paste_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_jump_seh_finally_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_keyword_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_keyword_macro_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_knr_promoted_parameter_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_language_extension_token_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_large_by_value_copy_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_literal_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_literal_range_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_local_type_template_args_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_logical_not_parentheses_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_logical_op_parentheses_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_long_long_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_macro_redefined_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_main_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_main_return_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_malformed_warning_check_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_many_braces_around_scalar_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_max_tokens_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_max_unsigned_zero_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_memset_transposed_args_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_memsize_comparison_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_method_signatures_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_abstract_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_anon_tag_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_charize_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_comment_paste_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_const_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_cpp_macro_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_default_arg_redefinition_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_drectve_section_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_end_of_file_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_forward_reference_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_enum_value_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exception_spec_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_exists_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_explicit_constructor_call_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_extra_qualification_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_fixed_enum_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_flexible_array_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_goto_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_inaccessible_base_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_include_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_mutable_reference_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_pure_definition_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_redeclare_static_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_sealed_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_static_assert_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_template_shadow_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_union_member_reference_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_unqualified_friend_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_using_decl_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_microsoft_void_pseudo_dtor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_misleading_indentation_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_mismatched_new_delete_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_mismatched_parameter_types_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_mismatched_return_types_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_mismatched_tags_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_braces_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_constinit_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_declarations_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_exception_spec_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_field_initializers_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_method_return_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_noescape_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_noreturn_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_prototypes_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_missing_prototype_for_cc_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_selector_name_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_sysroot_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_missing_variable_declarations_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_misspelled_assumption_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_modules_ambiguous_internal_linkage_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_modules_import_nested_redundant_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_module_conflict_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_module_file_config_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_module_file_extension_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_module_import_in_extern_c_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_msvc_not_found_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_multichar_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_multiple_move_vbase_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nested_anon_types_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_newline_eof_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_new_returns_null_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_noderef_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nonnull_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nonportable_include_path_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nonportable_system_include_path_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nonportable_vector_initialization_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nontrivial_memaccess_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_non_c_typedef_for_linkage_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_non_literal_null_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_framework_module_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_non_modular_include_in_module_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_non_pod_varargs_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_non_power_of_two_alignment_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_non_virtual_dtor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nsconsumed_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nsreturns_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ns_object_attribute_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nullability_completeness_on_arrays_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nullability_declspec_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nullability_extension_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nullability_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nullability_inferred_on_nested_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_nullable_to_nonnull_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_null_arithmetic_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_null_character_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_null_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_null_dereference_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_arithmetic_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_null_pointer_subtraction_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_odr_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_old_style_cast_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_opencl_unsupported_rgba_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_openmp51_extensions_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_openmp_clauses_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_openmp_loop_form_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_openmp_mapping_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_openmp_target_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_option_ignored_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_ordered_compare_function_pointers_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_out_of_line_declaration_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_out_of_scope_function_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_overlength_strings_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_overloaded_shift_op_parentheses_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_overloaded_virtual_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_override_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_override_module_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_overriding_method_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_overriding_t_option_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_over_aligned_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_packed_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_padded_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_parentheses_equality_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_parentheses_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pass_failed_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pch_date_time_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pedantic_core_features_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pedantic_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pessimizing_move_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pointer_arith_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pointer_bool_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pointer_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pointer_integer_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pointer_sign_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_enum_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pointer_to_int_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pointer_type_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_poison_system_directories_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_potentially_evaluated_expression_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pragmas_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pragma_clang_attribute_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pragma_messages_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pragma_once_outside_header_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pragma_pack_suspicious_include_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pragma_system_header_outside_header_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_predefined_identifier_outside_function_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_c2x_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp14_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp17_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp20_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2b_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_cpp2b_compat_pedantic_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_pre_openmp51_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_private_extern_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_private_header_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_private_module_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_missing_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_out_of_date_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_profile_instr_unprofiled_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_property_access_dot_syntax_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_property_attribute_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_protocol_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_protocol_property_synthesis_ambiguity_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_psabi_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_qualified_void_return_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_quoted_include_in_framework_header_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_range_loop_analysis_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_range_loop_bind_reference_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_range_loop_construct_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_readonly_iboutlet_property_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_receiver_expr_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_receiver_forward_class_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_redeclared_class_member_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_redundant_move_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_redundant_parens_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_register_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_reinterpret_base_class_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_reorder_ctor_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_reorder_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_reorder_init_list_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_requires_expression_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_requires_super_attribute_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_reserved_identifier_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_reserved_id_macro_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_reserved_macro_identifier_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_reserved_user_defined_literal_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_retained_language_linkage_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_return_stack_address_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_return_std_move_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_return_type_c_linkage_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_return_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_rewrite_not_bool_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_section_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_selector_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_selector_type_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_self_assign_field_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_self_assign_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_self_assign_overloaded_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_self_move_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_semicolon_before_method_body_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_sentinel_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_serialized_diagnostics_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_shadow_field_in_constructor_modified_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_shadow_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shadow_ivar_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shadow_uncaptured_local_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_shift_count_negative_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shift_count_overflow_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shift_negative_value_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shift_op_parentheses_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shift_overflow_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shift_sign_overflow_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_shorten64_to32_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_signed_enum_bitfield_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_signed_unsigned_wchar_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_sign_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_sign_conversion_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_argument_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_decay_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_sizeof_array_div_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_div_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_sizeof_pointer_memaccess_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_slash_u_filename_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_slh_asm_goto_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_sometimes_uninitialized_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_source_uses_openmp_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_spir_compat_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_static_float_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_static_inline_explicit_instantiation_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_static_in_inline_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_static_local_in_inline_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_static_self_init_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_stdlibcxx_not_found_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_strict_prototypes_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_strict_selector_match_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_string_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_string_concatenation_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_string_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_string_plus_char_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_string_plus_int_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_strlcpy_strlcat_size_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_strncat_size_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_suggest_destructor_override_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_suggest_override_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_super_class_method_mismatch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_suspicious_bzero_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_switch_bool_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_switch_enum_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_switch_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_sync_fetch_and_nand_semantics_changed_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_bitwise_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_in_range_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_constant_out_of_range_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_objc_bool_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_overlap_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_pointer_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_type_limit_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_undefined_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_char_zero_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_enum_zero_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tautological_unsigned_zero_compare_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_tautological_value_range_compare_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_tentative_definition_incomplete_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_analysis_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_attributes_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_beta_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_negative_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_precise_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_reference_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_thread_safety_verbose_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_trigraphs_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_typedef_redefinition_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_typename_missing_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_type_safety_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unable_to_open_stats_file_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unavailable_declarations_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undeclared_selector_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undefined_bool_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undefined_func_template_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undefined_inline_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undefined_internal_type_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undefined_reinterpret_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undefined_var_template_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undef_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_undef_prefix_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_underaligned_exception_object_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unevaluated_expression_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unguarded_availability_new_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unicode_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unicode_homoglyph_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unicode_whitespace_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unicode_zero_width_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_const_reference_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_uninitialized_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unknown_argument_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unknown_attributes_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_unknown_cuda_version_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_unknown_escape_sequence_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unknown_pragmas_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_unknown_sanitizers_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unknown_warning_option_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unnamed_type_template_args_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unneeded_internal_declaration_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unneeded_member_function_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_break_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_loop_increment_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unreachable_code_return_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unsequenced_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unsupported_abs_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unsupported_availability_guard_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unsupported_cb_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unsupported_dll_base_class_template_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unsupported_friend_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unsupported_gpopt_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unsupported_nan_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unsupported_target_opt_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_unsupported_visibility_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unusable_partial_specialization_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_parameter_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_unused_but_set_variable_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_unused_comparison_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_const_variable_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_exception_parameter_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_function_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_getter_return_value_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_label_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_lambda_capture_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_unused_local_typedef_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_macros_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_member_function_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_parameter_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_unused_private_field_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_property_ivar_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_result_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_template_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_value_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_unused_variable_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_unused_volatile_lvalue_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_used_but_marked_unused_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_user_defined_literals_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_user_defined_warnings_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_varargs_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_variadic_macros_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_vector_conversion_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_vec_elem_size_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_vexing_parse_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_visibility_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_vla_extension_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_vla_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_enum_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_void_pointer_to_int_cast_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_void_ptr_dereference_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_warnings_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_wasm_exception_spec_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_weak_template_vtables_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_weak_vtables_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_writable_strings_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_xor_used_as_pow_highlighting=warning -resharper_cpp_clang_tidy_clang_diagnostic_zero_as_null_pointer_constant_highlighting=none -resharper_cpp_clang_tidy_clang_diagnostic_zero_length_array_highlighting=warning -resharper_cpp_clang_tidy_concurrency_mt_unsafe_highlighting=warning -resharper_cpp_clang_tidy_concurrency_thread_canceltype_asynchronous_highlighting=warning -resharper_cpp_clang_tidy_cppcoreguidelines_avoid_c_arrays_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_avoid_goto_highlighting=warning -resharper_cpp_clang_tidy_cppcoreguidelines_avoid_magic_numbers_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_avoid_non_const_global_variables_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_c_copy_assignment_signature_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_explicit_virtual_functions_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_init_variables_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_interfaces_global_init_highlighting=warning -resharper_cpp_clang_tidy_cppcoreguidelines_macro_usage_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_narrowing_conversions_highlighting=warning -resharper_cpp_clang_tidy_cppcoreguidelines_non_private_member_variables_in_classes_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_no_malloc_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_owning_memory_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_prefer_member_initializer_highlighting=suggestion -resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_array_to_pointer_decay_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_constant_array_index_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_pro_bounds_pointer_arithmetic_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_const_cast_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_cstyle_cast_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_member_init_highlighting=warning -resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_reinterpret_cast_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_static_cast_downcast_highlighting=suggestion -resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_union_access_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_pro_type_vararg_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_slicing_highlighting=none -resharper_cpp_clang_tidy_cppcoreguidelines_special_member_functions_highlighting=suggestion -resharper_cpp_clang_tidy_darwin_avoid_spinlock_highlighting=none -resharper_cpp_clang_tidy_darwin_dispatch_once_nonstatic_highlighting=none -resharper_cpp_clang_tidy_fuchsia_default_arguments_calls_highlighting=none -resharper_cpp_clang_tidy_fuchsia_default_arguments_declarations_highlighting=none -resharper_cpp_clang_tidy_fuchsia_header_anon_namespaces_highlighting=none -resharper_cpp_clang_tidy_fuchsia_multiple_inheritance_highlighting=none -resharper_cpp_clang_tidy_fuchsia_overloaded_operator_highlighting=none -resharper_cpp_clang_tidy_fuchsia_statically_constructed_objects_highlighting=none -resharper_cpp_clang_tidy_fuchsia_trailing_return_highlighting=none -resharper_cpp_clang_tidy_fuchsia_virtual_inheritance_highlighting=none -resharper_cpp_clang_tidy_google_build_explicit_make_pair_highlighting=none -resharper_cpp_clang_tidy_google_build_namespaces_highlighting=none -resharper_cpp_clang_tidy_google_build_using_namespace_highlighting=none -resharper_cpp_clang_tidy_google_default_arguments_highlighting=none -resharper_cpp_clang_tidy_google_explicit_constructor_highlighting=none -resharper_cpp_clang_tidy_google_global_names_in_headers_highlighting=none -resharper_cpp_clang_tidy_google_objc_avoid_nsobject_new_highlighting=none -resharper_cpp_clang_tidy_google_objc_avoid_throwing_exception_highlighting=none -resharper_cpp_clang_tidy_google_objc_function_naming_highlighting=none -resharper_cpp_clang_tidy_google_objc_global_variable_declaration_highlighting=none -resharper_cpp_clang_tidy_google_readability_avoid_underscore_in_googletest_name_highlighting=none -resharper_cpp_clang_tidy_google_readability_braces_around_statements_highlighting=none -resharper_cpp_clang_tidy_google_readability_casting_highlighting=none -resharper_cpp_clang_tidy_google_readability_function_size_highlighting=none -resharper_cpp_clang_tidy_google_readability_namespace_comments_highlighting=none -resharper_cpp_clang_tidy_google_readability_todo_highlighting=none -resharper_cpp_clang_tidy_google_runtime_int_highlighting=none -resharper_cpp_clang_tidy_google_runtime_operator_highlighting=warning -resharper_cpp_clang_tidy_google_upgrade_googletest_case_highlighting=suggestion -resharper_cpp_clang_tidy_hicpp_avoid_c_arrays_highlighting=none -resharper_cpp_clang_tidy_hicpp_avoid_goto_highlighting=warning -resharper_cpp_clang_tidy_hicpp_braces_around_statements_highlighting=none -resharper_cpp_clang_tidy_hicpp_deprecated_headers_highlighting=none -resharper_cpp_clang_tidy_hicpp_exception_baseclass_highlighting=suggestion -resharper_cpp_clang_tidy_hicpp_explicit_conversions_highlighting=none -resharper_cpp_clang_tidy_hicpp_function_size_highlighting=none -resharper_cpp_clang_tidy_hicpp_invalid_access_moved_highlighting=none -resharper_cpp_clang_tidy_hicpp_member_init_highlighting=none -resharper_cpp_clang_tidy_hicpp_move_const_arg_highlighting=none -resharper_cpp_clang_tidy_hicpp_multiway_paths_covered_highlighting=warning -resharper_cpp_clang_tidy_hicpp_named_parameter_highlighting=none -resharper_cpp_clang_tidy_hicpp_new_delete_operators_highlighting=none -resharper_cpp_clang_tidy_hicpp_noexcept_move_highlighting=none -resharper_cpp_clang_tidy_hicpp_no_array_decay_highlighting=none -resharper_cpp_clang_tidy_hicpp_no_assembler_highlighting=none -resharper_cpp_clang_tidy_hicpp_no_malloc_highlighting=none -resharper_cpp_clang_tidy_hicpp_signed_bitwise_highlighting=none -resharper_cpp_clang_tidy_hicpp_special_member_functions_highlighting=none -resharper_cpp_clang_tidy_hicpp_static_assert_highlighting=none -resharper_cpp_clang_tidy_hicpp_undelegated_constructor_highlighting=none -resharper_cpp_clang_tidy_hicpp_uppercase_literal_suffix_highlighting=none -resharper_cpp_clang_tidy_hicpp_use_auto_highlighting=none -resharper_cpp_clang_tidy_hicpp_use_emplace_highlighting=none -resharper_cpp_clang_tidy_hicpp_use_equals_default_highlighting=none -resharper_cpp_clang_tidy_hicpp_use_equals_delete_highlighting=none -resharper_cpp_clang_tidy_hicpp_use_noexcept_highlighting=none -resharper_cpp_clang_tidy_hicpp_use_nullptr_highlighting=none -resharper_cpp_clang_tidy_hicpp_use_override_highlighting=none -resharper_cpp_clang_tidy_hicpp_vararg_highlighting=none -resharper_cpp_clang_tidy_highlighting_highlighting=suggestion -resharper_cpp_clang_tidy_linuxkernel_must_check_errs_highlighting=warning -resharper_cpp_clang_tidy_llvmlibc_callee_namespace_highlighting=none -resharper_cpp_clang_tidy_llvmlibc_implementation_in_namespace_highlighting=none -resharper_cpp_clang_tidy_llvmlibc_restrict_system_libc_headers_highlighting=none -resharper_cpp_clang_tidy_llvm_else_after_return_highlighting=none -resharper_cpp_clang_tidy_llvm_header_guard_highlighting=none -resharper_cpp_clang_tidy_llvm_include_order_highlighting=none -resharper_cpp_clang_tidy_llvm_namespace_comment_highlighting=none -resharper_cpp_clang_tidy_llvm_prefer_isa_or_dyn_cast_in_conditionals_highlighting=none -resharper_cpp_clang_tidy_llvm_prefer_register_over_unsigned_highlighting=suggestion -resharper_cpp_clang_tidy_llvm_qualified_auto_highlighting=none -resharper_cpp_clang_tidy_llvm_twine_local_highlighting=none -resharper_cpp_clang_tidy_misc_definitions_in_headers_highlighting=none -resharper_cpp_clang_tidy_misc_misplaced_const_highlighting=warning -resharper_cpp_clang_tidy_misc_new_delete_overloads_highlighting=warning -resharper_cpp_clang_tidy_misc_non_copyable_objects_highlighting=warning -resharper_cpp_clang_tidy_misc_non_private_member_variables_in_classes_highlighting=none -resharper_cpp_clang_tidy_misc_no_recursion_highlighting=none -resharper_cpp_clang_tidy_misc_redundant_expression_highlighting=warning -resharper_cpp_clang_tidy_misc_static_assert_highlighting=suggestion -resharper_cpp_clang_tidy_misc_throw_by_value_catch_by_reference_highlighting=warning -resharper_cpp_clang_tidy_misc_unconventional_assign_operator_highlighting=warning -resharper_cpp_clang_tidy_misc_uniqueptr_reset_release_highlighting=suggestion -resharper_cpp_clang_tidy_misc_unused_alias_decls_highlighting=suggestion -resharper_cpp_clang_tidy_misc_unused_parameters_highlighting=none -resharper_cpp_clang_tidy_misc_unused_using_decls_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_avoid_bind_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_avoid_c_arrays_highlighting=none -resharper_cpp_clang_tidy_modernize_concat_nested_namespaces_highlighting=none -resharper_cpp_clang_tidy_modernize_deprecated_headers_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_deprecated_ios_base_aliases_highlighting=warning -resharper_cpp_clang_tidy_modernize_loop_convert_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_make_shared_highlighting=none -resharper_cpp_clang_tidy_modernize_make_unique_highlighting=none -resharper_cpp_clang_tidy_modernize_pass_by_value_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_raw_string_literal_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_redundant_void_arg_highlighting=none -resharper_cpp_clang_tidy_modernize_replace_auto_ptr_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_replace_disallow_copy_and_assign_macro_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_replace_random_shuffle_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_return_braced_init_list_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_shrink_to_fit_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_unary_static_assert_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_use_auto_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_use_bool_literals_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_use_default_member_init_highlighting=none -resharper_cpp_clang_tidy_modernize_use_emplace_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_use_equals_default_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_use_equals_delete_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_use_nodiscard_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_use_noexcept_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_use_nullptr_highlighting=none -resharper_cpp_clang_tidy_modernize_use_override_highlighting=none -resharper_cpp_clang_tidy_modernize_use_trailing_return_type_highlighting=none -resharper_cpp_clang_tidy_modernize_use_transparent_functors_highlighting=suggestion -resharper_cpp_clang_tidy_modernize_use_uncaught_exceptions_highlighting=warning -resharper_cpp_clang_tidy_modernize_use_using_highlighting=none -resharper_cpp_clang_tidy_mpi_buffer_deref_highlighting=warning -resharper_cpp_clang_tidy_mpi_type_mismatch_highlighting=warning -resharper_cpp_clang_tidy_objc_avoid_nserror_init_highlighting=warning -resharper_cpp_clang_tidy_objc_dealloc_in_category_highlighting=warning -resharper_cpp_clang_tidy_objc_forbidden_subclassing_highlighting=warning -resharper_cpp_clang_tidy_objc_missing_hash_highlighting=warning -resharper_cpp_clang_tidy_objc_nsinvocation_argument_lifetime_highlighting=warning -resharper_cpp_clang_tidy_objc_property_declaration_highlighting=warning -resharper_cpp_clang_tidy_objc_super_self_highlighting=warning -resharper_cpp_clang_tidy_openmp_exception_escape_highlighting=warning -resharper_cpp_clang_tidy_openmp_use_default_none_highlighting=warning -resharper_cpp_clang_tidy_performance_faster_string_find_highlighting=suggestion -resharper_cpp_clang_tidy_performance_for_range_copy_highlighting=suggestion -resharper_cpp_clang_tidy_performance_implicit_conversion_in_loop_highlighting=suggestion -resharper_cpp_clang_tidy_performance_inefficient_algorithm_highlighting=suggestion -resharper_cpp_clang_tidy_performance_inefficient_string_concatenation_highlighting=suggestion -resharper_cpp_clang_tidy_performance_inefficient_vector_operation_highlighting=suggestion -resharper_cpp_clang_tidy_performance_move_constructor_init_highlighting=warning -resharper_cpp_clang_tidy_performance_move_const_arg_highlighting=suggestion -resharper_cpp_clang_tidy_performance_noexcept_move_constructor_highlighting=none -resharper_cpp_clang_tidy_performance_no_automatic_move_highlighting=warning -resharper_cpp_clang_tidy_performance_no_int_to_ptr_highlighting=warning -resharper_cpp_clang_tidy_performance_trivially_destructible_highlighting=suggestion -resharper_cpp_clang_tidy_performance_type_promotion_in_math_fn_highlighting=suggestion -resharper_cpp_clang_tidy_performance_unnecessary_copy_initialization_highlighting=suggestion -resharper_cpp_clang_tidy_performance_unnecessary_value_param_highlighting=suggestion -resharper_cpp_clang_tidy_portability_restrict_system_includes_highlighting=none -resharper_cpp_clang_tidy_portability_simd_intrinsics_highlighting=none -resharper_cpp_clang_tidy_readability_avoid_const_params_in_decls_highlighting=none -resharper_cpp_clang_tidy_readability_braces_around_statements_highlighting=none -resharper_cpp_clang_tidy_readability_const_return_type_highlighting=none -resharper_cpp_clang_tidy_readability_container_size_empty_highlighting=suggestion -resharper_cpp_clang_tidy_readability_convert_member_functions_to_static_highlighting=none -resharper_cpp_clang_tidy_readability_delete_null_pointer_highlighting=suggestion -resharper_cpp_clang_tidy_readability_else_after_return_highlighting=none -resharper_cpp_clang_tidy_readability_function_cognitive_complexity_highlighting=none -resharper_cpp_clang_tidy_readability_function_size_highlighting=none -resharper_cpp_clang_tidy_readability_identifier_naming_highlighting=none -resharper_cpp_clang_tidy_readability_implicit_bool_conversion_highlighting=none -resharper_cpp_clang_tidy_readability_inconsistent_declaration_parameter_name_highlighting=suggestion -resharper_cpp_clang_tidy_readability_isolate_declaration_highlighting=none -resharper_cpp_clang_tidy_readability_magic_numbers_highlighting=none -resharper_cpp_clang_tidy_readability_make_member_function_const_highlighting=none -resharper_cpp_clang_tidy_readability_misleading_indentation_highlighting=none -resharper_cpp_clang_tidy_readability_misplaced_array_index_highlighting=suggestion -resharper_cpp_clang_tidy_readability_named_parameter_highlighting=none -resharper_cpp_clang_tidy_readability_non_const_parameter_highlighting=none -resharper_cpp_clang_tidy_readability_qualified_auto_highlighting=none -resharper_cpp_clang_tidy_readability_redundant_access_specifiers_highlighting=none -resharper_cpp_clang_tidy_readability_redundant_control_flow_highlighting=none -resharper_cpp_clang_tidy_readability_redundant_declaration_highlighting=suggestion -resharper_cpp_clang_tidy_readability_redundant_function_ptr_dereference_highlighting=suggestion -resharper_cpp_clang_tidy_readability_redundant_member_init_highlighting=none -resharper_cpp_clang_tidy_readability_redundant_preprocessor_highlighting=warning -resharper_cpp_clang_tidy_readability_redundant_smartptr_get_highlighting=suggestion -resharper_cpp_clang_tidy_readability_redundant_string_cstr_highlighting=suggestion -resharper_cpp_clang_tidy_readability_redundant_string_init_highlighting=suggestion -resharper_cpp_clang_tidy_readability_simplify_boolean_expr_highlighting=none -resharper_cpp_clang_tidy_readability_simplify_subscript_expr_highlighting=warning -resharper_cpp_clang_tidy_readability_static_accessed_through_instance_highlighting=suggestion -resharper_cpp_clang_tidy_readability_static_definition_in_anonymous_namespace_highlighting=none -resharper_cpp_clang_tidy_readability_string_compare_highlighting=warning -resharper_cpp_clang_tidy_readability_suspicious_call_argument_highlighting=warning -resharper_cpp_clang_tidy_readability_uniqueptr_delete_release_highlighting=suggestion -resharper_cpp_clang_tidy_readability_uppercase_literal_suffix_highlighting=none -resharper_cpp_clang_tidy_readability_use_anyofallof_highlighting=suggestion -resharper_cpp_clang_tidy_zircon_temporary_objects_highlighting=none -resharper_cpp_class_can_be_final_highlighting=hint -resharper_cpp_class_disallow_lazy_merging_highlighting=warning -resharper_cpp_class_is_incomplete_highlighting=warning -resharper_cpp_class_needs_constructor_because_of_uninitialized_member_highlighting=warning -resharper_cpp_class_never_used_highlighting=warning -resharper_cpp_compile_time_constant_can_be_replaced_with_boolean_constant_highlighting=suggestion -resharper_cpp_const_parameter_in_declaration_highlighting=suggestion -resharper_cpp_const_value_function_return_type_highlighting=suggestion -resharper_cpp_coroutine_call_resolve_error_highlighting=warning -resharper_cpp_cv_qualifier_can_not_be_applied_to_reference_highlighting=warning -resharper_cpp_c_style_cast_highlighting=suggestion -resharper_cpp_declaration_hides_local_highlighting=warning -resharper_cpp_declaration_hides_uncaptured_local_highlighting=hint -resharper_cpp_declaration_specifier_without_declarators_highlighting=warning -resharper_cpp_declarator_disambiguated_as_function_highlighting=warning -resharper_cpp_declarator_never_used_highlighting=warning -resharper_cpp_declarator_used_before_initialization_highlighting=error -resharper_cpp_defaulted_special_member_function_is_implicitly_deleted_highlighting=warning -resharper_cpp_default_case_not_handled_in_switch_statement_highlighting=warning -resharper_cpp_default_initialization_with_no_user_constructor_highlighting=warning -resharper_cpp_default_is_used_as_identifier_highlighting=warning -resharper_cpp_deleting_void_pointer_highlighting=warning -resharper_cpp_dependent_template_without_template_keyword_highlighting=warning -resharper_cpp_dependent_type_without_typename_keyword_highlighting=warning -resharper_cpp_deprecated_entity_highlighting=warning -resharper_cpp_deprecated_register_storage_class_specifier_highlighting=warning -resharper_cpp_dereference_operator_limit_exceeded_highlighting=warning -resharper_cpp_discarded_postfix_operator_result_highlighting=suggestion -resharper_cpp_doxygen_syntax_error_highlighting=warning -resharper_cpp_doxygen_undocumented_parameter_highlighting=suggestion -resharper_cpp_doxygen_unresolved_reference_highlighting=warning -resharper_cpp_empty_declaration_highlighting=warning -resharper_cpp_enforce_cv_qualifiers_order_highlighting=none -resharper_cpp_enforce_cv_qualifiers_placement_highlighting=none -resharper_cpp_enforce_do_statement_braces_highlighting=none -resharper_cpp_enforce_for_statement_braces_highlighting=none -resharper_cpp_enforce_function_declaration_style_highlighting=none -resharper_cpp_enforce_if_statement_braces_highlighting=none -resharper_cpp_enforce_nested_namespaces_style_highlighting=hint -resharper_cpp_enforce_overriding_destructor_style_highlighting=suggestion -resharper_cpp_enforce_overriding_function_style_highlighting=suggestion -resharper_cpp_enforce_type_alias_code_style_highlighting=none -resharper_cpp_enforce_while_statement_braces_highlighting=none -resharper_cpp_entity_assigned_but_no_read_highlighting=warning -resharper_cpp_entity_used_only_in_unevaluated_context_highlighting=warning -resharper_cpp_enumerator_never_used_highlighting=warning -resharper_cpp_equal_operands_in_binary_expression_highlighting=warning -resharper_cpp_explicit_specialization_in_non_namespace_scope_highlighting=warning -resharper_cpp_expression_without_side_effects_highlighting=warning -resharper_cpp_final_function_in_final_class_highlighting=suggestion -resharper_cpp_final_non_overriding_virtual_function_highlighting=suggestion -resharper_cpp_for_loop_can_be_replaced_with_while_highlighting=suggestion -resharper_cpp_functional_style_cast_highlighting=suggestion -resharper_cpp_function_doesnt_return_value_highlighting=warning -resharper_cpp_function_is_not_implemented_highlighting=warning -resharper_cpp_header_has_been_already_included_highlighting=hint -resharper_cpp_hidden_function_highlighting=warning -resharper_cpp_hiding_function_highlighting=warning -resharper_cpp_identical_operands_in_binary_expression_highlighting=warning -resharper_cpp_if_can_be_replaced_by_constexpr_if_highlighting=suggestion -resharper_cpp_implicit_default_constructor_not_available_highlighting=warning -resharper_cpp_incompatible_pointer_conversion_highlighting=warning -resharper_cpp_incomplete_switch_statement_highlighting=warning -resharper_cpp_inconsistent_naming_highlighting=hint -resharper_cpp_incorrect_blank_lines_near_braces_highlighting=none -resharper_cpp_initialized_value_is_always_rewritten_highlighting=warning -resharper_cpp_integral_to_pointer_conversion_highlighting=warning -resharper_cpp_invalid_line_continuation_highlighting=warning -resharper_cpp_join_declaration_and_assignment_highlighting=suggestion -resharper_cpp_lambda_capture_never_used_highlighting=warning -resharper_cpp_local_variable_may_be_const_highlighting=suggestion -resharper_cpp_local_variable_might_not_be_initialized_highlighting=warning -resharper_cpp_local_variable_with_non_trivial_dtor_is_never_used_highlighting=none -resharper_cpp_long_float_highlighting=warning -resharper_cpp_member_function_may_be_const_highlighting=suggestion -resharper_cpp_member_function_may_be_static_highlighting=suggestion -resharper_cpp_member_initializers_order_highlighting=suggestion -resharper_cpp_mismatched_class_tags_highlighting=warning -resharper_cpp_missing_blank_lines_highlighting=none -resharper_cpp_missing_include_guard_highlighting=warning -resharper_cpp_missing_indent_highlighting=none -resharper_cpp_missing_keyword_throw_highlighting=warning -resharper_cpp_missing_linebreak_highlighting=none -resharper_cpp_missing_space_highlighting=none -resharper_cpp_ms_ext_address_of_class_r_value_highlighting=warning -resharper_cpp_ms_ext_binding_r_value_to_lvalue_reference_highlighting=warning -resharper_cpp_ms_ext_copy_elision_in_copy_init_declarator_highlighting=warning -resharper_cpp_ms_ext_double_user_conversion_in_copy_init_highlighting=warning -resharper_cpp_ms_ext_not_initialized_static_const_local_var_highlighting=warning -resharper_cpp_ms_ext_reinterpret_cast_from_nullptr_highlighting=warning -resharper_cpp_multiple_spaces_highlighting=none -resharper_cpp_must_be_public_virtual_to_implement_interface_highlighting=warning -resharper_cpp_mutable_specifier_on_reference_member_highlighting=warning -resharper_cpp_nodiscard_function_without_return_value_highlighting=warning -resharper_cpp_non_exception_safe_resource_acquisition_highlighting=hint -resharper_cpp_non_explicit_conversion_operator_highlighting=hint -resharper_cpp_non_explicit_converting_constructor_highlighting=hint -resharper_cpp_non_inline_function_definition_in_header_file_highlighting=warning -resharper_cpp_non_inline_variable_definition_in_header_file_highlighting=warning -resharper_cpp_not_all_paths_return_value_highlighting=warning -resharper_cpp_no_discard_expression_highlighting=warning -resharper_cpp_object_member_might_not_be_initialized_highlighting=warning -resharper_cpp_outdent_is_off_prev_level_highlighting=none -resharper_cpp_out_parameter_must_be_written_highlighting=warning -resharper_cpp_parameter_may_be_const_highlighting=hint -resharper_cpp_parameter_may_be_const_ptr_or_ref_highlighting=suggestion -resharper_cpp_parameter_names_mismatch_highlighting=hint -resharper_cpp_parameter_never_used_highlighting=hint -resharper_cpp_parameter_value_is_reassigned_highlighting=warning -resharper_cpp_pointer_conversion_drops_qualifiers_highlighting=warning -resharper_cpp_pointer_to_integral_conversion_highlighting=warning -resharper_cpp_polymorphic_class_with_non_virtual_public_destructor_highlighting=warning -resharper_cpp_possibly_erroneous_empty_statements_highlighting=warning -resharper_cpp_possibly_uninitialized_member_highlighting=warning -resharper_cpp_possibly_unintended_object_slicing_highlighting=warning -resharper_cpp_precompiled_header_is_not_included_highlighting=error -resharper_cpp_precompiled_header_not_found_highlighting=error -resharper_cpp_printf_bad_format_highlighting=warning -resharper_cpp_printf_extra_arg_highlighting=warning -resharper_cpp_printf_missed_arg_highlighting=error -resharper_cpp_printf_risky_format_highlighting=warning -resharper_cpp_private_special_member_function_is_not_implemented_highlighting=warning -resharper_cpp_range_based_for_incompatible_reference_highlighting=warning -resharper_cpp_redefinition_of_default_argument_in_override_function_highlighting=warning -resharper_cpp_redundant_access_specifier_highlighting=hint -resharper_cpp_redundant_base_class_access_specifier_highlighting=hint -resharper_cpp_redundant_blank_lines_highlighting=none -resharper_cpp_redundant_boolean_expression_argument_highlighting=warning -resharper_cpp_redundant_cast_expression_highlighting=hint -resharper_cpp_redundant_const_specifier_highlighting=hint -resharper_cpp_redundant_control_flow_jump_highlighting=hint -resharper_cpp_redundant_elaborated_type_specifier_highlighting=hint -resharper_cpp_redundant_else_keyword_highlighting=hint -resharper_cpp_redundant_else_keyword_inside_compound_statement_highlighting=hint -resharper_cpp_redundant_empty_declaration_highlighting=hint -resharper_cpp_redundant_empty_statement_highlighting=hint -resharper_cpp_redundant_explicit_template_arguments_highlighting=hint -resharper_cpp_redundant_inline_specifier_highlighting=hint -resharper_cpp_redundant_lambda_parameter_list_highlighting=hint -resharper_cpp_redundant_linebreak_highlighting=none -resharper_cpp_redundant_member_initializer_highlighting=suggestion -resharper_cpp_redundant_namespace_definition_highlighting=suggestion -resharper_cpp_redundant_parentheses_highlighting=hint -resharper_cpp_redundant_qualifier_highlighting=hint -resharper_cpp_redundant_space_highlighting=none -resharper_cpp_redundant_static_specifier_on_member_allocation_function_highlighting=hint -resharper_cpp_redundant_template_keyword_highlighting=warning -resharper_cpp_redundant_typename_keyword_highlighting=warning -resharper_cpp_redundant_void_argument_list_highlighting=suggestion -resharper_cpp_reinterpret_cast_from_void_ptr_highlighting=suggestion -resharper_cpp_remove_redundant_braces_highlighting=none -resharper_cpp_replace_memset_with_zero_initialization_highlighting=suggestion -resharper_cpp_replace_tie_with_structured_binding_highlighting=suggestion -resharper_cpp_return_no_value_in_non_void_function_highlighting=warning -resharper_cpp_smart_pointer_vs_make_function_highlighting=suggestion -resharper_cpp_some_object_members_might_not_be_initialized_highlighting=warning -resharper_cpp_special_function_without_noexcept_specification_highlighting=warning -resharper_cpp_static_data_member_in_unnamed_struct_highlighting=warning -resharper_cpp_static_specifier_on_anonymous_namespace_member_highlighting=suggestion -resharper_cpp_string_literal_to_char_pointer_conversion_highlighting=warning -resharper_cpp_syntax_warning_highlighting=warning -resharper_cpp_tabs_and_spaces_mismatch_highlighting=none -resharper_cpp_tabs_are_disallowed_highlighting=none -resharper_cpp_tabs_outside_indent_highlighting=none -resharper_cpp_template_parameter_shadowing_highlighting=warning -resharper_cpp_this_arg_member_func_delegate_ctor_is_unsuported_by_dot_net_core_highlighting=none -resharper_cpp_throw_expression_can_be_replaced_with_rethrow_highlighting=warning -resharper_cpp_too_wide_scope_highlighting=suggestion -resharper_cpp_too_wide_scope_init_statement_highlighting=hint -resharper_cpp_type_alias_never_used_highlighting=warning -resharper_cpp_ue4_blueprint_callable_function_may_be_const_highlighting=hint -resharper_cpp_ue4_blueprint_callable_function_may_be_static_highlighting=hint -resharper_cpp_ue4_coding_standard_naming_violation_warning_highlighting=hint -resharper_cpp_ue4_coding_standard_u_class_naming_violation_error_highlighting=error -resharper_cpp_ue4_probable_memory_issues_with_u_objects_in_container_highlighting=warning -resharper_cpp_ue4_probable_memory_issues_with_u_object_highlighting=warning -resharper_cpp_ue_blueprint_callable_function_unused_highlighting=warning -resharper_cpp_ue_blueprint_implementable_event_not_implemented_highlighting=warning -resharper_cpp_ue_incorrect_engine_directory_highlighting=error -resharper_cpp_ue_non_existent_input_action_highlighting=warning -resharper_cpp_ue_non_existent_input_axis_highlighting=warning -resharper_cpp_ue_source_file_without_predefined_macros_highlighting=warning -resharper_cpp_ue_source_file_without_standard_library_highlighting=error -resharper_cpp_ue_version_file_doesnt_exist_highlighting=error -resharper_cpp_uninitialized_dependent_base_class_highlighting=warning -resharper_cpp_uninitialized_non_static_data_member_highlighting=warning -resharper_cpp_union_member_of_reference_type_highlighting=warning -resharper_cpp_unnamed_namespace_in_header_file_highlighting=warning -resharper_cpp_unnecessary_whitespace_highlighting=none -resharper_cpp_unreachable_code_highlighting=warning -resharper_cpp_unsigned_zero_comparison_highlighting=warning -resharper_cpp_unused_include_directive_highlighting=warning -resharper_cpp_user_defined_literal_suffix_does_not_start_with_underscore_highlighting=warning -resharper_cpp_use_algorithm_with_count_highlighting=suggestion -resharper_cpp_use_associative_contains_highlighting=suggestion -resharper_cpp_use_auto_for_numeric_highlighting=hint -resharper_cpp_use_auto_highlighting=hint -resharper_cpp_use_elements_view_highlighting=suggestion -resharper_cpp_use_erase_algorithm_highlighting=suggestion -resharper_cpp_use_familiar_template_syntax_for_generic_lambdas_highlighting=suggestion -resharper_cpp_use_range_algorithm_highlighting=suggestion -resharper_cpp_use_std_size_highlighting=suggestion -resharper_cpp_use_structured_binding_highlighting=hint -resharper_cpp_use_type_trait_alias_highlighting=suggestion -resharper_cpp_using_result_of_assignment_as_condition_highlighting=warning -resharper_cpp_u_function_macro_call_has_no_effect_highlighting=warning -resharper_cpp_u_property_macro_call_has_no_effect_highlighting=warning -resharper_cpp_variable_can_be_made_constexpr_highlighting=suggestion -resharper_cpp_virtual_function_call_inside_ctor_highlighting=warning -resharper_cpp_virtual_function_in_final_class_highlighting=warning -resharper_cpp_volatile_parameter_in_declaration_highlighting=suggestion -resharper_cpp_wrong_includes_order_highlighting=hint -resharper_cpp_wrong_indent_size_highlighting=none -resharper_cpp_wrong_slashes_in_include_directive_highlighting=hint -resharper_cpp_zero_constant_can_be_replaced_with_nullptr_highlighting=suggestion -resharper_cpp_zero_valued_expression_used_as_null_pointer_highlighting=warning -resharper_create_specialized_overload_highlighting=hint -resharper_css_browser_compatibility_highlighting=warning -resharper_css_caniuse_feature_requires_prefix_highlighting=hint -resharper_css_caniuse_unsupported_feature_highlighting=hint -resharper_css_not_resolved_highlighting=error -resharper_css_obsolete_highlighting=hint -resharper_css_property_does_not_override_vendor_property_highlighting=warning -resharper_cyclic_reference_comment_highlighting=none -resharper_c_declaration_with_implicit_int_type_highlighting=warning -resharper_c_sharp_build_cs_invalid_module_name_highlighting=warning -resharper_c_sharp_missing_plugin_dependency_highlighting=warning -resharper_declaration_hides_highlighting=hint -resharper_declaration_is_empty_highlighting=warning -resharper_declaration_visibility_error_highlighting=error -resharper_default_value_attribute_for_optional_parameter_highlighting=warning -resharper_deleting_non_qualified_reference_highlighting=error -resharper_dl_tag_contains_non_dt_or_dd_elements_highlighting=hint -resharper_double_colons_expected_highlighting=error -resharper_double_colons_preferred_highlighting=suggestion -resharper_double_negation_in_pattern_highlighting=suggestion -resharper_double_negation_of_boolean_highlighting=warning -resharper_double_negation_operator_highlighting=suggestion -resharper_duplicate_identifier_error_highlighting=error -resharper_duplicate_reference_comment_highlighting=warning -resharper_duplicate_resource_highlighting=warning -resharper_duplicating_local_declaration_highlighting=warning -resharper_duplicating_parameter_declaration_error_highlighting=error -resharper_duplicating_property_declaration_error_highlighting=error -resharper_duplicating_property_declaration_highlighting=warning -resharper_duplicating_switch_label_highlighting=warning -resharper_dynamic_shift_right_op_is_not_int_highlighting=warning -resharper_elided_trailing_element_highlighting=warning -resharper_empty_constructor_highlighting=warning -resharper_empty_destructor_highlighting=warning -resharper_empty_embedded_statement_highlighting=warning -resharper_empty_for_statement_highlighting=warning -resharper_empty_general_catch_clause_highlighting=warning -resharper_empty_namespace_highlighting=warning -resharper_empty_object_property_declaration_highlighting=error -resharper_empty_return_value_for_type_annotated_function_highlighting=warning -resharper_empty_statement_highlighting=warning -resharper_empty_title_tag_highlighting=hint -resharper_enforce_do_while_statement_braces_highlighting=none -resharper_enforce_fixed_statement_braces_highlighting=none -resharper_enforce_foreach_statement_braces_highlighting=none -resharper_enforce_for_statement_braces_highlighting=none -resharper_enforce_if_statement_braces_highlighting=none -resharper_enforce_lock_statement_braces_highlighting=none -resharper_enforce_using_statement_braces_highlighting=none -resharper_enforce_while_statement_braces_highlighting=none -resharper_entity_name_captured_only_global_highlighting=warning -resharper_entity_name_captured_only_local_highlighting=warning -resharper_enumerable_sum_in_explicit_unchecked_context_highlighting=warning -resharper_enum_underlying_type_is_int_highlighting=warning -resharper_equal_expression_comparison_highlighting=warning -resharper_error_in_xml_doc_reference_highlighting=error -resharper_es6_feature_highlighting=error -resharper_es7_feature_highlighting=error -resharper_eval_arguments_name_error_highlighting=error -resharper_event_never_invoked_global_highlighting=suggestion -resharper_event_never_subscribed_to_global_highlighting=suggestion -resharper_event_never_subscribed_to_local_highlighting=suggestion -resharper_event_unsubscription_via_anonymous_delegate_highlighting=warning -resharper_experimental_feature_highlighting=error -resharper_explicit_caller_info_argument_highlighting=warning -resharper_expression_is_always_const_highlighting=warning -resharper_expression_is_always_null_highlighting=warning -resharper_field_can_be_made_read_only_global_highlighting=suggestion -resharper_field_can_be_made_read_only_local_highlighting=suggestion -resharper_field_hides_interface_property_with_default_implementation_highlighting=warning -resharper_foreach_can_be_converted_to_query_using_another_get_enumerator_highlighting=hint -resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting=hint -resharper_format_string_placeholders_mismatch_highlighting=warning -resharper_format_string_problem_highlighting=warning -resharper_for_can_be_converted_to_foreach_highlighting=suggestion -resharper_for_statement_condition_is_true_highlighting=warning -resharper_functions_used_before_declared_highlighting=none -resharper_function_complexity_overflow_highlighting=none -resharper_function_never_returns_highlighting=warning -resharper_function_parameter_named_arguments_highlighting=warning -resharper_function_recursive_on_all_paths_highlighting=warning -resharper_function_used_out_of_scope_highlighting=warning -resharper_gc_suppress_finalize_for_type_without_destructor_highlighting=warning -resharper_generic_enumerator_not_disposed_highlighting=warning -resharper_heuristically_unreachable_code_highlighting=warning -resharper_heuristic_unreachable_code_highlighting=warning -resharper_hex_color_value_with_alpha_highlighting=error -resharper_html_attributes_quotes_highlighting=hint -resharper_html_attribute_not_resolved_highlighting=warning -resharper_html_attribute_value_not_resolved_highlighting=warning -resharper_html_dead_code_highlighting=warning -resharper_html_event_not_resolved_highlighting=warning -resharper_html_id_duplication_highlighting=warning -resharper_html_id_not_resolved_highlighting=warning -resharper_html_obsolete_highlighting=warning -resharper_html_path_error_highlighting=warning -resharper_html_tag_not_closed_highlighting=error -resharper_html_tag_not_resolved_highlighting=warning -resharper_html_tag_should_be_self_closed_highlighting=warning -resharper_html_tag_should_not_be_self_closed_highlighting=warning -resharper_html_warning_highlighting=warning -resharper_identifier_typo_highlighting=suggestion -resharper_implicit_any_error_highlighting=error -resharper_implicit_any_type_warning_highlighting=warning -resharper_import_keyword_not_with_invocation_highlighting=error -resharper_inactive_preprocessor_branch_highlighting=warning -resharper_inconsistently_synchronized_field_highlighting=warning -resharper_inconsistent_function_returns_highlighting=warning -resharper_inconsistent_naming_highlighting=warning -resharper_inconsistent_order_of_locks_highlighting=warning -resharper_incorrect_blank_lines_near_braces_highlighting=none -resharper_incorrect_operand_in_type_of_comparison_highlighting=warning -resharper_incorrect_triple_slash_location_highlighting=warning -resharper_indexing_by_invalid_range_highlighting=warning -resharper_inheritdoc_consider_usage_highlighting=none -resharper_inheritdoc_invalid_usage_highlighting=warning -resharper_inline_out_variable_declaration_highlighting=suggestion -resharper_inline_temporary_variable_highlighting=hint -resharper_internal_module_highlighting=suggestion -resharper_internal_or_private_member_not_documented_highlighting=none -resharper_interpolated_string_expression_is_not_i_formattable_highlighting=warning -resharper_introduce_optional_parameters_global_highlighting=suggestion -resharper_introduce_optional_parameters_local_highlighting=suggestion -resharper_introduce_variable_to_apply_guard_highlighting=hint -resharper_int_division_by_zero_highlighting=warning -resharper_int_variable_overflow_highlighting=warning -resharper_int_variable_overflow_in_checked_context_highlighting=warning -resharper_int_variable_overflow_in_unchecked_context_highlighting=warning -resharper_invalid_attribute_value_highlighting=warning -resharper_invalid_json_syntax_highlighting=error -resharper_invalid_task_element_highlighting=none -resharper_invalid_value_highlighting=error -resharper_invalid_value_type_highlighting=warning -resharper_invalid_xml_doc_comment_highlighting=warning -resharper_invert_condition_1_highlighting=hint -resharper_invert_if_highlighting=hint -resharper_invocation_is_skipped_highlighting=hint -resharper_invocation_of_non_function_highlighting=warning -resharper_invoked_expression_maybe_non_function_highlighting=warning -resharper_invoke_as_extension_method_highlighting=suggestion -resharper_is_expression_always_false_highlighting=warning -resharper_is_expression_always_true_highlighting=warning -resharper_iterator_method_result_is_ignored_highlighting=warning -resharper_iterator_never_returns_highlighting=warning -resharper_join_declaration_and_initializer_highlighting=suggestion -resharper_join_declaration_and_initializer_js_highlighting=suggestion -resharper_join_null_check_with_usage_highlighting=suggestion -resharper_join_null_check_with_usage_when_possible_highlighting=none -resharper_json_validation_failed_highlighting=error -resharper_js_path_not_found_highlighting=error -resharper_js_unreachable_code_highlighting=warning -resharper_jump_must_be_in_loop_highlighting=warning -resharper_label_or_semicolon_expected_highlighting=error -resharper_lambda_expression_can_be_made_static_highlighting=none -resharper_lambda_expression_must_be_static_highlighting=suggestion -resharper_lambda_highlighting=suggestion -resharper_lambda_should_not_capture_context_highlighting=warning -resharper_less_specific_overload_than_main_signature_highlighting=warning -resharper_lexical_declaration_needs_block_highlighting=error -resharper_localizable_element_highlighting=warning -resharper_local_function_can_be_made_static_highlighting=none -resharper_local_function_hides_method_highlighting=warning -resharper_local_function_redefined_later_highlighting=warning -resharper_local_variable_hides_member_highlighting=warning -resharper_long_literal_ending_lower_l_highlighting=warning -resharper_loop_can_be_converted_to_query_highlighting=hint -resharper_loop_can_be_partly_converted_to_query_highlighting=none -resharper_loop_variable_is_never_changed_inside_loop_highlighting=warning -resharper_l_value_is_expected_highlighting=error -resharper_markup_attribute_typo_highlighting=suggestion -resharper_markup_text_typo_highlighting=suggestion -resharper_math_abs_method_is_redundant_highlighting=warning -resharper_math_clamp_min_greater_than_max_highlighting=warning -resharper_meaningless_default_parameter_value_highlighting=warning -resharper_member_can_be_internal_highlighting=none -resharper_member_can_be_made_static_global_highlighting=hint -resharper_member_can_be_made_static_local_highlighting=hint -resharper_member_can_be_private_global_highlighting=suggestion -resharper_member_can_be_private_local_highlighting=suggestion -resharper_member_can_be_protected_global_highlighting=suggestion -resharper_member_can_be_protected_local_highlighting=suggestion -resharper_member_hides_interface_member_with_default_implementation_highlighting=warning -resharper_member_hides_static_from_outer_class_highlighting=warning -resharper_member_initializer_value_ignored_highlighting=warning -resharper_merge_and_pattern_highlighting=suggestion -resharper_merge_cast_with_type_check_highlighting=suggestion -resharper_merge_conditional_expression_highlighting=suggestion -resharper_merge_conditional_expression_when_possible_highlighting=none -resharper_merge_into_logical_pattern_highlighting=hint -resharper_merge_into_negated_pattern_highlighting=hint -resharper_merge_into_pattern_highlighting=suggestion -resharper_merge_nested_property_patterns_highlighting=suggestion -resharper_merge_sequential_checks_highlighting=hint -resharper_merge_sequential_checks_when_possible_highlighting=none -resharper_method_has_async_overload_highlighting=suggestion -resharper_method_has_async_overload_with_cancellation_highlighting=suggestion -resharper_method_overload_with_optional_parameter_highlighting=warning -resharper_method_safe_this_highlighting=suggestion -resharper_method_supports_cancellation_highlighting=suggestion -resharper_missing_alt_attribute_in_img_tag_highlighting=hint -resharper_missing_attribute_highlighting=warning -resharper_missing_blank_lines_highlighting=none -resharper_missing_body_tag_highlighting=warning -resharper_missing_has_own_property_in_foreach_highlighting=warning -resharper_missing_head_and_body_tags_highlighting=warning -resharper_missing_head_tag_highlighting=warning -resharper_missing_indent_highlighting=none -resharper_missing_linebreak_highlighting=none -resharper_missing_space_highlighting=none -resharper_missing_title_tag_highlighting=hint -resharper_misuse_of_owner_function_this_highlighting=warning -resharper_more_specific_foreach_variable_type_available_highlighting=suggestion -resharper_more_specific_signature_after_less_specific_highlighting=warning -resharper_move_to_existing_positional_deconstruction_pattern_highlighting=hint -resharper_multiple_declarations_in_foreach_highlighting=error -resharper_multiple_nullable_attributes_usage_highlighting=warning -resharper_multiple_order_by_highlighting=warning -resharper_multiple_output_tags_highlighting=warning -resharper_multiple_resolve_candidates_in_text_highlighting=warning -resharper_multiple_spaces_highlighting=none -resharper_multiple_statements_on_one_line_highlighting=none -resharper_multiple_type_members_on_one_line_highlighting=none -resharper_must_use_return_value_highlighting=warning -resharper_mvc_action_not_resolved_highlighting=error -resharper_mvc_area_not_resolved_highlighting=error -resharper_mvc_controller_not_resolved_highlighting=error -resharper_mvc_invalid_model_type_highlighting=error -resharper_mvc_masterpage_not_resolved_highlighting=error -resharper_mvc_partial_view_not_resolved_highlighting=error -resharper_mvc_template_not_resolved_highlighting=error -resharper_mvc_view_component_not_resolved_highlighting=error -resharper_mvc_view_component_view_not_resolved_highlighting=error -resharper_mvc_view_not_resolved_highlighting=error -resharper_native_type_prototype_extending_highlighting=warning -resharper_native_type_prototype_overwriting_highlighting=warning -resharper_negation_of_relational_pattern_highlighting=suggestion -resharper_negative_equality_expression_highlighting=suggestion -resharper_negative_index_highlighting=warning -resharper_nested_string_interpolation_highlighting=suggestion -resharper_non_assigned_constant_highlighting=error -resharper_non_atomic_compound_operator_highlighting=warning -resharper_non_constant_equality_expression_has_constant_result_highlighting=warning -resharper_non_parsable_element_highlighting=warning -resharper_non_readonly_member_in_get_hash_code_highlighting=warning -resharper_non_volatile_field_in_double_check_locking_highlighting=warning -resharper_not_accessed_field_global_highlighting=suggestion -resharper_not_accessed_field_local_highlighting=warning -resharper_not_accessed_positional_property_global_highlighting=warning -resharper_not_accessed_positional_property_local_highlighting=warning -resharper_not_accessed_variable_highlighting=warning -resharper_not_all_paths_return_value_highlighting=warning -resharper_not_assigned_out_parameter_highlighting=warning -resharper_not_declared_in_parent_culture_highlighting=warning -resharper_not_null_member_is_not_initialized_highlighting=warning -resharper_not_observable_annotation_redundancy_highlighting=warning -resharper_not_overridden_in_specific_culture_highlighting=warning -resharper_not_resolved_highlighting=warning -resharper_not_resolved_in_text_highlighting=warning -resharper_nullable_warning_suppression_is_used_highlighting=none -resharper_n_unit_async_method_must_be_task_highlighting=warning -resharper_n_unit_attribute_produces_too_many_tests_highlighting=none -resharper_n_unit_auto_fixture_incorrect_argument_type_highlighting=warning -resharper_n_unit_auto_fixture_missed_test_attribute_highlighting=warning -resharper_n_unit_auto_fixture_missed_test_or_test_fixture_attribute_highlighting=warning -resharper_n_unit_auto_fixture_redundant_argument_in_inline_auto_data_attribute_highlighting=warning -resharper_n_unit_duplicate_values_highlighting=warning -resharper_n_unit_ignored_parameter_attribute_highlighting=warning -resharper_n_unit_implicit_unspecified_null_values_highlighting=warning -resharper_n_unit_incorrect_argument_type_highlighting=warning -resharper_n_unit_incorrect_expected_result_type_highlighting=warning -resharper_n_unit_incorrect_range_bounds_highlighting=warning -resharper_n_unit_method_with_parameters_and_test_attribute_highlighting=warning -resharper_n_unit_missing_arguments_in_test_case_attribute_highlighting=warning -resharper_n_unit_non_public_method_with_test_attribute_highlighting=warning -resharper_n_unit_no_values_provided_highlighting=warning -resharper_n_unit_parameter_type_is_not_compatible_with_attribute_highlighting=warning -resharper_n_unit_range_attribute_bounds_are_out_of_range_highlighting=warning -resharper_n_unit_range_step_sign_mismatch_highlighting=warning -resharper_n_unit_range_step_value_must_not_be_zero_highlighting=warning -resharper_n_unit_range_to_value_is_not_reachable_highlighting=warning -resharper_n_unit_redundant_argument_instead_of_expected_result_highlighting=warning -resharper_n_unit_redundant_argument_in_test_case_attribute_highlighting=warning -resharper_n_unit_redundant_expected_result_in_test_case_attribute_highlighting=warning -resharper_n_unit_test_case_attribute_requires_expected_result_highlighting=warning -resharper_n_unit_test_case_result_property_duplicates_expected_result_highlighting=warning -resharper_n_unit_test_case_result_property_is_obsolete_highlighting=warning -resharper_n_unit_test_case_source_cannot_be_resolved_highlighting=warning -resharper_n_unit_test_case_source_must_be_field_property_method_highlighting=warning -resharper_n_unit_test_case_source_must_be_static_highlighting=warning -resharper_n_unit_test_case_source_should_implement_i_enumerable_highlighting=warning -resharper_object_creation_as_statement_highlighting=warning -resharper_object_destructuring_without_parentheses_highlighting=error -resharper_object_literals_are_not_comma_free_highlighting=error -resharper_obsolete_element_error_highlighting=error -resharper_obsolete_element_highlighting=warning -resharper_octal_literals_not_allowed_error_highlighting=error -resharper_ol_tag_contains_non_li_elements_highlighting=hint -resharper_one_way_operation_contract_with_return_type_highlighting=warning -resharper_operation_contract_without_service_contract_highlighting=warning -resharper_operator_is_can_be_used_highlighting=warning -resharper_optional_parameter_hierarchy_mismatch_highlighting=warning -resharper_optional_parameter_ref_out_highlighting=warning -resharper_other_tags_inside_script1_highlighting=error -resharper_other_tags_inside_script2_highlighting=error -resharper_other_tags_inside_unclosed_script_highlighting=error -resharper_outdent_is_off_prev_level_highlighting=none -resharper_output_tag_required_highlighting=warning -resharper_out_parameter_value_is_always_discarded_global_highlighting=suggestion -resharper_out_parameter_value_is_always_discarded_local_highlighting=warning -resharper_overload_signature_inferring_highlighting=hint -resharper_overridden_with_empty_value_highlighting=warning -resharper_overridden_with_same_value_highlighting=suggestion -resharper_parameter_doesnt_make_any_sense_highlighting=warning -resharper_parameter_hides_member_highlighting=warning -resharper_parameter_only_used_for_precondition_check_global_highlighting=suggestion -resharper_parameter_only_used_for_precondition_check_local_highlighting=warning -resharper_parameter_type_can_be_enumerable_global_highlighting=hint -resharper_parameter_type_can_be_enumerable_local_highlighting=hint -resharper_parameter_value_is_not_used_highlighting=warning -resharper_partial_method_parameter_name_mismatch_highlighting=warning -resharper_partial_method_with_single_part_highlighting=warning -resharper_partial_type_with_single_part_highlighting=warning -resharper_pass_string_interpolation_highlighting=hint -resharper_path_not_resolved_highlighting=error -resharper_pattern_always_matches_highlighting=warning -resharper_pattern_is_always_true_or_false_highlighting=warning -resharper_pattern_never_matches_highlighting=warning -resharper_polymorphic_field_like_event_invocation_highlighting=warning -resharper_possible_infinite_inheritance_highlighting=warning -resharper_possible_intended_rethrow_highlighting=warning -resharper_possible_interface_member_ambiguity_highlighting=warning -resharper_possible_invalid_cast_exception_highlighting=warning -resharper_possible_invalid_cast_exception_in_foreach_loop_highlighting=warning -resharper_possible_invalid_operation_exception_highlighting=warning -resharper_possible_loss_of_fraction_highlighting=warning -resharper_possible_mistaken_argument_highlighting=warning -resharper_possible_mistaken_call_to_get_type_1_highlighting=warning -resharper_possible_mistaken_call_to_get_type_2_highlighting=warning -resharper_possible_multiple_enumeration_highlighting=warning -resharper_possible_multiple_write_access_in_double_check_locking_highlighting=warning -resharper_possible_null_reference_exception_highlighting=warning -resharper_possible_struct_member_modification_of_non_variable_struct_highlighting=warning -resharper_possible_unintended_linear_search_in_set_highlighting=warning -resharper_possible_unintended_queryable_as_enumerable_highlighting=suggestion -resharper_possible_unintended_reference_comparison_highlighting=warning -resharper_possible_write_to_me_highlighting=warning -resharper_possibly_impure_method_call_on_readonly_variable_highlighting=warning -resharper_possibly_incorrectly_broken_statement_highlighting=warning -resharper_possibly_missing_indexer_initializer_comma_highlighting=warning -resharper_possibly_mistaken_use_of_interpolated_string_insert_highlighting=warning -resharper_possibly_mistaken_use_of_params_method_highlighting=warning -resharper_possibly_unassigned_property_highlighting=hint -resharper_private_field_can_be_converted_to_local_variable_highlighting=warning -resharper_private_variable_can_be_made_readonly_highlighting=hint -resharper_property_can_be_made_init_only_global_highlighting=suggestion -resharper_property_can_be_made_init_only_local_highlighting=suggestion -resharper_property_getter_cannot_have_parameters_highlighting=error -resharper_property_not_resolved_highlighting=error -resharper_property_setter_must_have_single_parameter_highlighting=error -resharper_public_constructor_in_abstract_class_highlighting=suggestion -resharper_pure_attribute_on_void_method_highlighting=warning -resharper_qualified_expression_is_null_highlighting=warning -resharper_qualified_expression_maybe_null_highlighting=warning -resharper_razor_layout_not_resolved_highlighting=error -resharper_razor_section_not_resolved_highlighting=error -resharper_read_access_in_double_check_locking_highlighting=warning -resharper_redundant_abstract_modifier_highlighting=warning -resharper_redundant_always_match_subpattern_highlighting=suggestion -resharper_redundant_anonymous_type_property_name_highlighting=warning -resharper_redundant_argument_default_value_highlighting=warning -resharper_redundant_array_creation_expression_highlighting=hint -resharper_redundant_array_lower_bound_specification_highlighting=warning -resharper_redundant_assignment_highlighting=warning -resharper_redundant_attribute_parentheses_highlighting=hint -resharper_redundant_attribute_usage_property_highlighting=suggestion -resharper_redundant_base_constructor_call_highlighting=warning -resharper_redundant_base_qualifier_highlighting=warning -resharper_redundant_blank_lines_highlighting=none -resharper_redundant_block_highlighting=warning -resharper_redundant_bool_compare_highlighting=warning -resharper_redundant_case_label_highlighting=warning -resharper_redundant_cast_highlighting=warning -resharper_redundant_catch_clause_highlighting=warning -resharper_redundant_check_before_assignment_highlighting=warning -resharper_redundant_collection_initializer_element_braces_highlighting=hint -resharper_redundant_comparison_with_boolean_highlighting=warning -resharper_redundant_configure_await_highlighting=suggestion -resharper_redundant_css_hack_highlighting=warning -resharper_redundant_declaration_semicolon_highlighting=hint -resharper_redundant_default_member_initializer_highlighting=warning -resharper_redundant_delegate_creation_highlighting=warning -resharper_redundant_disable_warning_comment_highlighting=warning -resharper_redundant_discard_designation_highlighting=suggestion -resharper_redundant_else_block_highlighting=warning -resharper_redundant_empty_case_else_highlighting=warning -resharper_redundant_empty_constructor_highlighting=warning -resharper_redundant_empty_finally_block_highlighting=warning -resharper_redundant_empty_object_creation_argument_list_highlighting=hint -resharper_redundant_empty_object_or_collection_initializer_highlighting=warning -resharper_redundant_empty_switch_section_highlighting=warning -resharper_redundant_enumerable_cast_call_highlighting=warning -resharper_redundant_enum_case_label_for_default_section_highlighting=none -resharper_redundant_explicit_array_creation_highlighting=warning -resharper_redundant_explicit_array_size_highlighting=warning -resharper_redundant_explicit_nullable_creation_highlighting=warning -resharper_redundant_explicit_params_array_creation_highlighting=suggestion -resharper_redundant_explicit_positional_property_declaration_highlighting=warning -resharper_redundant_explicit_tuple_component_name_highlighting=warning -resharper_redundant_extends_list_entry_highlighting=warning -resharper_redundant_fixed_pointer_declaration_highlighting=suggestion -resharper_redundant_highlighting=warning -resharper_redundant_if_else_block_highlighting=hint -resharper_redundant_if_statement_then_keyword_highlighting=none -resharper_redundant_immediate_delegate_invocation_highlighting=suggestion -resharper_redundant_intermediate_variable_highlighting=hint -resharper_redundant_is_before_relational_pattern_highlighting=suggestion -resharper_redundant_iterator_keyword_highlighting=warning -resharper_redundant_jump_statement_highlighting=warning -resharper_redundant_lambda_parameter_type_highlighting=warning -resharper_redundant_lambda_signature_parentheses_highlighting=hint -resharper_redundant_linebreak_highlighting=none -resharper_redundant_local_class_name_highlighting=hint -resharper_redundant_local_function_name_highlighting=hint -resharper_redundant_logical_conditional_expression_operand_highlighting=warning -resharper_redundant_me_qualifier_highlighting=warning -resharper_redundant_my_base_qualifier_highlighting=warning -resharper_redundant_my_class_qualifier_highlighting=warning -resharper_redundant_name_qualifier_highlighting=warning -resharper_redundant_not_null_constraint_highlighting=warning -resharper_redundant_nullable_annotation_on_reference_type_constraint_highlighting=warning -resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_base_type_highlighting=warning -resharper_redundant_nullable_annotation_on_type_constraint_has_non_nullable_type_kind_highlighting=warning -resharper_redundant_nullable_flow_attribute_highlighting=warning -resharper_redundant_nullable_type_mark_highlighting=warning -resharper_redundant_nullness_attribute_with_nullable_reference_types_highlighting=warning -resharper_redundant_overflow_checking_context_highlighting=warning -resharper_redundant_overload_global_highlighting=suggestion -resharper_redundant_overload_local_highlighting=suggestion -resharper_redundant_overridden_member_highlighting=warning -resharper_redundant_params_highlighting=warning -resharper_redundant_parentheses_highlighting=none -resharper_redundant_parent_type_declaration_highlighting=warning -resharper_redundant_pattern_parentheses_highlighting=hint -resharper_redundant_property_parentheses_highlighting=hint -resharper_redundant_property_pattern_clause_highlighting=suggestion -resharper_redundant_qualifier_highlighting=warning -resharper_redundant_query_order_by_ascending_keyword_highlighting=hint -resharper_redundant_range_bound_highlighting=suggestion -resharper_redundant_readonly_modifier_highlighting=suggestion -resharper_redundant_record_body_highlighting=warning -resharper_redundant_record_class_keyword_highlighting=warning -resharper_redundant_setter_value_parameter_declaration_highlighting=hint -resharper_redundant_space_highlighting=none -resharper_redundant_string_format_call_highlighting=warning -resharper_redundant_string_interpolation_highlighting=suggestion -resharper_redundant_string_to_char_array_call_highlighting=warning -resharper_redundant_string_type_highlighting=suggestion -resharper_redundant_suppress_nullable_warning_expression_highlighting=warning -resharper_redundant_ternary_expression_highlighting=warning -resharper_redundant_to_string_call_for_value_type_highlighting=hint -resharper_redundant_to_string_call_highlighting=warning -resharper_redundant_type_arguments_of_method_highlighting=warning -resharper_redundant_type_cast_highlighting=warning -resharper_redundant_type_cast_structural_highlighting=warning -resharper_redundant_type_check_in_pattern_highlighting=warning -resharper_redundant_units_highlighting=warning -resharper_redundant_unsafe_context_highlighting=warning -resharper_redundant_using_directive_global_highlighting=warning -resharper_redundant_using_directive_highlighting=warning -resharper_redundant_variable_type_specification_highlighting=hint -resharper_redundant_verbatim_prefix_highlighting=suggestion -resharper_redundant_verbatim_string_prefix_highlighting=suggestion -resharper_redundant_with_expression_highlighting=suggestion -resharper_reference_equals_with_value_type_highlighting=warning -resharper_reg_exp_inspections_highlighting=warning -resharper_remove_constructor_invocation_highlighting=none -resharper_remove_redundant_braces_highlighting=none -resharper_remove_redundant_or_statement_false_highlighting=suggestion -resharper_remove_redundant_or_statement_true_highlighting=suggestion -resharper_remove_to_list_1_highlighting=suggestion -resharper_remove_to_list_2_highlighting=suggestion -resharper_replace_auto_property_with_computed_property_highlighting=hint -resharper_replace_indicing_with_array_destructuring_highlighting=hint -resharper_replace_indicing_with_short_hand_properties_after_destructuring_highlighting=hint -resharper_replace_object_pattern_with_var_pattern_highlighting=suggestion -resharper_replace_slice_with_range_indexer_highlighting=hint -resharper_replace_substring_with_range_indexer_highlighting=hint -resharper_replace_undefined_checking_series_with_object_destructuring_highlighting=hint -resharper_replace_with_destructuring_swap_highlighting=hint -resharper_replace_with_first_or_default_1_highlighting=suggestion -resharper_replace_with_first_or_default_2_highlighting=suggestion -resharper_replace_with_first_or_default_3_highlighting=suggestion -resharper_replace_with_first_or_default_4_highlighting=suggestion -resharper_replace_with_last_or_default_1_highlighting=suggestion -resharper_replace_with_last_or_default_2_highlighting=suggestion -resharper_replace_with_last_or_default_3_highlighting=suggestion -resharper_replace_with_last_or_default_4_highlighting=suggestion -resharper_replace_with_of_type_1_highlighting=suggestion -resharper_replace_with_of_type_2_highlighting=suggestion -resharper_replace_with_of_type_3_highlighting=suggestion -resharper_replace_with_of_type_any_1_highlighting=suggestion -resharper_replace_with_of_type_any_2_highlighting=suggestion -resharper_replace_with_of_type_count_1_highlighting=suggestion -resharper_replace_with_of_type_count_2_highlighting=suggestion -resharper_replace_with_of_type_first_1_highlighting=suggestion -resharper_replace_with_of_type_first_2_highlighting=suggestion -resharper_replace_with_of_type_first_or_default_1_highlighting=suggestion -resharper_replace_with_of_type_first_or_default_2_highlighting=suggestion -resharper_replace_with_of_type_last_1_highlighting=suggestion -resharper_replace_with_of_type_last_2_highlighting=suggestion -resharper_replace_with_of_type_last_or_default_1_highlighting=suggestion -resharper_replace_with_of_type_last_or_default_2_highlighting=suggestion -resharper_replace_with_of_type_long_count_highlighting=suggestion -resharper_replace_with_of_type_single_1_highlighting=suggestion -resharper_replace_with_of_type_single_2_highlighting=suggestion -resharper_replace_with_of_type_single_or_default_1_highlighting=suggestion -resharper_replace_with_of_type_single_or_default_2_highlighting=suggestion -resharper_replace_with_of_type_where_highlighting=suggestion -resharper_replace_with_simple_assignment_false_highlighting=suggestion -resharper_replace_with_simple_assignment_true_highlighting=suggestion -resharper_replace_with_single_assignment_false_highlighting=suggestion -resharper_replace_with_single_assignment_true_highlighting=suggestion -resharper_replace_with_single_call_to_any_highlighting=suggestion -resharper_replace_with_single_call_to_count_highlighting=suggestion -resharper_replace_with_single_call_to_first_highlighting=suggestion -resharper_replace_with_single_call_to_first_or_default_highlighting=suggestion -resharper_replace_with_single_call_to_last_highlighting=suggestion -resharper_replace_with_single_call_to_last_or_default_highlighting=suggestion -resharper_replace_with_single_call_to_single_highlighting=suggestion -resharper_replace_with_single_call_to_single_or_default_highlighting=suggestion -resharper_replace_with_single_or_default_1_highlighting=suggestion -resharper_replace_with_single_or_default_2_highlighting=suggestion -resharper_replace_with_single_or_default_3_highlighting=suggestion -resharper_replace_with_single_or_default_4_highlighting=suggestion -resharper_replace_with_string_is_null_or_empty_highlighting=suggestion -resharper_required_base_types_conflict_highlighting=warning -resharper_required_base_types_direct_conflict_highlighting=warning -resharper_required_base_types_is_not_inherited_highlighting=warning -resharper_requires_fallback_color_highlighting=warning -resharper_resource_item_not_resolved_highlighting=error -resharper_resource_not_resolved_highlighting=error -resharper_resx_not_resolved_highlighting=warning -resharper_return_from_global_scopet_with_value_highlighting=warning -resharper_return_type_can_be_enumerable_global_highlighting=hint -resharper_return_type_can_be_enumerable_local_highlighting=hint -resharper_return_type_can_be_not_nullable_highlighting=warning -resharper_return_value_of_pure_method_is_not_used_highlighting=warning -resharper_route_templates_action_route_prefix_can_be_extracted_to_controller_route_highlighting=hint -resharper_route_templates_ambiguous_matching_constraint_constructor_highlighting=warning -resharper_route_templates_ambiguous_route_match_highlighting=warning -resharper_route_templates_constraint_argument_cannot_be_converted_highlighting=warning -resharper_route_templates_controller_route_parameter_is_not_passed_to_methods_highlighting=hint -resharper_route_templates_duplicated_parameter_highlighting=warning -resharper_route_templates_matching_constraint_constructor_not_resolved_highlighting=warning -resharper_route_templates_method_missing_route_parameters_highlighting=hint -resharper_route_templates_optional_parameter_can_be_preceded_only_by_single_period_highlighting=warning -resharper_route_templates_optional_parameter_must_be_at_the_end_of_segment_highlighting=warning -resharper_route_templates_parameter_constraint_can_be_specified_highlighting=hint -resharper_route_templates_parameter_type_and_constraints_mismatch_highlighting=warning -resharper_route_templates_parameter_type_can_be_made_stricter_highlighting=suggestion -resharper_route_templates_route_parameter_constraint_not_resolved_highlighting=warning -resharper_route_templates_route_parameter_is_not_passed_to_method_highlighting=hint -resharper_route_templates_route_token_not_resolved_highlighting=warning -resharper_route_templates_symbol_not_resolved_highlighting=warning -resharper_route_templates_syntax_error_highlighting=warning -resharper_safe_cast_is_used_as_type_check_highlighting=suggestion -resharper_same_imports_with_different_name_highlighting=warning -resharper_same_variable_assignment_highlighting=warning -resharper_script_tag_has_both_src_and_content_attributes_highlighting=error -resharper_script_tag_with_content_before_includes_highlighting=hint -resharper_sealed_member_in_sealed_class_highlighting=warning -resharper_separate_control_transfer_statement_highlighting=none -resharper_service_contract_without_operations_highlighting=warning -resharper_shift_expression_real_shift_count_is_zero_highlighting=warning -resharper_shift_expression_result_equals_zero_highlighting=warning -resharper_shift_expression_right_operand_not_equal_real_count_highlighting=warning -resharper_shift_expression_zero_left_operand_highlighting=warning -resharper_similar_anonymous_type_nearby_highlighting=hint -resharper_similar_expressions_comparison_highlighting=warning -resharper_simplify_conditional_operator_highlighting=suggestion -resharper_simplify_conditional_ternary_expression_highlighting=suggestion -resharper_simplify_i_if_highlighting=suggestion -resharper_simplify_linq_expression_use_all_highlighting=suggestion -resharper_simplify_linq_expression_use_any_highlighting=suggestion -resharper_simplify_string_interpolation_highlighting=suggestion -resharper_specify_a_culture_in_string_conversion_explicitly_highlighting=warning -resharper_specify_string_comparison_highlighting=hint -resharper_specify_variable_type_explicitly_highlighting=hint -resharper_spin_lock_in_readonly_field_highlighting=warning -resharper_stack_alloc_inside_loop_highlighting=warning -resharper_statement_termination_highlighting=warning -resharper_static_member_initializer_referes_to_member_below_highlighting=warning -resharper_static_member_in_generic_type_highlighting=none -resharper_static_problem_in_text_highlighting=warning -resharper_string_compare_is_culture_specific_1_highlighting=warning -resharper_string_compare_is_culture_specific_2_highlighting=warning -resharper_string_compare_is_culture_specific_3_highlighting=warning -resharper_string_compare_is_culture_specific_4_highlighting=warning -resharper_string_compare_is_culture_specific_5_highlighting=warning -resharper_string_compare_is_culture_specific_6_highlighting=warning -resharper_string_compare_to_is_culture_specific_highlighting=warning -resharper_string_concatenation_to_template_string_highlighting=hint -resharper_string_ends_with_is_culture_specific_highlighting=none -resharper_string_index_of_is_culture_specific_1_highlighting=warning -resharper_string_index_of_is_culture_specific_2_highlighting=warning -resharper_string_index_of_is_culture_specific_3_highlighting=warning -resharper_string_last_index_of_is_culture_specific_1_highlighting=warning -resharper_string_last_index_of_is_culture_specific_2_highlighting=warning -resharper_string_last_index_of_is_culture_specific_3_highlighting=warning -resharper_string_literal_as_interpolation_argument_highlighting=suggestion -resharper_string_literal_typo_highlighting=suggestion -resharper_string_literal_wrong_quotes_highlighting=hint -resharper_string_starts_with_is_culture_specific_highlighting=none -resharper_structured_message_template_problem_highlighting=warning -resharper_struct_can_be_made_read_only_highlighting=suggestion -resharper_struct_member_can_be_made_read_only_highlighting=none -resharper_suggest_base_type_for_parameter_highlighting=hint -resharper_suggest_base_type_for_parameter_in_constructor_highlighting=hint -resharper_suggest_discard_declaration_var_style_highlighting=hint -resharper_suggest_var_or_type_built_in_types_highlighting=hint -resharper_suggest_var_or_type_deconstruction_declarations_highlighting=hint -resharper_suggest_var_or_type_elsewhere_highlighting=hint -resharper_suggest_var_or_type_simple_types_highlighting=hint -resharper_super_call_highlighting=suggestion -resharper_super_call_prohibits_this_highlighting=error -resharper_suppress_nullable_warning_expression_as_inverted_is_expression_highlighting=warning -resharper_suspicious_instanceof_check_highlighting=warning -resharper_suspicious_lambda_block_highlighting=warning -resharper_suspicious_lock_over_synchronization_primitive_highlighting=warning -resharper_suspicious_math_sign_method_highlighting=warning -resharper_suspicious_parameter_name_in_argument_null_exception_highlighting=warning -resharper_suspicious_this_usage_highlighting=warning -resharper_suspicious_typeof_check_highlighting=warning -resharper_suspicious_type_conversion_global_highlighting=warning -resharper_swap_via_deconstruction_highlighting=suggestion -resharper_switch_expression_handles_some_known_enum_values_with_exception_in_default_highlighting=hint -resharper_switch_statement_for_enum_misses_default_section_highlighting=hint -resharper_switch_statement_handles_some_known_enum_values_with_default_highlighting=hint -resharper_switch_statement_missing_some_enum_cases_no_default_highlighting=none -resharper_symbol_from_not_copied_locally_reference_used_warning_highlighting=warning -resharper_syntax_is_not_allowed_highlighting=warning -resharper_tabs_and_spaces_mismatch_highlighting=none -resharper_tabs_are_disallowed_highlighting=none -resharper_tabs_outside_indent_highlighting=none -resharper_tail_recursive_call_highlighting=hint -resharper_tasks_not_loaded_highlighting=warning -resharper_ternary_can_be_replaced_by_its_condition_highlighting=warning -resharper_this_in_global_context_highlighting=warning -resharper_thread_static_at_instance_field_highlighting=warning -resharper_thread_static_field_has_initializer_highlighting=warning -resharper_throw_must_be_followed_by_expression_highlighting=error -resharper_too_wide_local_variable_scope_highlighting=suggestion -resharper_try_cast_always_succeeds_highlighting=suggestion -resharper_try_statements_can_be_merged_highlighting=hint -resharper_ts_not_resolved_highlighting=error -resharper_ts_resolved_from_inaccessible_module_highlighting=error -resharper_type_guard_doesnt_affect_anything_highlighting=warning -resharper_type_guard_produces_never_type_highlighting=warning -resharper_type_parameter_can_be_variant_highlighting=suggestion -resharper_type_parameter_hides_type_param_from_outer_scope_highlighting=warning -resharper_ul_tag_contains_non_li_elements_highlighting=hint -resharper_unassigned_field_global_highlighting=suggestion -resharper_unassigned_field_local_highlighting=warning -resharper_unassigned_get_only_auto_property_highlighting=warning -resharper_unassigned_readonly_field_highlighting=warning -resharper_unclosed_script_highlighting=error -resharper_undeclared_global_variable_using_highlighting=warning -resharper_unexpected_value_highlighting=error -resharper_unknown_css_class_highlighting=warning -resharper_unknown_css_variable_highlighting=warning -resharper_unknown_css_vendor_extension_highlighting=hint -resharper_unknown_item_group_highlighting=warning -resharper_unknown_metadata_highlighting=warning -resharper_unknown_output_parameter_highlighting=warning -resharper_unknown_property_highlighting=warning -resharper_unknown_target_highlighting=warning -resharper_unknown_task_attribute_highlighting=warning -resharper_unknown_task_highlighting=warning -resharper_unnecessary_whitespace_highlighting=none -resharper_unreachable_switch_arm_due_to_integer_analysis_highlighting=warning -resharper_unreachable_switch_case_due_to_integer_analysis_highlighting=warning -resharper_unreal_header_tool_error_highlighting=error -resharper_unreal_header_tool_parser_error_highlighting=error -resharper_unreal_header_tool_warning_highlighting=warning -resharper_unsafe_comma_in_object_properties_list_highlighting=warning -resharper_unsupported_required_base_type_highlighting=warning -resharper_unused_anonymous_method_signature_highlighting=warning -resharper_unused_auto_property_accessor_global_highlighting=warning -resharper_unused_auto_property_accessor_local_highlighting=warning -resharper_unused_import_clause_highlighting=warning -resharper_unused_inherited_parameter_highlighting=hint -resharper_unused_locals_highlighting=warning -resharper_unused_local_function_highlighting=warning -resharper_unused_local_function_parameter_highlighting=warning -resharper_unused_local_function_return_value_highlighting=warning -resharper_unused_local_import_highlighting=warning -resharper_unused_member_global_highlighting=suggestion -resharper_unused_member_hierarchy_global_highlighting=suggestion -resharper_unused_member_hierarchy_local_highlighting=warning -resharper_unused_member_in_super_global_highlighting=suggestion -resharper_unused_member_in_super_local_highlighting=warning -resharper_unused_member_local_highlighting=warning -resharper_unused_method_return_value_global_highlighting=suggestion -resharper_unused_method_return_value_local_highlighting=warning -resharper_unused_parameter_global_highlighting=suggestion -resharper_unused_parameter_highlighting=warning -resharper_unused_parameter_in_partial_method_highlighting=warning -resharper_unused_parameter_local_highlighting=warning -resharper_unused_property_highlighting=warning -resharper_unused_tuple_component_in_return_value_highlighting=warning -resharper_unused_type_global_highlighting=suggestion -resharper_unused_type_local_highlighting=warning -resharper_unused_type_parameter_highlighting=warning -resharper_unused_variable_highlighting=warning -resharper_usage_of_definitely_unassigned_value_highlighting=warning -resharper_usage_of_possibly_unassigned_value_highlighting=warning -resharper_useless_binary_operation_highlighting=warning -resharper_useless_comparison_to_integral_constant_highlighting=warning -resharper_use_array_creation_expression_1_highlighting=suggestion -resharper_use_array_creation_expression_2_highlighting=suggestion -resharper_use_array_empty_method_highlighting=suggestion -resharper_use_as_instead_of_type_cast_highlighting=hint -resharper_use_await_using_highlighting=suggestion -resharper_use_cancellation_token_for_i_async_enumerable_highlighting=suggestion -resharper_use_collection_count_property_highlighting=suggestion -resharper_use_configure_await_false_for_async_disposable_highlighting=none -resharper_use_configure_await_false_highlighting=suggestion -resharper_use_deconstruction_highlighting=hint -resharper_use_deconstruction_on_parameter_highlighting=hint -resharper_use_empty_types_field_highlighting=suggestion -resharper_use_event_args_empty_field_highlighting=suggestion -resharper_use_format_specifier_in_format_string_highlighting=suggestion -resharper_use_implicitly_typed_variable_evident_highlighting=hint -resharper_use_implicitly_typed_variable_highlighting=none -resharper_use_implicit_by_val_modifier_highlighting=hint -resharper_use_indexed_property_highlighting=suggestion -resharper_use_index_from_end_expression_highlighting=suggestion -resharper_use_is_operator_1_highlighting=suggestion -resharper_use_is_operator_2_highlighting=suggestion -resharper_use_method_any_0_highlighting=suggestion -resharper_use_method_any_1_highlighting=suggestion -resharper_use_method_any_2_highlighting=suggestion -resharper_use_method_any_3_highlighting=suggestion -resharper_use_method_any_4_highlighting=suggestion -resharper_use_method_is_instance_of_type_highlighting=suggestion -resharper_use_nameof_expression_for_part_of_the_string_highlighting=none -resharper_use_nameof_expression_highlighting=suggestion -resharper_use_name_of_instead_of_type_of_highlighting=suggestion -resharper_use_negated_pattern_in_is_expression_highlighting=hint -resharper_use_negated_pattern_matching_highlighting=hint -resharper_use_nullable_annotation_instead_of_attribute_highlighting=suggestion -resharper_use_nullable_attributes_supported_by_compiler_highlighting=suggestion -resharper_use_nullable_reference_types_annotation_syntax_highlighting=warning -resharper_use_null_propagation_highlighting=hint -resharper_use_null_propagation_when_possible_highlighting=none -resharper_use_object_or_collection_initializer_highlighting=suggestion -resharper_use_of_implicit_global_in_function_scope_highlighting=warning -resharper_use_of_possibly_unassigned_property_highlighting=warning -resharper_use_pattern_matching_highlighting=suggestion -resharper_use_positional_deconstruction_pattern_highlighting=none -resharper_use_string_interpolation_highlighting=suggestion -resharper_use_switch_case_pattern_variable_highlighting=suggestion -resharper_use_throw_if_null_method_highlighting=none -resharper_use_verbatim_string_highlighting=hint -resharper_using_of_reserved_word_error_highlighting=error -resharper_using_of_reserved_word_highlighting=warning -resharper_value_parameter_not_used_highlighting=warning -resharper_value_range_attribute_violation_highlighting=warning -resharper_value_should_have_units_highlighting=error -resharper_variable_can_be_made_const_highlighting=hint -resharper_variable_can_be_made_let_highlighting=hint -resharper_variable_can_be_moved_to_inner_block_highlighting=hint -resharper_variable_can_be_not_nullable_highlighting=warning -resharper_variable_hides_outer_variable_highlighting=warning -resharper_variable_used_before_declared_highlighting=warning -resharper_variable_used_in_inner_scope_before_declared_highlighting=warning -resharper_variable_used_out_of_scope_highlighting=warning -resharper_vb_check_for_reference_equality_instead_1_highlighting=suggestion -resharper_vb_check_for_reference_equality_instead_2_highlighting=suggestion -resharper_vb_possible_mistaken_argument_highlighting=warning -resharper_vb_possible_mistaken_call_to_get_type_1_highlighting=warning -resharper_vb_possible_mistaken_call_to_get_type_2_highlighting=warning -resharper_vb_remove_to_list_1_highlighting=suggestion -resharper_vb_remove_to_list_2_highlighting=suggestion -resharper_vb_replace_with_first_or_default_highlighting=suggestion -resharper_vb_replace_with_last_or_default_highlighting=suggestion -resharper_vb_replace_with_of_type_1_highlighting=suggestion -resharper_vb_replace_with_of_type_2_highlighting=suggestion -resharper_vb_replace_with_of_type_any_1_highlighting=suggestion -resharper_vb_replace_with_of_type_any_2_highlighting=suggestion -resharper_vb_replace_with_of_type_count_1_highlighting=suggestion -resharper_vb_replace_with_of_type_count_2_highlighting=suggestion -resharper_vb_replace_with_of_type_first_1_highlighting=suggestion -resharper_vb_replace_with_of_type_first_2_highlighting=suggestion -resharper_vb_replace_with_of_type_first_or_default_1_highlighting=suggestion -resharper_vb_replace_with_of_type_first_or_default_2_highlighting=suggestion -resharper_vb_replace_with_of_type_last_1_highlighting=suggestion -resharper_vb_replace_with_of_type_last_2_highlighting=suggestion -resharper_vb_replace_with_of_type_last_or_default_1_highlighting=suggestion -resharper_vb_replace_with_of_type_last_or_default_2_highlighting=suggestion -resharper_vb_replace_with_of_type_single_1_highlighting=suggestion -resharper_vb_replace_with_of_type_single_2_highlighting=suggestion -resharper_vb_replace_with_of_type_single_or_default_1_highlighting=suggestion -resharper_vb_replace_with_of_type_single_or_default_2_highlighting=suggestion -resharper_vb_replace_with_of_type_where_highlighting=suggestion -resharper_vb_replace_with_single_assignment_1_highlighting=suggestion -resharper_vb_replace_with_single_assignment_2_highlighting=suggestion -resharper_vb_replace_with_single_call_to_any_highlighting=suggestion -resharper_vb_replace_with_single_call_to_count_highlighting=suggestion -resharper_vb_replace_with_single_call_to_first_highlighting=suggestion -resharper_vb_replace_with_single_call_to_first_or_default_highlighting=suggestion -resharper_vb_replace_with_single_call_to_last_highlighting=suggestion -resharper_vb_replace_with_single_call_to_last_or_default_highlighting=suggestion -resharper_vb_replace_with_single_call_to_single_highlighting=suggestion -resharper_vb_replace_with_single_call_to_single_or_default_highlighting=suggestion -resharper_vb_replace_with_single_or_default_highlighting=suggestion -resharper_vb_simplify_linq_expression_10_highlighting=hint -resharper_vb_simplify_linq_expression_1_highlighting=suggestion -resharper_vb_simplify_linq_expression_2_highlighting=suggestion -resharper_vb_simplify_linq_expression_3_highlighting=suggestion -resharper_vb_simplify_linq_expression_4_highlighting=suggestion -resharper_vb_simplify_linq_expression_5_highlighting=suggestion -resharper_vb_simplify_linq_expression_6_highlighting=suggestion -resharper_vb_simplify_linq_expression_7_highlighting=hint -resharper_vb_simplify_linq_expression_8_highlighting=hint -resharper_vb_simplify_linq_expression_9_highlighting=hint -resharper_vb_string_compare_is_culture_specific_1_highlighting=warning -resharper_vb_string_compare_is_culture_specific_2_highlighting=warning -resharper_vb_string_compare_is_culture_specific_3_highlighting=warning -resharper_vb_string_compare_is_culture_specific_4_highlighting=warning -resharper_vb_string_compare_is_culture_specific_5_highlighting=warning -resharper_vb_string_compare_is_culture_specific_6_highlighting=warning -resharper_vb_string_compare_to_is_culture_specific_highlighting=warning -resharper_vb_string_ends_with_is_culture_specific_highlighting=none -resharper_vb_string_index_of_is_culture_specific_1_highlighting=warning -resharper_vb_string_index_of_is_culture_specific_2_highlighting=warning -resharper_vb_string_index_of_is_culture_specific_3_highlighting=warning -resharper_vb_string_last_index_of_is_culture_specific_1_highlighting=warning -resharper_vb_string_last_index_of_is_culture_specific_2_highlighting=warning -resharper_vb_string_last_index_of_is_culture_specific_3_highlighting=warning -resharper_vb_string_starts_with_is_culture_specific_highlighting=none -resharper_vb_unreachable_code_highlighting=warning -resharper_vb_use_array_creation_expression_1_highlighting=suggestion -resharper_vb_use_array_creation_expression_2_highlighting=suggestion -resharper_vb_use_first_instead_highlighting=warning -resharper_vb_use_method_any_1_highlighting=suggestion -resharper_vb_use_method_any_2_highlighting=suggestion -resharper_vb_use_method_any_3_highlighting=suggestion -resharper_vb_use_method_any_4_highlighting=suggestion -resharper_vb_use_method_any_5_highlighting=suggestion -resharper_vb_use_method_is_instance_of_type_highlighting=suggestion -resharper_vb_use_type_of_is_operator_1_highlighting=suggestion -resharper_vb_use_type_of_is_operator_2_highlighting=suggestion -resharper_virtual_member_call_in_constructor_highlighting=warning -resharper_virtual_member_never_overridden_global_highlighting=suggestion -resharper_virtual_member_never_overridden_local_highlighting=suggestion -resharper_void_method_with_must_use_return_value_attribute_highlighting=warning -resharper_web_config_module_not_resolved_highlighting=error -resharper_web_config_module_qualification_resolve_highlighting=warning -resharper_web_config_redundant_add_namespace_tag_highlighting=warning -resharper_web_config_redundant_location_tag_highlighting=warning -resharper_web_config_tag_prefix_redundand_highlighting=warning -resharper_web_config_type_not_resolved_highlighting=error -resharper_web_config_unused_add_tag_highlighting=warning -resharper_web_config_unused_element_due_to_config_source_attribute_highlighting=warning -resharper_web_config_unused_remove_or_clear_tag_highlighting=warning -resharper_web_config_web_config_path_warning_highlighting=warning -resharper_web_config_wrong_module_highlighting=error -resharper_web_ignored_path_highlighting=none -resharper_web_mapped_path_highlighting=hint -resharper_with_expression_instead_of_initializer_highlighting=suggestion -resharper_with_statement_using_error_highlighting=error -resharper_wrong_expression_statement_highlighting=warning -resharper_wrong_indent_size_highlighting=none -resharper_wrong_metadata_use_highlighting=none -resharper_wrong_public_modifier_specification_highlighting=hint -resharper_wrong_require_relative_path_highlighting=hint -resharper_xaml_assign_null_to_not_null_attribute_highlighting=warning -resharper_xaml_avalonia_wrong_binding_mode_for_stream_binding_operator_highlighting=warning -resharper_xaml_binding_without_context_not_resolved_highlighting=hint -resharper_xaml_binding_with_context_not_resolved_highlighting=warning -resharper_xaml_compiled_binding_missing_data_type_error_highlighting_highlighting=error -resharper_xaml_constructor_warning_highlighting=warning -resharper_xaml_decimal_parsing_is_culture_dependent_highlighting=warning -resharper_xaml_dependency_property_resolve_error_highlighting=warning -resharper_xaml_duplicate_style_setter_highlighting=warning -resharper_xaml_dynamic_resource_error_highlighting=error -resharper_xaml_element_name_reference_not_resolved_highlighting=error -resharper_xaml_empty_grid_length_definition_highlighting=error -resharper_xaml_grid_definitions_can_be_converted_to_attribute_highlighting=hint -resharper_xaml_ignored_path_highlighting_highlighting=none -resharper_xaml_index_out_of_grid_definition_highlighting=warning -resharper_xaml_invalid_member_type_highlighting=error -resharper_xaml_invalid_resource_target_type_highlighting=error -resharper_xaml_invalid_resource_type_highlighting=error -resharper_xaml_invalid_type_highlighting=error -resharper_xaml_language_level_highlighting=error -resharper_xaml_mapped_path_highlighting_highlighting=hint -resharper_xaml_method_arguments_will_be_ignored_highlighting=warning -resharper_xaml_missing_grid_index_highlighting=warning -resharper_xaml_overloads_collision_highlighting=warning -resharper_xaml_parent_is_out_of_current_component_tree_highlighting=warning -resharper_xaml_path_error_highlighting=warning -resharper_xaml_possible_null_reference_exception_highlighting=suggestion -resharper_xaml_redundant_attached_property_highlighting=warning -resharper_xaml_redundant_binding_mode_attribute_highlighting=warning -resharper_xaml_redundant_collection_property_highlighting=warning -resharper_xaml_redundant_freeze_attribute_highlighting=warning -resharper_xaml_redundant_grid_definitions_highlighting=warning -resharper_xaml_redundant_grid_span_highlighting=warning -resharper_xaml_redundant_modifiers_attribute_highlighting=warning -resharper_xaml_redundant_namespace_alias_highlighting=warning -resharper_xaml_redundant_name_attribute_highlighting=warning -resharper_xaml_redundant_property_type_qualifier_highlighting=warning -resharper_xaml_redundant_resource_highlighting=warning -resharper_xaml_redundant_styled_value_highlighting=warning -resharper_xaml_redundant_update_source_trigger_attribute_highlighting=warning -resharper_xaml_redundant_xamarin_forms_class_declaration_highlighting=warning -resharper_xaml_resource_file_path_case_mismatch_highlighting=warning -resharper_xaml_routed_event_resolve_error_highlighting=warning -resharper_xaml_static_resource_not_resolved_highlighting=warning -resharper_xaml_style_class_not_found_highlighting=warning -resharper_xaml_style_invalid_target_type_highlighting=error -resharper_xaml_unexpected_text_token_highlighting=error -resharper_xaml_xaml_duplicate_device_family_type_view_highlighting_highlighting=error -resharper_xaml_xaml_mismatched_device_family_view_clr_name_highlighting_highlighting=warning -resharper_xaml_xaml_relative_source_default_mode_warning_highlighting_highlighting=warning -resharper_xaml_xaml_unknown_device_family_type_highlighting_highlighting=warning -resharper_xaml_xaml_xamarin_forms_data_type_and_binding_context_type_mismatched_highlighting_highlighting=warning -resharper_xaml_x_key_attribute_disallowed_highlighting=error -resharper_xml_doc_comment_syntax_problem_highlighting=warning -resharper_xunit_xunit_test_with_console_output_highlighting=warning - -# Standard properties -end_of_line= crlf -csharp_indent_labels = one_less_than_current -csharp_prefer_simple_using_statement = true:suggestion -csharp_prefer_braces = true:silent -csharp_style_prefer_method_group_conversion = true:silent -csharp_style_expression_bodied_methods = false:silent -csharp_style_expression_bodied_constructors = false:silent -csharp_style_expression_bodied_operators = false:silent -csharp_style_expression_bodied_properties = true:silent -csharp_style_expression_bodied_indexers = true:silent -csharp_style_expression_bodied_accessors = true:silent -csharp_style_expression_bodied_lambdas = true:silent -csharp_style_expression_bodied_local_functions = false:silent -csharp_style_throw_expression = true:suggestion -csharp_style_prefer_null_check_over_type_check = true:suggestion -csharp_prefer_simple_default_expression = true:suggestion -csharp_style_prefer_local_over_anonymous_function = true:suggestion -csharp_style_prefer_index_operator = true:suggestion -csharp_style_prefer_range_operator = true:suggestion -csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion -csharp_style_prefer_tuple_swap = true:suggestion -csharp_style_inlined_variable_declaration = true:suggestion - -[*.{cshtml,htm,html,proto,razor}] -indent_style=tab -indent_size=tab -tab_width=4 - -[*.{asax,ascx,aspx,axaml,c,c++,cc,cginc,compute,cp,cpp,cs,css,cu,cuh,cxx,h,hh,hlsl,hlsli,hlslinc,hpp,hxx,inc,inl,ino,ipp,js,jsx,master,mpp,mq4,mq5,mqh,paml,skin,tpp,ts,tsx,usf,ush,vb,xaml,xamlx,xoml}] -indent_style=space -indent_size=4 -tab_width=4 - -[*.{appxmanifest,asax,ascx,aspx,axaml,axml,build,c,c++,cc,cginc,compute,config,cp,cpp,cs,cshtml,csproj,css,cu,cuh,cxx,dbml,discomap,dtd,h,hh,hlsl,hlsli,hlslinc,hpp,htm,html,hxx,inc,inl,ino,ipp,js,json,jsproj,jsx,lsproj,master,mpp,mq4,mq5,mqh,njsproj,nuspec,paml,proj,props,proto,razor,resjson,resw,resx,skin,StyleCop,targets,tasks,tpp,ts,tsx,usf,ush,vb,vbproj,xaml,xamlx,xml,xoml,xsd}] -indent_style=space -indent_size= 4 -tab_width= 4 -dotnet_style_operator_placement_when_wrapping = beginning_of_line -dotnet_style_coalesce_expression = true:suggestion -dotnet_style_null_propagation = true:suggestion -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion -dotnet_style_prefer_auto_properties = true:silent -dotnet_style_object_initializer = true:suggestion -dotnet_style_collection_initializer = true:suggestion -dotnet_style_prefer_simplified_boolean_expressions = true:suggestion -dotnet_style_prefer_conditional_expression_over_assignment = true:silent -dotnet_style_prefer_conditional_expression_over_return = true:silent -dotnet_style_explicit_tuple_names = true:suggestion -dotnet_style_prefer_inferred_tuple_names = true:suggestion -dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion -dotnet_style_prefer_compound_assignment = true:suggestion -dotnet_style_prefer_simplified_interpolation = true:suggestion -dotnet_style_namespace_match_folder = true:suggestion diff --git a/Penumbra.GameData/Actors/ActorIdentifier.cs b/Penumbra.GameData/Actors/ActorIdentifier.cs deleted file mode 100644 index f097e578..00000000 --- a/Penumbra.GameData/Actors/ActorIdentifier.cs +++ /dev/null @@ -1,225 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using Dalamud.Game.ClientState.Objects.Enums; -using Newtonsoft.Json.Linq; -using Penumbra.String; - -namespace Penumbra.GameData.Actors; - -[StructLayout(LayoutKind.Explicit)] -public readonly struct ActorIdentifier : IEquatable -{ - public static ActorManager? Manager; - - public static readonly ActorIdentifier Invalid = new(IdentifierType.Invalid, 0, 0, 0, ByteString.Empty); - - public enum RetainerType : ushort - { - Both = 0, - Bell = 1, - Mannequin = 2, - } - - // @formatter:off - [FieldOffset( 0 )] public readonly IdentifierType Type; // All - [FieldOffset( 1 )] public readonly ObjectKind Kind; // Npc, Owned - [FieldOffset( 2 )] public readonly ushort HomeWorld; // Player, Owned - [FieldOffset( 2 )] public readonly ushort Index; // NPC - [FieldOffset( 2 )] public readonly RetainerType Retainer; // Retainer - [FieldOffset( 2 )] public readonly ScreenActor Special; // Special - [FieldOffset( 4 )] public readonly uint DataId; // Owned, NPC - [FieldOffset( 8 )] public readonly ByteString PlayerName; // Player, Owned - // @formatter:on - - public ActorIdentifier CreatePermanent() - => new(Type, Kind, Index, DataId, PlayerName.IsEmpty || PlayerName.IsOwned ? PlayerName : PlayerName.Clone()); - - public bool Equals(ActorIdentifier other) - { - if (Type != other.Type) - return false; - - return Type switch - { - IdentifierType.Player => HomeWorld == other.HomeWorld && PlayerName.EqualsCi(other.PlayerName), - IdentifierType.Retainer => PlayerName.EqualsCi(other.PlayerName), - IdentifierType.Owned => HomeWorld == other.HomeWorld && PlayerName.EqualsCi(other.PlayerName) && Manager.DataIdEquals(this, other), - IdentifierType.Special => Special == other.Special, - IdentifierType.Npc => Manager.DataIdEquals(this, other) - && (Index == other.Index || Index == ushort.MaxValue || other.Index == ushort.MaxValue), - IdentifierType.UnkObject => PlayerName.EqualsCi(other.PlayerName) && Index == other.Index, - _ => false, - }; - } - - public override bool Equals(object? obj) - => obj is ActorIdentifier other && Equals(other); - - public static bool operator ==(ActorIdentifier lhs, ActorIdentifier rhs) - => lhs.Equals(rhs); - - public static bool operator !=(ActorIdentifier lhs, ActorIdentifier rhs) - => !lhs.Equals(rhs); - - public bool IsValid - => Type is not (IdentifierType.UnkObject or IdentifierType.Invalid); - - public string Incognito(string? name) - { - name ??= ToString(); - if (Type is not (IdentifierType.Player or IdentifierType.Owned)) - return name; - - var parts = name.Split(' ', 3); - return string.Join(" ", - parts.Length != 3 ? parts.Select(n => $"{n[0]}.") : parts[..2].Select(n => $"{n[0]}.").Append(parts[2])); - } - - public override string ToString() - => Manager?.ToString(this) - ?? Type switch - { - IdentifierType.Player => $"{PlayerName} ({HomeWorld})", - IdentifierType.Retainer => $"{PlayerName} (Retainer)", - IdentifierType.Owned => $"{PlayerName}s {Kind.ToName()} {DataId} ({HomeWorld})", - IdentifierType.Special => Special.ToName(), - IdentifierType.Npc => - Index == ushort.MaxValue - ? $"{Kind.ToName()} #{DataId}" - : $"{Kind.ToName()} #{DataId} at {Index}", - IdentifierType.UnkObject => PlayerName.IsEmpty - ? $"Unknown Object at {Index}" - : $"{PlayerName} at {Index}", - _ => "Invalid", - }; - - public string ToName() - => Manager?.ToName(this) ?? "Unknown Object"; - - public override int GetHashCode() - => Type switch - { - IdentifierType.Player => HashCode.Combine(IdentifierType.Player, PlayerName, HomeWorld), - IdentifierType.Retainer => HashCode.Combine(IdentifierType.Player, PlayerName), - IdentifierType.Owned => HashCode.Combine(IdentifierType.Owned, Kind, PlayerName, HomeWorld, DataId), - IdentifierType.Special => HashCode.Combine(IdentifierType.Special, Special), - IdentifierType.Npc => HashCode.Combine(IdentifierType.Npc, Kind, DataId), - IdentifierType.UnkObject => HashCode.Combine(IdentifierType.UnkObject, PlayerName, Index), - _ => 0, - }; - - internal ActorIdentifier(IdentifierType type, ObjectKind kind, ushort index, uint data, ByteString playerName) - { - Type = type; - Kind = kind; - Special = (ScreenActor)index; - HomeWorld = Index = index; - DataId = data; - PlayerName = playerName; - } - - public JObject ToJson() - { - var ret = new JObject { { nameof(Type), Type.ToString() } }; - switch (Type) - { - case IdentifierType.Player: - ret.Add(nameof(PlayerName), PlayerName.ToString()); - ret.Add(nameof(HomeWorld), HomeWorld); - return ret; - case IdentifierType.Retainer: - ret.Add(nameof(PlayerName), PlayerName.ToString()); - return ret; - case IdentifierType.Owned: - ret.Add(nameof(PlayerName), PlayerName.ToString()); - ret.Add(nameof(HomeWorld), HomeWorld); - ret.Add(nameof(Kind), Kind.ToString()); - ret.Add(nameof(DataId), DataId); - return ret; - case IdentifierType.Special: - ret.Add(nameof(Special), Special.ToString()); - return ret; - case IdentifierType.Npc: - ret.Add(nameof(Kind), Kind.ToString()); - if (Index != ushort.MaxValue) - ret.Add(nameof(Index), Index); - ret.Add(nameof(DataId), DataId); - return ret; - case IdentifierType.UnkObject: - ret.Add(nameof(PlayerName), PlayerName.ToString()); - ret.Add(nameof(Index), Index); - return ret; - } - - return ret; - } -} - -public static class ActorManagerExtensions -{ - public static bool DataIdEquals(this ActorManager? manager, ActorIdentifier lhs, ActorIdentifier rhs) - { - if (lhs.Kind != rhs.Kind) - return false; - - if (lhs.DataId == rhs.DataId) - return true; - - if (manager == null) - return lhs.Kind == rhs.Kind && lhs.DataId == rhs.DataId || lhs.DataId == uint.MaxValue || rhs.DataId == uint.MaxValue; - - var dict = lhs.Kind switch - { - ObjectKind.MountType => manager.Data.Mounts, - ObjectKind.Companion => manager.Data.Companions, - ObjectKind.Ornament => manager.Data.Ornaments, - ObjectKind.BattleNpc => manager.Data.BNpcs, - ObjectKind.EventNpc => manager.Data.ENpcs, - _ => new Dictionary(), - }; - - return dict.TryGetValue(lhs.DataId, out var lhsName) - && dict.TryGetValue(rhs.DataId, out var rhsName) - && lhsName.Equals(rhsName, StringComparison.OrdinalIgnoreCase); - } - - public static string ToName(this ObjectKind kind) - => kind switch - { - ObjectKind.None => "Unknown", - ObjectKind.BattleNpc => "Battle NPC", - ObjectKind.EventNpc => "Event NPC", - ObjectKind.MountType => "Mount", - ObjectKind.Companion => "Companion", - ObjectKind.Ornament => "Accessory", - _ => kind.ToString(), - }; - - public static string ToName(this IdentifierType type) - => type switch - { - IdentifierType.Player => "Player", - IdentifierType.Retainer => "Retainer (Bell)", - IdentifierType.Owned => "Owned NPC", - IdentifierType.Special => "Special Actor", - IdentifierType.Npc => "NPC", - IdentifierType.UnkObject => "Unknown Object", - _ => "Invalid", - }; - - /// - /// Fixed names for special actors. - /// - public static string ToName(this ScreenActor actor) - => actor switch - { - ScreenActor.CharacterScreen => "Character Screen Actor", - ScreenActor.ExamineScreen => "Examine Screen Actor", - ScreenActor.FittingRoom => "Fitting Room Actor", - ScreenActor.DyePreview => "Dye Preview Actor", - ScreenActor.Portrait => "Portrait Actor", - _ => "Invalid", - }; -} diff --git a/Penumbra.GameData/Actors/ActorManager.Data.cs b/Penumbra.GameData/Actors/ActorManager.Data.cs deleted file mode 100644 index c2a4a8cd..00000000 --- a/Penumbra.GameData/Actors/ActorManager.Data.cs +++ /dev/null @@ -1,406 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Text; -using Dalamud; -using Dalamud.Data; -using Dalamud.Game.ClientState; -using Dalamud.Game.ClientState.Objects; -using Dalamud.Game.Gui; -using Dalamud.Plugin; -using Dalamud.Utility; -using Dalamud.Utility.Signatures; -using FFXIVClientStructs.FFXIV.Client.Game.Object; -using FFXIVClientStructs.FFXIV.Client.System.Framework; -using FFXIVClientStructs.FFXIV.Client.UI.Agent; -using FFXIVClientStructs.FFXIV.Component.GUI; -using Lumina.Excel.GeneratedSheets; -using Lumina.Text; -using Penumbra.GameData.Data; -using Penumbra.GameData.Structs; -using Penumbra.String; -using Character = FFXIVClientStructs.FFXIV.Client.Game.Character.Character; -using ObjectKind = Dalamud.Game.ClientState.Objects.Enums.ObjectKind; - -namespace Penumbra.GameData.Actors; - -public sealed partial class ActorManager : IDisposable -{ - public sealed class ActorManagerData : DataSharer - { - /// Worlds available for players. - public IReadOnlyDictionary Worlds { get; } - - /// Valid Mount names in title case by mount id. - public IReadOnlyDictionary Mounts { get; } - - /// Valid Companion names in title case by companion id. - public IReadOnlyDictionary Companions { get; } - - /// Valid ornament names by id. - public IReadOnlyDictionary Ornaments { get; } - - /// Valid BNPC names in title case by BNPC Name id. - public IReadOnlyDictionary BNpcs { get; } - - /// Valid ENPC names in title case by ENPC id. - public IReadOnlyDictionary ENpcs { get; } - - public ActorManagerData(DalamudPluginInterface pluginInterface, DataManager gameData, ClientLanguage language) - : base(pluginInterface, language, 2) - { - var worldTask = TryCatchDataAsync("Worlds", CreateWorldData(gameData)); - var mountsTask = TryCatchDataAsync("Mounts", CreateMountData(gameData)); - var companionsTask = TryCatchDataAsync("Companions", CreateCompanionData(gameData)); - var ornamentsTask = TryCatchDataAsync("Ornaments", CreateOrnamentData(gameData)); - var bNpcsTask = TryCatchDataAsync("BNpcs", CreateBNpcData(gameData)); - var eNpcsTask = TryCatchDataAsync("ENpcs", CreateENpcData(gameData)); - - Worlds = worldTask.Result; - Mounts = mountsTask.Result; - Companions = companionsTask.Result; - Ornaments = ornamentsTask.Result; - BNpcs = bNpcsTask.Result; - ENpcs = eNpcsTask.Result; - } - - /// - /// Return the world name including the Any World option. - /// - public string ToWorldName(ushort worldId) - => worldId == ushort.MaxValue ? "Any World" : Worlds.TryGetValue(worldId, out var name) ? name : "Invalid"; - - /// - /// Return the world id corresponding to the given name. - /// - /// ushort.MaxValue if the name is empty, 0 if it is not a valid world, or the worlds id. - public ushort ToWorldId(string worldName) - => worldName.Length != 0 - ? Worlds.FirstOrDefault(kvp => string.Equals(kvp.Value, worldName, StringComparison.OrdinalIgnoreCase), default).Key - : ushort.MaxValue; - - /// - /// Convert a given ID for a certain ObjectKind to a name. - /// - /// Invalid or a valid name. - public string ToName(ObjectKind kind, uint dataId) - => TryGetName(kind, dataId, out var ret) ? ret : "Invalid"; - - - /// - /// Convert a given ID for a certain ObjectKind to a name. - /// - public bool TryGetName(ObjectKind kind, uint dataId, [NotNullWhen(true)] out string? name) - { - name = null; - return kind switch - { - ObjectKind.MountType => Mounts.TryGetValue(dataId, out name), - ObjectKind.Companion => Companions.TryGetValue(dataId, out name), - ObjectKind.Ornament => Ornaments.TryGetValue(dataId, out name), - ObjectKind.BattleNpc => BNpcs.TryGetValue(dataId, out name), - ObjectKind.EventNpc => ENpcs.TryGetValue(dataId, out name), - _ => false, - }; - } - - protected override void DisposeInternal() - { - DisposeTag("Worlds"); - DisposeTag("Mounts"); - DisposeTag("Companions"); - DisposeTag("Ornaments"); - DisposeTag("BNpcs"); - DisposeTag("ENpcs"); - } - - private Action> CreateWorldData(DataManager gameData) - => d => - { - foreach (var w in gameData.GetExcelSheet(Language)!.Where(w => w.IsPublic && !w.Name.RawData.IsEmpty)) - d.TryAdd((ushort)w.RowId, string.Intern(w.Name.ToDalamudString().TextValue)); - }; - - private Action> CreateMountData(DataManager gameData) - => d => - { - foreach (var m in gameData.GetExcelSheet(Language)!.Where(m => m.Singular.RawData.Length > 0 && m.Order >= 0)) - d.TryAdd(m.RowId, ToTitleCaseExtended(m.Singular, m.Article)); - }; - - private Action> CreateCompanionData(DataManager gameData) - => d => - { - foreach (var c in gameData.GetExcelSheet(Language)!.Where(c - => c.Singular.RawData.Length > 0 && c.Order < ushort.MaxValue)) - d.TryAdd(c.RowId, ToTitleCaseExtended(c.Singular, c.Article)); - }; - - private Action> CreateOrnamentData(DataManager gameData) - => d => - { - foreach (var o in gameData.GetExcelSheet(Language)!.Where(o => o.Singular.RawData.Length > 0)) - d.TryAdd(o.RowId, ToTitleCaseExtended(o.Singular, o.Article)); - }; - - private Action> CreateBNpcData(DataManager gameData) - => d => - { - foreach (var n in gameData.GetExcelSheet(Language)!.Where(n => n.Singular.RawData.Length > 0)) - d.TryAdd(n.RowId, ToTitleCaseExtended(n.Singular, n.Article)); - }; - - private Action> CreateENpcData(DataManager gameData) - => d => - { - foreach (var n in gameData.GetExcelSheet(Language)!.Where(e => e.Singular.RawData.Length > 0)) - d.TryAdd(n.RowId, ToTitleCaseExtended(n.Singular, n.Article)); - }; - - private static string ToTitleCaseExtended(SeString s, sbyte article) - { - if (article == 1) - return string.Intern(s.ToDalamudString().ToString()); - - var sb = new StringBuilder(s.ToDalamudString().ToString()); - var lastSpace = true; - for (var i = 0; i < sb.Length; ++i) - { - if (sb[i] == ' ') - { - lastSpace = true; - } - else if (lastSpace) - { - lastSpace = false; - sb[i] = char.ToUpperInvariant(sb[i]); - } - } - - return string.Intern(sb.ToString()); - } - } - - public readonly ActorManagerData Data; - - public ActorManager(DalamudPluginInterface pluginInterface, ObjectTable objects, ClientState state, Dalamud.Game.Framework framework, - DataManager gameData, GameGui gameGui, - Func toParentIdx) - : this(pluginInterface, objects, state, framework, gameData, gameGui, gameData.Language, toParentIdx) - { } - - public ActorManager(DalamudPluginInterface pluginInterface, ObjectTable objects, ClientState state, Dalamud.Game.Framework framework, - DataManager gameData, GameGui gameGui, - ClientLanguage language, Func toParentIdx) - { - _framework = framework; - _objects = objects; - _gameGui = gameGui; - _clientState = state; - _toParentIdx = toParentIdx; - Data = new ActorManagerData(pluginInterface, gameData, language); - - ActorIdentifier.Manager = this; - - SignatureHelper.Initialise(this); - } - - public unsafe ActorIdentifier GetCurrentPlayer() - { - var address = (Character*)_objects.GetObjectAddress(0); - return address == null - ? ActorIdentifier.Invalid - : CreateIndividualUnchecked(IdentifierType.Player, new ByteString(address->GameObject.Name), address->HomeWorld, - ObjectKind.None, uint.MaxValue); - } - - public ActorIdentifier GetInspectPlayer() - { - var addon = _gameGui.GetAddonByName("CharacterInspect", 1); - if (addon == IntPtr.Zero) - return ActorIdentifier.Invalid; - - return CreatePlayer(InspectName, InspectWorldId); - } - - public unsafe bool ResolvePartyBannerPlayer(ScreenActor type, out ActorIdentifier id) - { - id = ActorIdentifier.Invalid; - var module = Framework.Instance()->GetUiModule()->GetAgentModule(); - if (module == null) - return false; - - var agent = (AgentBannerInterface*)module->GetAgentByInternalId(AgentId.BannerParty); - if (agent == null || !agent->AgentInterface.IsAgentActive()) - agent = (AgentBannerInterface*)module->GetAgentByInternalId(AgentId.BannerMIP); - if (agent == null || !agent->AgentInterface.IsAgentActive()) - return false; - - var idx = (ushort)type - (ushort)ScreenActor.CharacterScreen; - var character = agent->Character(idx); - if (character == null) - return true; - - var name = new ByteString(character->Name1.StringPtr); - id = CreatePlayer(name, (ushort)character->WorldId); - return true; - } - - private unsafe bool SearchPlayerCustomize(Character* character, int idx, out ActorIdentifier id) - { - var other = (Character*)_objects.GetObjectAddress(idx); - if (other == null || !CustomizeData.ScreenActorEquals((CustomizeData*)character->DrawData.CustomizeData.Data, (CustomizeData*)other->DrawData.CustomizeData.Data)) - { - id = ActorIdentifier.Invalid; - return false; - } - - id = FromObject(&other->GameObject, out _, false, true, false); - return true; - } - - private unsafe ActorIdentifier SearchPlayersCustomize(Character* gameObject, int idx1, int idx2, int idx3) - => SearchPlayerCustomize(gameObject, idx1, out var ret) - || SearchPlayerCustomize(gameObject, idx2, out ret) - || SearchPlayerCustomize(gameObject, idx3, out ret) - ? ret - : ActorIdentifier.Invalid; - - private unsafe ActorIdentifier SearchPlayersCustomize(Character* gameObject) - { - static bool Compare(Character* a, Character* b) - { - var data1 = (CustomizeData*)a->DrawData.CustomizeData.Data; - var data2 = (CustomizeData*)b->DrawData.CustomizeData.Data; - var equals = CustomizeData.ScreenActorEquals(data1, data2); - return equals; - } - - for (var i = 0; i < (int)ScreenActor.CutsceneStart; i += 2) - { - var obj = (GameObject*)_objects.GetObjectAddress(i); - if (obj != null - && obj->ObjectKind is (byte)ObjectKind.Player - && Compare(gameObject, (Character*)obj)) - return FromObject(obj, out _, false, true, false); - } - - return ActorIdentifier.Invalid; - } - - public unsafe bool ResolveMahjongPlayer(ScreenActor type, out ActorIdentifier id) - { - id = ActorIdentifier.Invalid; - if (_clientState.TerritoryType != 831 && _gameGui.GetAddonByName("EmjIntro") == IntPtr.Zero) - return false; - - var obj = (Character*)_objects.GetObjectAddress((int)type); - if (obj == null) - return false; - - id = type switch - { - ScreenActor.CharacterScreen => GetCurrentPlayer(), - ScreenActor.ExamineScreen => SearchPlayersCustomize(obj, 2, 4, 6), - ScreenActor.FittingRoom => SearchPlayersCustomize(obj, 4, 2, 6), - ScreenActor.DyePreview => SearchPlayersCustomize(obj, 6, 2, 4), - _ => ActorIdentifier.Invalid, - }; - return true; - } - - public unsafe bool ResolvePvPBannerPlayer(ScreenActor type, out ActorIdentifier id) - { - id = ActorIdentifier.Invalid; - if (!_clientState.IsPvPExcludingDen) - return false; - - var addon = (AtkUnitBase*)_gameGui.GetAddonByName("PvPMap"); - if (addon == null || addon->IsVisible) - return false; - - var obj = (Character*)_objects.GetObjectAddress((int)type); - if (obj == null) - return false; - - id = type switch - { - ScreenActor.CharacterScreen => SearchPlayersCustomize(obj), - ScreenActor.ExamineScreen => SearchPlayersCustomize(obj), - ScreenActor.FittingRoom => SearchPlayersCustomize(obj), - ScreenActor.DyePreview => SearchPlayersCustomize(obj), - ScreenActor.Portrait => SearchPlayersCustomize(obj), - _ => ActorIdentifier.Invalid, - }; - return true; - } - - public unsafe ActorIdentifier GetCardPlayer() - { - var agent = AgentCharaCard.Instance(); - if (agent == null || agent->Data == null) - return ActorIdentifier.Invalid; - - var worldId = *(ushort*)((byte*)agent->Data + Offsets.AgentCharaCardDataWorldId); - return CreatePlayer(new ByteString(agent->Data->Name.StringPtr), worldId); - } - - public ActorIdentifier GetGlamourPlayer() - { - var addon = _gameGui.GetAddonByName("MiragePrismMiragePlate", 1); - return addon == IntPtr.Zero ? ActorIdentifier.Invalid : GetCurrentPlayer(); - } - - public void Dispose() - { - Data.Dispose(); - if (ActorIdentifier.Manager == this) - ActorIdentifier.Manager = null; - } - - ~ActorManager() - => Dispose(); - - private readonly Dalamud.Game.Framework _framework; - private readonly ObjectTable _objects; - private readonly ClientState _clientState; - private readonly GameGui _gameGui; - - private readonly Func _toParentIdx; - - [Signature(Sigs.InspectTitleId, ScanType = ScanType.StaticAddress)] - private static unsafe ushort* _inspectTitleId = null!; - - [Signature(Sigs.InspectWorldId, ScanType = ScanType.StaticAddress)] - private static unsafe ushort* _inspectWorldId = null!; - - private static unsafe ushort InspectTitleId - => *_inspectTitleId; - - private static unsafe ByteString InspectName - => new((byte*)(_inspectWorldId + 1)); - - private static unsafe ushort InspectWorldId - => *_inspectWorldId; - - public static readonly IReadOnlySet MannequinIds = new HashSet() - { - 1026228u, - 1026229u, - 1026986u, - 1026987u, - 1026988u, - 1026989u, - 1032291u, - 1032292u, - 1032293u, - 1032294u, - 1033046u, - 1033047u, - 1033658u, - 1033659u, - 1007137u, - // TODO: Female Hrothgar - }; -} diff --git a/Penumbra.GameData/Actors/ActorManager.Identifiers.cs b/Penumbra.GameData/Actors/ActorManager.Identifiers.cs deleted file mode 100644 index 8584a32b..00000000 --- a/Penumbra.GameData/Actors/ActorManager.Identifiers.cs +++ /dev/null @@ -1,606 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Dalamud.Game.ClientState.Objects.Enums; -using Dalamud.Game.ClientState.Objects.Types; -using Newtonsoft.Json.Linq; -using Penumbra.String; -using Character = FFXIVClientStructs.FFXIV.Client.Game.Character.Character; - -namespace Penumbra.GameData.Actors; - -public partial class ActorManager -{ - /// - /// Try to create an ActorIdentifier from a already parsed JObject . - /// - /// A parsed JObject - /// ActorIdentifier.Invalid if the JObject can not be converted, a valid ActorIdentifier otherwise. - public ActorIdentifier FromJson(JObject? data) - { - if (data == null) - return ActorIdentifier.Invalid; - - var type = data[nameof(ActorIdentifier.Type)]?.ToObject() ?? IdentifierType.Invalid; - switch (type) - { - case IdentifierType.Player: - { - var name = ByteString.FromStringUnsafe(data[nameof(ActorIdentifier.PlayerName)]?.ToObject(), false); - var homeWorld = data[nameof(ActorIdentifier.HomeWorld)]?.ToObject() ?? 0; - return CreatePlayer(name, homeWorld); - } - case IdentifierType.Retainer: - { - var name = ByteString.FromStringUnsafe(data[nameof(ActorIdentifier.PlayerName)]?.ToObject(), false); - return CreateRetainer(name, 0); - } - case IdentifierType.Owned: - { - var name = ByteString.FromStringUnsafe(data[nameof(ActorIdentifier.PlayerName)]?.ToObject(), false); - var homeWorld = data[nameof(ActorIdentifier.HomeWorld)]?.ToObject() ?? 0; - var kind = data[nameof(ActorIdentifier.Kind)]?.ToObject() ?? ObjectKind.CardStand; - var dataId = data[nameof(ActorIdentifier.DataId)]?.ToObject() ?? 0; - return CreateOwned(name, homeWorld, kind, dataId); - } - case IdentifierType.Special: - { - var special = data[nameof(ActorIdentifier.Special)]?.ToObject() ?? 0; - return CreateSpecial(special); - } - case IdentifierType.Npc: - { - var index = data[nameof(ActorIdentifier.Index)]?.ToObject() ?? ushort.MaxValue; - var kind = data[nameof(ActorIdentifier.Kind)]?.ToObject() ?? ObjectKind.CardStand; - var dataId = data[nameof(ActorIdentifier.DataId)]?.ToObject() ?? 0; - return CreateNpc(kind, dataId, index); - } - case IdentifierType.UnkObject: - { - var index = data[nameof(ActorIdentifier.Index)]?.ToObject() ?? ushort.MaxValue; - var name = ByteString.FromStringUnsafe(data[nameof(ActorIdentifier.PlayerName)]?.ToObject(), false); - return CreateIndividualUnchecked(IdentifierType.UnkObject, name, index, ObjectKind.None, 0); - } - default: return ActorIdentifier.Invalid; - } - } - - /// - /// Use stored data to convert an ActorIdentifier to a string. - /// - public string ToString(ActorIdentifier id) - { - return id.Type switch - { - IdentifierType.Player => id.HomeWorld != _clientState.LocalPlayer?.HomeWorld.Id - ? $"{id.PlayerName} ({Data.ToWorldName(id.HomeWorld)})" - : id.PlayerName.ToString(), - IdentifierType.Retainer => id.PlayerName.ToString(), - IdentifierType.Owned => id.HomeWorld != _clientState.LocalPlayer?.HomeWorld.Id - ? $"{id.PlayerName} ({Data.ToWorldName(id.HomeWorld)})'s {Data.ToName(id.Kind, id.DataId)}" - : $"{id.PlayerName}s {Data.ToName(id.Kind, id.DataId)}", - IdentifierType.Special => id.Special.ToName(), - IdentifierType.Npc => - id.Index == ushort.MaxValue - ? Data.ToName(id.Kind, id.DataId) - : $"{Data.ToName(id.Kind, id.DataId)} at {id.Index}", - IdentifierType.UnkObject => id.PlayerName.IsEmpty - ? $"Unknown Object at {id.Index}" - : $"{id.PlayerName} at {id.Index}", - _ => "Invalid", - }; - } - - /// - /// Use stored data to convert an ActorIdentifier to a name only. - /// - public string ToName(ActorIdentifier id) - { - return id.Type switch - { - IdentifierType.Player => id.PlayerName.ToString(), - IdentifierType.Retainer => id.PlayerName.ToString(), - IdentifierType.Owned => $"{id.PlayerName}s {Data.ToName(id.Kind, id.DataId)}", - IdentifierType.Special => id.Special.ToName(), - IdentifierType.Npc => Data.ToName(id.Kind, id.DataId), - IdentifierType.UnkObject => id.PlayerName.IsEmpty ? id.PlayerName.ToString() : "Unknown Object", - _ => "Invalid", - }; - } - - private unsafe FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject* HandleCutscene( - FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject* main) - { - if (main == null) - return null; - - if (main->ObjectIndex is >= (ushort)ScreenActor.CutsceneStart and < (ushort)ScreenActor.CutsceneEnd) - { - var parentIdx = _toParentIdx(main->ObjectIndex); - if (parentIdx >= 0) - return (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)_objects.GetObjectAddress(parentIdx); - } - - return main; - } - - public class IdentifierParseError : Exception - { - public IdentifierParseError(string reason) - : base(reason) - { } - } - - public ActorIdentifier FromUserString(string userString) - { - if (userString.Length == 0) - throw new IdentifierParseError("The identifier string was empty."); - - var split = userString.Split('|', 3, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); - if (split.Length < 2) - throw new IdentifierParseError($"The identifier string {userString} does not contain a type and a value."); - - IdentifierType type; - var playerName = ByteString.Empty; - ushort worldId = 0; - var kind = ObjectKind.Player; - var objectId = 0u; - - (ByteString, ushort) ParsePlayer(string player) - { - var parts = player.Split('@', 2, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); - if (!VerifyPlayerName(parts[0])) - throw new IdentifierParseError($"{parts[0]} is not a valid player name."); - if (!ByteString.FromString(parts[0], out var p)) - throw new IdentifierParseError($"The player string {parts[0]} contains invalid symbols."); - - var world = parts.Length == 2 - ? Data.ToWorldId(parts[1]) - : ushort.MaxValue; - - if (!VerifyWorld(world)) - throw new IdentifierParseError($"{parts[1]} is not a valid world name."); - - return (p, world); - } - - (ObjectKind, uint) ParseNpc(string npc) - { - var split = npc.Split(':', 2, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); - if (split.Length != 2) - throw new IdentifierParseError("NPCs need to be specified by '[Object Type]:[NPC Name]'."); - - static bool FindDataId(string name, IReadOnlyDictionary data, out uint dataId) - { - var kvp = data.FirstOrDefault(kvp => kvp.Value.Equals(name, StringComparison.OrdinalIgnoreCase), - new KeyValuePair(uint.MaxValue, string.Empty)); - dataId = kvp.Key; - return kvp.Value.Length > 0; - } - - switch (split[0].ToLowerInvariant()) - { - case "m": - case "mount": - return FindDataId(split[1], Data.Mounts, out var id) - ? (ObjectKind.MountType, id) - : throw new IdentifierParseError($"Could not identify a Mount named {split[1]}."); - case "c": - case "companion": - case "minion": - case "mini": - return FindDataId(split[1], Data.Companions, out id) - ? (ObjectKind.Companion, id) - : throw new IdentifierParseError($"Could not identify a Minion named {split[1]}."); - case "a": - case "o": - case "accessory": - case "ornament": - return FindDataId(split[1], Data.Ornaments, out id) - ? (ObjectKind.Ornament, id) - : throw new IdentifierParseError($"Could not identify an Accessory named {split[1]}."); - case "e": - case "enpc": - case "eventnpc": - case "event npc": - return FindDataId(split[1], Data.ENpcs, out id) - ? (ObjectKind.EventNpc, id) - : throw new IdentifierParseError($"Could not identify an Event NPC named {split[1]}."); - case "b": - case "bnpc": - case "battlenpc": - case "battle npc": - return FindDataId(split[1], Data.BNpcs, out id) - ? (ObjectKind.BattleNpc, id) - : throw new IdentifierParseError($"Could not identify a Battle NPC named {split[1]}."); - default: throw new IdentifierParseError($"The argument {split[0]} is not a valid NPC Type."); - } - } - - switch (split[0].ToLowerInvariant()) - { - case "p": - case "player": - type = IdentifierType.Player; - (playerName, worldId) = ParsePlayer(split[1]); - break; - case "r": - case "retainer": - type = IdentifierType.Retainer; - if (!VerifyRetainerName(split[1])) - throw new IdentifierParseError($"{split[1]} is not a valid player name."); - if (!ByteString.FromString(split[1], out playerName)) - throw new IdentifierParseError($"The retainer string {split[1]} contains invalid symbols."); - - break; - case "n": - case "npc": - type = IdentifierType.Npc; - (kind, objectId) = ParseNpc(split[1]); - break; - case "o": - case "owned": - if (split.Length < 3) - throw new IdentifierParseError( - "Owned NPCs need a NPC and a player, separated by '|', but only one was provided."); - - type = IdentifierType.Owned; - (kind, objectId) = ParseNpc(split[1]); - (playerName, worldId) = ParsePlayer(split[2]); - break; - default: - throw new IdentifierParseError( - $"{split[0]} is not a valid identifier type. Valid types are [P]layer, [R]etainer, [N]PC, or [O]wned"); - } - - return CreateIndividualUnchecked(type, playerName, worldId, kind, objectId); - } - - /// - /// Compute an ActorIdentifier from a GameObject. If check is true, the values are checked for validity. - /// - public unsafe ActorIdentifier FromObject(FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject* actor, - out FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject* owner, bool allowPlayerNpc, bool check, bool withoutIndex) - { - owner = null; - if (actor == null) - return ActorIdentifier.Invalid; - - actor = HandleCutscene(actor); - var idx = actor->ObjectIndex; - if (idx is >= (ushort)ScreenActor.CharacterScreen and <= (ushort)ScreenActor.Card8) - return CreateIndividualUnchecked(IdentifierType.Special, ByteString.Empty, idx, ObjectKind.None, uint.MaxValue); - - var kind = (ObjectKind)actor->ObjectKind; - switch (kind) - { - case ObjectKind.Player: - { - var name = new ByteString(actor->Name); - var homeWorld = ((Character*)actor)->HomeWorld; - return check - ? CreatePlayer(name, homeWorld) - : CreateIndividualUnchecked(IdentifierType.Player, name, homeWorld, ObjectKind.None, uint.MaxValue); - } - case ObjectKind.BattleNpc: - { - var ownerId = actor->OwnerID; - // 952 -> 780 is a special case for chocobos because they have NameId == 0 otherwise. - var nameId = actor->DataID == 952 ? 780 : ((Character*)actor)->NameID; - if (ownerId != 0xE0000000) - { - owner = HandleCutscene( - (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)(_objects.SearchById(ownerId)?.Address ?? IntPtr.Zero)); - if (owner == null) - return ActorIdentifier.Invalid; - - var name = new ByteString(owner->Name); - var homeWorld = ((Character*)owner)->HomeWorld; - return check - ? CreateOwned(name, homeWorld, ObjectKind.BattleNpc, nameId) - : CreateIndividualUnchecked(IdentifierType.Owned, name, homeWorld, ObjectKind.BattleNpc, nameId); - } - - // Hack to support Anamnesis changing ObjectKind for NPC faces. - if (nameId == 0 && allowPlayerNpc) - { - var name = new ByteString(actor->Name); - if (!name.IsEmpty) - { - var homeWorld = ((Character*)actor)->HomeWorld; - return check - ? CreatePlayer(name, homeWorld) - : CreateIndividualUnchecked(IdentifierType.Player, name, homeWorld, ObjectKind.None, uint.MaxValue); - } - } - - var index = withoutIndex ? ushort.MaxValue : actor->ObjectIndex; - return check - ? CreateNpc(ObjectKind.BattleNpc, nameId, index) - : CreateIndividualUnchecked(IdentifierType.Npc, ByteString.Empty, index, ObjectKind.BattleNpc, nameId); - } - case ObjectKind.EventNpc: - { - var dataId = actor->DataID; - // Special case for squadron that is also in the game functions, cf. E8 ?? ?? ?? ?? 89 87 ?? ?? ?? ?? 4C 89 BF - if (dataId == 0xF845D) - dataId = actor->GetNpcID(); - if (MannequinIds.Contains(dataId)) - { - static ByteString Get(byte* ptr) - => ptr == null ? ByteString.Empty : new ByteString(ptr); - - var retainerName = Get(actor->Name); - var actualName = _framework.IsInFrameworkUpdateThread ? Get(actor->GetName()) : ByteString.Empty; - if (!actualName.Equals(retainerName)) - { - var ident = check - ? CreateRetainer(retainerName, ActorIdentifier.RetainerType.Mannequin) - : CreateIndividualUnchecked(IdentifierType.Retainer, retainerName, (ushort)ActorIdentifier.RetainerType.Mannequin, - ObjectKind.EventNpc, dataId); - if (ident.IsValid) - return ident; - } - } - - var index = withoutIndex ? ushort.MaxValue : actor->ObjectIndex; - return check - ? CreateNpc(ObjectKind.EventNpc, dataId, index) - : CreateIndividualUnchecked(IdentifierType.Npc, ByteString.Empty, index, ObjectKind.EventNpc, dataId); - } - case ObjectKind.MountType: - case ObjectKind.Companion: - case ObjectKind.Ornament: - { - owner = HandleCutscene( - (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)_objects.GetObjectAddress(actor->ObjectIndex - 1)); - if (owner == null) - return ActorIdentifier.Invalid; - - var dataId = GetCompanionId(actor, (Character*)owner); - var name = new ByteString(owner->Name); - var homeWorld = ((Character*)owner)->HomeWorld; - return check - ? CreateOwned(name, homeWorld, kind, dataId) - : CreateIndividualUnchecked(IdentifierType.Owned, name, homeWorld, kind, dataId); - } - case ObjectKind.Retainer: - { - var name = new ByteString(actor->Name); - return check - ? CreateRetainer(name, ActorIdentifier.RetainerType.Bell) - : CreateIndividualUnchecked(IdentifierType.Retainer, name, (ushort)ActorIdentifier.RetainerType.Bell, ObjectKind.None, - uint.MaxValue); - } - default: - { - var name = new ByteString(actor->Name); - var index = withoutIndex ? ushort.MaxValue : actor->ObjectIndex; - return CreateIndividualUnchecked(IdentifierType.UnkObject, name, index, ObjectKind.None, 0); - } - } - } - - /// - /// Obtain the current companion ID for an object by its actor and owner. - /// - private unsafe uint GetCompanionId(FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject* actor, - Character* owner) - { - return (ObjectKind)actor->ObjectKind switch - { - ObjectKind.MountType => owner->Mount.MountId, - ObjectKind.Ornament => owner->Ornament.OrnamentId, - ObjectKind.Companion => actor->DataID, - _ => actor->DataID, - }; - } - - public unsafe ActorIdentifier FromObject(GameObject? actor, out FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject* owner, - bool allowPlayerNpc, bool check, bool withoutIndex) - => FromObject((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)(actor?.Address ?? IntPtr.Zero), out owner, allowPlayerNpc, - check, withoutIndex); - - public unsafe ActorIdentifier FromObject(GameObject? actor, bool allowPlayerNpc, bool check, bool withoutIndex) - => FromObject(actor, out _, allowPlayerNpc, check, withoutIndex); - - public ActorIdentifier CreateIndividual(IdentifierType type, ByteString name, ushort homeWorld, ObjectKind kind, uint dataId) - => type switch - { - IdentifierType.Player => CreatePlayer(name, homeWorld), - IdentifierType.Retainer => CreateRetainer(name, (ActorIdentifier.RetainerType)homeWorld), - IdentifierType.Owned => CreateOwned(name, homeWorld, kind, dataId), - IdentifierType.Special => CreateSpecial((ScreenActor)homeWorld), - IdentifierType.Npc => CreateNpc(kind, dataId, homeWorld), - IdentifierType.UnkObject => CreateIndividualUnchecked(IdentifierType.UnkObject, name, homeWorld, ObjectKind.None, 0), - _ => ActorIdentifier.Invalid, - }; - - /// - /// Only use this if you are sure the input is valid. - /// - public ActorIdentifier CreateIndividualUnchecked(IdentifierType type, ByteString name, ushort homeWorld, ObjectKind kind, uint dataId) - => new(type, kind, homeWorld, dataId, name); - - public ActorIdentifier CreatePlayer(ByteString name, ushort homeWorld) - { - if (!VerifyWorld(homeWorld) || !VerifyPlayerName(name.Span)) - return ActorIdentifier.Invalid; - - return new ActorIdentifier(IdentifierType.Player, ObjectKind.Player, homeWorld, 0, name); - } - - public ActorIdentifier CreateRetainer(ByteString name, ActorIdentifier.RetainerType type) - { - if (!VerifyRetainerName(name.Span)) - return ActorIdentifier.Invalid; - - return new ActorIdentifier(IdentifierType.Retainer, ObjectKind.Retainer, (ushort)type, 0, name); - } - - public ActorIdentifier CreateSpecial(ScreenActor actor) - { - if (!VerifySpecial(actor)) - return ActorIdentifier.Invalid; - - return new ActorIdentifier(IdentifierType.Special, ObjectKind.Player, (ushort)actor, 0, ByteString.Empty); - } - - public ActorIdentifier CreateNpc(ObjectKind kind, uint data, ushort index = ushort.MaxValue) - { - if (!VerifyIndex(index) || !VerifyNpcData(kind, data)) - return ActorIdentifier.Invalid; - - return new ActorIdentifier(IdentifierType.Npc, kind, index, data, ByteString.Empty); - } - - public ActorIdentifier CreateOwned(ByteString ownerName, ushort homeWorld, ObjectKind kind, uint dataId) - { - if (!VerifyWorld(homeWorld) || !VerifyPlayerName(ownerName.Span) || !VerifyOwnedData(kind, dataId)) - return ActorIdentifier.Invalid; - - return new ActorIdentifier(IdentifierType.Owned, kind, homeWorld, dataId, ownerName); - } - - /// Checks SE naming rules. - public static bool VerifyPlayerName(ReadOnlySpan name) - { - // Total no more than 20 characters + space. - if (name.Length is < 5 or > 21) - return false; - - // Forename and surname, no more spaces. - var splitIndex = name.IndexOf((byte)' '); - if (splitIndex < 0 || name[(splitIndex + 1)..].IndexOf((byte)' ') >= 0) - return false; - - return CheckNamePart(name[..splitIndex], 2, 15) && CheckNamePart(name[(splitIndex + 1)..], 2, 15); - } - - /// Checks SE naming rules. - public static bool VerifyPlayerName(ReadOnlySpan name) - { - // Total no more than 20 characters + space. - if (name.Length is < 5 or > 21) - return false; - - // Forename and surname, no more spaces. - var splitIndex = name.IndexOf(' '); - if (splitIndex < 0 || name[(splitIndex + 1)..].IndexOf(' ') >= 0) - return false; - - return CheckNamePart(name[..splitIndex], 2, 15) && CheckNamePart(name[(splitIndex + 1)..], 2, 15); - } - - /// Checks SE naming rules. - public static bool VerifyRetainerName(ReadOnlySpan name) - => CheckNamePart(name, 3, 20); - - /// Checks SE naming rules. - public static bool VerifyRetainerName(ReadOnlySpan name) - => CheckNamePart(name, 3, 20); - - private static bool CheckNamePart(ReadOnlySpan part, int minLength, int maxLength) - { - // Each name part at least 2 and at most 15 characters for players, and at least 3 and at most 20 characters for retainers. - if (part.Length < minLength || part.Length > maxLength) - return false; - - // Each part starting with capitalized letter. - if (part[0] is < 'A' or > 'Z') - return false; - - // Every other symbol needs to be lowercase letter, hyphen or apostrophe. - var last = '\0'; - for (var i = 1; i < part.Length; ++i) - { - var current = part[i]; - if (current is not ('\'' or '-' or (>= 'a' and <= 'z'))) - return false; - - // Hyphens can not be used in succession, after or before apostrophes or as the last symbol. - if (last is '\'' && current is '-') - return false; - if (last is '-' && current is '-' or '\'') - return false; - - last = current; - } - - return true; - } - - private static bool CheckNamePart(ReadOnlySpan part, int minLength, int maxLength) - { - // Each name part at least 2 and at most 15 characters for players, and at least 3 and at most 20 characters for retainers. - if (part.Length < minLength || part.Length > maxLength) - return false; - - // Each part starting with capitalized letter. - if (part[0] is < (byte)'A' or > (byte)'Z') - return false; - - // Every other symbol needs to be lowercase letter, hyphen or apostrophe. - var last = (byte)'\0'; - for (var i = 1; i < part.Length; ++i) - { - var current = part[i]; - if (current is not ((byte)'\'' or (byte)'-' or (>= (byte)'a' and <= (byte)'z'))) - return false; - - // Hyphens can not be used in succession, after or before apostrophes or as the last symbol. - if (last is (byte)'\'' && current is (byte)'-') - return false; - if (last is (byte)'-' && current is (byte)'-' or (byte)'\'') - return false; - - last = current; - } - - return true; - } - - /// Checks if the world is a valid public world or ushort.MaxValue (any world). - public bool VerifyWorld(ushort worldId) - => worldId == ushort.MaxValue || Data.Worlds.ContainsKey(worldId); - - /// Verify that the enum value is a specific actor and return the name if it is. - public static bool VerifySpecial(ScreenActor actor) - => actor is >= ScreenActor.CharacterScreen and <= ScreenActor.Card8; - - /// Verify that the object index is a valid index for an NPC. - public bool VerifyIndex(ushort index) - { - return index switch - { - ushort.MaxValue => true, - < 200 => index % 2 == 0, - > (ushort)ScreenActor.Card8 => index < _objects.Length, - _ => false, - }; - } - - /// Verify that the object kind is a valid owned object, and the corresponding data Id. - public bool VerifyOwnedData(ObjectKind kind, uint dataId) - { - return kind switch - { - ObjectKind.MountType => Data.Mounts.ContainsKey(dataId), - ObjectKind.Companion => Data.Companions.ContainsKey(dataId), - ObjectKind.Ornament => Data.Ornaments.ContainsKey(dataId), - ObjectKind.BattleNpc => Data.BNpcs.ContainsKey(dataId), - _ => false, - }; - } - - public bool VerifyNpcData(ObjectKind kind, uint dataId) - => kind switch - { - ObjectKind.MountType => Data.Mounts.ContainsKey(dataId), - ObjectKind.Companion => Data.Companions.ContainsKey(dataId), - ObjectKind.Ornament => Data.Ornaments.ContainsKey(dataId), - ObjectKind.BattleNpc => Data.BNpcs.ContainsKey(dataId), - ObjectKind.EventNpc => Data.ENpcs.ContainsKey(dataId), - _ => false, - }; -} diff --git a/Penumbra.GameData/Actors/AgentBannerParty.cs b/Penumbra.GameData/Actors/AgentBannerParty.cs deleted file mode 100644 index 2de95c8c..00000000 --- a/Penumbra.GameData/Actors/AgentBannerParty.cs +++ /dev/null @@ -1,91 +0,0 @@ -using FFXIVClientStructs.FFXIV.Client.System.String; -using FFXIVClientStructs.FFXIV.Client.UI.Agent; -using FFXIVClientStructs.FFXIV.Client.UI; -using FFXIVClientStructs.FFXIV.Component.GUI; -using System.Runtime.InteropServices; -using FFXIVClientStructs.FFXIV.Client.System.Framework; - -namespace Penumbra; - -[StructLayout( LayoutKind.Explicit )] -public unsafe struct AgentBannerInterface -{ - [FieldOffset( 0x0 )] public AgentInterface AgentInterface; - [FieldOffset( 0x28 )] public BannerInterfaceStorage* Data; - - public BannerInterfaceStorage.CharacterData* Character( int idx ) - => idx switch - { - _ when Data == null => null, - 0 => &Data->Character1, - 1 => &Data->Character2, - 2 => &Data->Character3, - 3 => &Data->Character4, - 4 => &Data->Character5, - 5 => &Data->Character6, - 6 => &Data->Character7, - 7 => &Data->Character8, - _ => null, - }; -} - -[StructLayout(LayoutKind.Explicit)] -public unsafe struct AgentBannerParty -{ - public static AgentBannerParty* Instance() => ( AgentBannerParty* )Framework.Instance()->GetUiModule()->GetAgentModule()->GetAgentByInternalId( AgentId.BannerParty ); - - [FieldOffset( 0x0 )] public AgentBannerInterface AgentBannerInterface; -} - -[StructLayout( LayoutKind.Explicit )] -public unsafe struct AgentBannerMIP -{ - public static AgentBannerMIP* Instance() => ( AgentBannerMIP* )Framework.Instance()->GetUiModule()->GetAgentModule()->GetAgentByInternalId( AgentId.BannerMIP ); - [FieldOffset( 0x0 )] public AgentBannerInterface AgentBannerInterface; -} - -// Client::UI::Agent::AgentBannerInterface::Storage -// destructed in Client::UI::Agent::AgentBannerInterface::dtor -[StructLayout( LayoutKind.Explicit, Size = 0x3B30 )] -public unsafe struct BannerInterfaceStorage -{ - // vtable: 48 8D 05 ?? ?? ?? ?? 48 89 01 48 8B F9 7E - // dtor: E8 ?? ?? ?? ?? 48 83 EF ?? 75 ?? BA ?? ?? ?? ?? 48 8B CE E8 ?? ?? ?? ?? 48 89 7D - [StructLayout( LayoutKind.Explicit, Size = 0x760 )] - public struct CharacterData - { - [FieldOffset( 0x000 )] public void** VTable; - - [FieldOffset( 0x018 )] public Utf8String Name1; - [FieldOffset( 0x080 )] public Utf8String Name2; - [FieldOffset( 0x0E8 )] public Utf8String UnkString1; - [FieldOffset( 0x150 )] public Utf8String UnkString2; - [FieldOffset( 0x1C0 )] public Utf8String Job; - [FieldOffset( 0x238 )] public uint WorldId; - [FieldOffset( 0x240 )] public Utf8String UnkString3; - - [FieldOffset( 0x2B0 )] public void* CharaView; - [FieldOffset( 0x5D0 )] public AtkTexture AtkTexture; - - [FieldOffset( 0x6E0 )] public Utf8String Title; - [FieldOffset( 0x750 )] public void* SomePointer; - - } - - [FieldOffset( 0x0000 )] public void* Agent; // AgentBannerParty, maybe other Banner agents - [FieldOffset( 0x0008 )] public UIModule* UiModule; - [FieldOffset( 0x0010 )] public uint Unk1; // Maybe count or bitfield, but probably not - [FieldOffset( 0x0014 )] public uint Unk2; - - [FieldOffset( 0x0020 )] public CharacterData Character1; - [FieldOffset( 0x0780 )] public CharacterData Character2; - [FieldOffset( 0x0EE0 )] public CharacterData Character3; - [FieldOffset( 0x1640 )] public CharacterData Character4; - [FieldOffset( 0x1DA0 )] public CharacterData Character5; - [FieldOffset( 0x2500 )] public CharacterData Character6; - [FieldOffset( 0x2C60 )] public CharacterData Character7; - [FieldOffset( 0x33C0 )] public CharacterData Character8; - - [FieldOffset( 0x3B20 )] public long Unk3; - [FieldOffset( 0x3B28 )] public long Unk4; -} \ No newline at end of file diff --git a/Penumbra.GameData/Actors/IdentifierType.cs b/Penumbra.GameData/Actors/IdentifierType.cs deleted file mode 100644 index 8fe1ee4f..00000000 --- a/Penumbra.GameData/Actors/IdentifierType.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Penumbra.GameData.Actors; - -public enum IdentifierType : byte -{ - Invalid, - Player, - Owned, - Special, - Npc, - Retainer, - UnkObject, -}; \ No newline at end of file diff --git a/Penumbra.GameData/Actors/ScreenActor.cs b/Penumbra.GameData/Actors/ScreenActor.cs deleted file mode 100644 index 00cf66fc..00000000 --- a/Penumbra.GameData/Actors/ScreenActor.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace Penumbra.GameData.Actors; - -public enum ScreenActor : ushort -{ - CutsceneStart = 200, - GPosePlayer = 201, - CutsceneEnd = 240, - CharacterScreen = CutsceneEnd, - ExamineScreen = 241, - FittingRoom = 242, - DyePreview = 243, - Portrait = 244, - Card6 = 245, - Card7 = 246, - Card8 = 247, - ScreenEnd = Card8 + 1, -} diff --git a/Penumbra.GameData/Data/BNpcNames.cs b/Penumbra.GameData/Data/BNpcNames.cs deleted file mode 100644 index b268e827..00000000 --- a/Penumbra.GameData/Data/BNpcNames.cs +++ /dev/null @@ -1,16414 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Penumbra.GameData.Data; - -public static class NpcNames -{ - /// Generated from https://api.ffxivteamcraft.com/gubal on 2023-07-05. - public static IReadOnlyList> CreateNames() - => new IReadOnlyList[] - { - Array.Empty(), - new uint[]{6373}, - new uint[]{411, 412, 965, 1064, 1863, 2012}, - new uint[]{3, 176}, - new uint[]{4, 460}, - new uint[]{5, 184, 408}, - new uint[]{6, 183, 407, 2020}, - new uint[]{7, 125, 1121, 2157}, - new uint[]{8, 481}, - new uint[]{9, 571}, - new uint[]{10, 572, 589}, - new uint[]{11, 2033}, - new uint[]{12, 13, 299, 301, 590, 1039, 1122, 1216, 1315, 1743, 2011, 2757}, - new uint[]{397, 398, 566, 1067}, - new uint[]{14, 195, 202}, - new uint[]{16, 502}, - new uint[]{15}, - new uint[]{17, 132, 270, 316, 963, 1034, 1120, 1742, 2688, 2707, 2743, 2745}, - new uint[]{182, 319, 320, 321, 493, 1026, 1218, 2018}, - new uint[]{19, 322, 323, 324, 1025, 1219, 2019}, - new uint[]{20, 110, 494, 1854}, - new uint[]{21, 492, 606, 1028, 1029, 1086, 1198, 1349, 2039, 2169, 2223, 3687}, - new uint[]{22, 180, 400, 573, 1085, 4064}, - new uint[]{23, 162, 175, 1085, 3341}, - new uint[]{24, 163, 232, 233, 508, 607, 1136, 3343}, - new uint[]{25}, - new uint[]{26, 216, 217, 500, 592, 1040}, - new uint[]{27, 164, 1757}, - new uint[]{28, 966, 1070, 1071}, - new uint[]{29}, - new uint[]{30, 131, 280, 365, 552, 2996, 3621, 4108, 4286}, - Array.Empty(), - new uint[]{32, 203}, - new uint[]{33, 165, 214, 215, 497}, - new uint[]{34, 506}, - Array.Empty(), - new uint[]{36, 296, 485, 1051}, - new uint[]{37, 198, 1101}, - new uint[]{38, 279, 363, 364, 612, 1078, 1146}, - new uint[]{39, 177, 188, 962, 1350, 4046}, - new uint[]{40, 1145}, - new uint[]{41, 168, 201, 486, 1199}, - new uint[]{227, 284, 285, 489, 603, 1043, 1084}, - new uint[]{43, 181}, - new uint[]{44, 587, 1147, 2225, 4069}, - new uint[]{45, 491, 2918}, - new uint[]{46, 1703, 2056}, - new uint[]{47, 141, 199, 220, 699}, - new uint[]{48, 166}, - new uint[]{49, 200, 1046, 1222}, - Array.Empty(), - Array.Empty(), - new uint[]{50, 283, 464, 551, 1148}, - new uint[]{130, 206, 462}, - Array.Empty(), - new uint[]{53, 57, 1113, 1364, 1809, 1815, 1821, 2234, 2983, 3110, 3176}, - Array.Empty(), - new uint[]{54, 179, 201, 395, 564, 696, 1142}, - new uint[]{55, 2032}, - new uint[]{56, 7134}, - Array.Empty(), - new uint[]{58, 1810, 1816, 1822, 2173, 2351, 3181}, - new uint[]{59, 1811, 1817, 1823, 2120, 2173, 2238, 3177}, - new uint[]{60, 1812, 1818, 1824, 2235, 3178}, - new uint[]{61, 1365, 1813, 1819, 1825, 2173, 2236, 3180, 3334}, - new uint[]{62}, - new uint[]{1021}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{67, 229, 538, 1139}, - new uint[]{68, 230}, - new uint[]{69, 231, 2313}, - new uint[]{1138}, - Array.Empty(), - Array.Empty(), - new uint[]{73}, - new uint[]{74}, - Array.Empty(), - new uint[]{140, 239, 2362}, - new uint[]{2363}, - new uint[]{139, 240, 675, 2361, 4067, 4851}, - new uint[]{79}, - new uint[]{79}, - new uint[]{52, 80, 540}, - new uint[]{81}, - new uint[]{82, 172, 540}, - new uint[]{83}, - new uint[]{84}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{91}, - new uint[]{91}, - new uint[]{91, 317}, - new uint[]{91, 317}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{548}, - Array.Empty(), - new uint[]{310}, - new uint[]{314}, - new uint[]{312}, - new uint[]{101}, - new uint[]{102, 190, 209, 660, 1777}, - new uint[]{103, 208, 662, 1783}, - new uint[]{104, 210, 661, 1782}, - new uint[]{663, 1784}, - new uint[]{106, 352, 1066}, - new uint[]{107, 405, 1092, 1093, 2182}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{456}, - new uint[]{110}, - new uint[]{111}, - Array.Empty(), - Array.Empty(), - new uint[]{112, 171, 3342}, - new uint[]{113}, - new uint[]{114}, - new uint[]{115}, - new uint[]{116, 912}, - new uint[]{117}, - new uint[]{118, 298, 396, 490, 696, 1042}, - new uint[]{119}, - new uint[]{302, 399, 1033, 1088, 1089, 2756}, - new uint[]{391, 645, 950, 1134, 1758, 1831}, - new uint[]{237}, - new uint[]{174, 1366, 1846, 3994}, - new uint[]{120, 605}, - new uint[]{170, 1763, 2156}, - new uint[]{121}, - new uint[]{83}, - new uint[]{122}, - new uint[]{84}, - new uint[]{84}, - new uint[]{123}, - Array.Empty(), - new uint[]{125}, - new uint[]{185}, - new uint[]{186}, - new uint[]{186}, - new uint[]{189}, - Array.Empty(), - Array.Empty(), - new uint[]{139}, - new uint[]{197, 226, 381, 382}, - new uint[]{196, 289}, - new uint[]{228, 1758}, - Array.Empty(), - new uint[]{191}, - Array.Empty(), - new uint[]{140}, - new uint[]{245, 259, 1177, 1353, 2155, 2300}, - new uint[]{253, 256}, - new uint[]{249, 251, 252}, - new uint[]{259, 260, 1725}, - new uint[]{219, 268, 351, 570, 1072, 1115, 1170, 1244, 2987, 2989}, - new uint[]{1114, 1244}, - new uint[]{305, 1037, 1119}, - new uint[]{304, 1736}, - new uint[]{303}, - new uint[]{287, 288, 1045}, - new uint[]{286}, - new uint[]{1019}, - new uint[]{221, 222, 366, 1065, 1869}, - new uint[]{223, 224, 1316}, - new uint[]{282, 1036}, - new uint[]{281, 1116, 1181}, - new uint[]{207, 242, 467, 1738, 1768}, - new uint[]{242, 1739, 1759}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{276, 277, 278, 575, 901, 1041}, - new uint[]{275, 1741, 2008}, - new uint[]{1671, 1836}, - new uint[]{264, 1024, 1744, 1841, 3622, 4285}, - new uint[]{788, 1761, 3627, 3699}, - new uint[]{1344}, - new uint[]{273, 1030, 1125, 2049}, - new uint[]{274, 2050}, - Array.Empty(), - new uint[]{6733}, - new uint[]{292, 293, 1022}, - Array.Empty(), - Array.Empty(), - new uint[]{269, 1865}, - new uint[]{1814, 1820, 1826, 3179, 3545}, - Array.Empty(), - new uint[]{272, 1023}, - new uint[]{271}, - new uint[]{318, 409, 410, 574, 577, 958, 1049, 1082, 1083}, - new uint[]{306, 403, 1047, 1317}, - new uint[]{1185}, - new uint[]{1186}, - new uint[]{1185}, - new uint[]{1186}, - new uint[]{1185}, - new uint[]{1186}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{718}, - new uint[]{719}, - new uint[]{720}, - new uint[]{721}, - new uint[]{722}, - new uint[]{723}, - new uint[]{724}, - new uint[]{725}, - new uint[]{718}, - new uint[]{719}, - new uint[]{720}, - new uint[]{721}, - new uint[]{722}, - new uint[]{723}, - new uint[]{724}, - new uint[]{2752}, - new uint[]{1649}, - new uint[]{1647}, - new uint[]{1644}, - new uint[]{1649}, - new uint[]{1647}, - new uint[]{1644}, - new uint[]{1649}, - new uint[]{1647}, - new uint[]{1644}, - new uint[]{1801}, - new uint[]{1801}, - new uint[]{1801}, - new uint[]{1375}, - new uint[]{1376}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{422}, - new uint[]{424}, - new uint[]{425}, - new uint[]{428}, - new uint[]{444}, - new uint[]{443}, - new uint[]{437}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{440}, - new uint[]{988}, - Array.Empty(), - new uint[]{1208}, - new uint[]{442}, - new uint[]{441}, - new uint[]{423}, - new uint[]{426}, - new uint[]{427}, - new uint[]{428}, - new uint[]{633}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{134}, - new uint[]{553}, - Array.Empty(), - new uint[]{136}, - new uint[]{142}, - new uint[]{135}, - Array.Empty(), - new uint[]{596}, - new uint[]{234, 235, 308, 1135}, - new uint[]{1180, 1735}, - new uint[]{238, 505}, - new uint[]{236, 504, 1123, 1785, 2038, 3344}, - new uint[]{129, 211, 591, 1027, 1740}, - Array.Empty(), - new uint[]{104}, - Array.Empty(), - Array.Empty(), - new uint[]{77, 169, 241}, - new uint[]{360, 361, 1069, 1161}, - new uint[]{265, 349, 1100}, - new uint[]{341, 1068}, - new uint[]{1075, 1168, 2733}, - new uint[]{344}, - new uint[]{342, 979, 1107, 2732}, - new uint[]{978, 1107}, - Array.Empty(), - new uint[]{353, 687, 1091, 1167, 1748}, - new uint[]{355, 4114}, - new uint[]{357, 1076, 1313}, - new uint[]{358, 1077}, - new uint[]{563, 1069, 1102, 1103}, - new uint[]{560, 1081}, - new uint[]{561, 825, 1079, 1080, 1164}, - new uint[]{270, 1073, 1742, 1749}, - new uint[]{378, 379, 380, 1158}, - new uint[]{368, 369, 370, 1157}, - new uint[]{376, 1156, 1235}, - new uint[]{372, 373, 1155}, - Array.Empty(), - new uint[]{2165, 2167}, - new uint[]{1163, 2165, 2166}, - new uint[]{1162, 2166}, - new uint[]{2166}, - Array.Empty(), - new uint[]{392, 1098}, - new uint[]{393, 1096}, - new uint[]{394, 1087}, - new uint[]{401, 402, 1097}, - new uint[]{309, 404, 1035, 1123, 1791}, - new uint[]{414}, - new uint[]{413}, - new uint[]{416, 676}, - new uint[]{415}, - new uint[]{417, 1236}, - new uint[]{420, 421, 674, 1075, 1719}, - new uint[]{418, 420, 1719}, - new uint[]{419, 1173}, - new uint[]{262, 1050, 1101}, - new uint[]{326, 1309}, - new uint[]{329, 330, 1311}, - new uint[]{1310}, - new uint[]{328}, - new uint[]{234, 307, 503}, - new uint[]{290}, - new uint[]{243, 2511}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1115}, - new uint[]{331, 1997, 3332}, - new uint[]{333, 3332}, - new uint[]{332}, - Array.Empty(), - new uint[]{337}, - new uint[]{338}, - new uint[]{339}, - Array.Empty(), - Array.Empty(), - new uint[]{3332}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1769}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{636, 638, 1032, 1153}, - new uint[]{640, 642, 2021, 2533}, - new uint[]{684}, - new uint[]{632, 641, 893, 953, 1140}, - new uint[]{639, 1063, 3604}, - new uint[]{637, 685, 1638, 3338, 3572, 3589}, - new uint[]{658, 1017, 1141, 1780, 2232}, - new uint[]{635, 643}, - new uint[]{1182, 1760}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1850}, - new uint[]{784, 1755}, - new uint[]{1852}, - new uint[]{644, 2755}, - new uint[]{657, 1756, 1849, 3336, 3567, 3963}, - new uint[]{634, 3533}, - Array.Empty(), - new uint[]{1185}, - Array.Empty(), - new uint[]{567, 1183, 1789, 1853}, - new uint[]{1753}, - new uint[]{1021}, - new uint[]{480}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108, 1486, 1694, 2136, 2137, 2564, 2655, 2667, 2824, 3234, 3725, 3726, 3734, 3740, 3741, 4687, 4696, 4805, 5186, 5187, 5199, 5278, 5279, 5280, 5515, 5517, 5526, 5529, 5530, 5553, 5559, 5561, 5562, 5570, 5588, 6126, 6155, 6173, 6193, 6197, 6198, 6199}, - new uint[]{1204}, - new uint[]{342}, - new uint[]{1382}, - new uint[]{1205}, - new uint[]{1205}, - new uint[]{1382}, - new uint[]{1206}, - new uint[]{1207}, - Array.Empty(), - new uint[]{1298}, - new uint[]{1299}, - new uint[]{1300}, - new uint[]{1280}, - new uint[]{1281}, - new uint[]{1282}, - new uint[]{1283}, - new uint[]{1286}, - new uint[]{1279}, - new uint[]{1279}, - Array.Empty(), - new uint[]{282, 1036, 1038}, - new uint[]{294}, - new uint[]{1262}, - new uint[]{108, 148, 157, 444, 510, 686, 1185, 1459, 1466, 1644, 1645, 1646, 1680, 1801, 2137, 2143, 2154, 2160, 2193, 2265, 2294, 2345, 2547, 2549, 2595, 2598, 2605, 2633, 2814, 2815, 2821, 2846, 2903, 2907, 3091, 3093, 3227, 3231, 3234, 3240, 3252, 3287, 3376, 3380, 3381, 3382, 3423, 3764, 3791, 3798, 3818, 3821, 3822, 3823, 4613, 4624, 4631, 4657, 4658, 4698, 4888, 4896, 4897, 4943, 4951, 4952, 4954, 4956, 5199, 5204, 5218, 5219, 5220, 5281, 5282}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{453}, - new uint[]{453}, - new uint[]{524}, - Array.Empty(), - Array.Empty(), - new uint[]{527}, - Array.Empty(), - new uint[]{526}, - Array.Empty(), - new uint[]{520}, - Array.Empty(), - new uint[]{533}, - Array.Empty(), - new uint[]{526}, - new uint[]{453}, - new uint[]{453}, - Array.Empty(), - Array.Empty(), - new uint[]{453}, - new uint[]{453}, - new uint[]{453}, - new uint[]{526}, - new uint[]{529}, - new uint[]{453}, - new uint[]{453}, - new uint[]{453}, - new uint[]{526}, - Array.Empty(), - Array.Empty(), - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{491}, - new uint[]{203}, - Array.Empty(), - Array.Empty(), - new uint[]{230}, - new uint[]{526}, - new uint[]{51}, - new uint[]{512}, - new uint[]{446}, - new uint[]{517}, - new uint[]{518}, - new uint[]{445}, - new uint[]{447}, - new uint[]{448}, - new uint[]{513}, - new uint[]{449}, - new uint[]{514}, - Array.Empty(), - new uint[]{515}, - new uint[]{450}, - new uint[]{451}, - new uint[]{516}, - new uint[]{452}, - new uint[]{498}, - new uint[]{507}, - new uint[]{479}, - new uint[]{471}, - new uint[]{472}, - new uint[]{473}, - new uint[]{474}, - new uint[]{475}, - new uint[]{476}, - new uint[]{477}, - new uint[]{478}, - new uint[]{1131}, - new uint[]{1130}, - Array.Empty(), - Array.Empty(), - new uint[]{501, 1029, 1117, 1788}, - new uint[]{509}, - new uint[]{72}, - new uint[]{20}, - new uint[]{19}, - new uint[]{14}, - new uint[]{52}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{464}, - new uint[]{464}, - Array.Empty(), - new uint[]{465}, - new uint[]{466}, - new uint[]{467}, - new uint[]{468}, - Array.Empty(), - new uint[]{470}, - new uint[]{598}, - new uint[]{600}, - new uint[]{598}, - new uint[]{599}, - new uint[]{608}, - new uint[]{609}, - new uint[]{610}, - new uint[]{611}, - new uint[]{614}, - new uint[]{939}, - new uint[]{30}, - new uint[]{621}, - new uint[]{622}, - new uint[]{621}, - new uint[]{622}, - new uint[]{193}, - new uint[]{194}, - new uint[]{192}, - new uint[]{947}, - new uint[]{628}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{613}, - new uint[]{455}, - Array.Empty(), - Array.Empty(), - new uint[]{655}, - new uint[]{541}, - new uint[]{437}, - new uint[]{1536}, - new uint[]{6947, 6948}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{453}, - new uint[]{453}, - new uint[]{453}, - new uint[]{453}, - new uint[]{454}, - new uint[]{454}, - new uint[]{454}, - new uint[]{511}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{553}, - new uint[]{543}, - new uint[]{169}, - new uint[]{84}, - new uint[]{1385}, - Array.Empty(), - new uint[]{627}, - new uint[]{439}, - Array.Empty(), - new uint[]{448}, - new uint[]{448}, - new uint[]{521, 902, 905, 1859, 4396}, - new uint[]{522}, - new uint[]{550}, - new uint[]{542}, - new uint[]{536}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{523}, - new uint[]{535}, - new uint[]{528}, - new uint[]{531, 1728}, - new uint[]{532}, - new uint[]{4}, - new uint[]{523}, - Array.Empty(), - Array.Empty(), - new uint[]{10}, - new uint[]{5}, - Array.Empty(), - new uint[]{140}, - new uint[]{139}, - new uint[]{924}, - new uint[]{923}, - new uint[]{923}, - new uint[]{944}, - new uint[]{690}, - new uint[]{925}, - new uint[]{943}, - new uint[]{925}, - new uint[]{929}, - new uint[]{1306}, - new uint[]{1304}, - new uint[]{928}, - new uint[]{1307}, - new uint[]{689}, - Array.Empty(), - new uint[]{698}, - Array.Empty(), - Array.Empty(), - new uint[]{1694}, - new uint[]{789, 790, 1762, 1774, 1790}, - new uint[]{789, 1448, 1746, 1774, 1775}, - new uint[]{682, 794, 1111, 1737, 1754, 1770, 1781}, - new uint[]{793, 1770, 6725}, - Array.Empty(), - Array.Empty(), - new uint[]{1625}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1301}, - new uint[]{690}, - new uint[]{929}, - new uint[]{928}, - new uint[]{1305}, - new uint[]{1306}, - new uint[]{1307}, - new uint[]{929}, - new uint[]{1305}, - new uint[]{689}, - new uint[]{934}, - new uint[]{934}, - new uint[]{709}, - new uint[]{925}, - new uint[]{925}, - new uint[]{781}, - new uint[]{1306}, - new uint[]{758}, - new uint[]{756}, - new uint[]{757}, - new uint[]{765}, - new uint[]{766}, - new uint[]{767}, - new uint[]{782}, - new uint[]{783}, - Array.Empty(), - new uint[]{841}, - new uint[]{842}, - new uint[]{843}, - new uint[]{844}, - new uint[]{845}, - new uint[]{708}, - new uint[]{1647}, - Array.Empty(), - new uint[]{262}, - new uint[]{932}, - new uint[]{1305}, - new uint[]{1305}, - new uint[]{823}, - new uint[]{751}, - new uint[]{751}, - new uint[]{751}, - new uint[]{828}, - new uint[]{823}, - new uint[]{829}, - new uint[]{830}, - new uint[]{831}, - new uint[]{823}, - new uint[]{828}, - new uint[]{751}, - new uint[]{907}, - new uint[]{756}, - new uint[]{932}, - new uint[]{1306}, - new uint[]{932}, - new uint[]{757}, - new uint[]{1307}, - new uint[]{824}, - new uint[]{825}, - new uint[]{826}, - new uint[]{262}, - new uint[]{937}, - Array.Empty(), - new uint[]{795, 1750, 1751}, - new uint[]{1611, 1612, 1747}, - new uint[]{785, 1447, 1630}, - new uint[]{786, 1631}, - new uint[]{787}, - new uint[]{650, 1989, 2230, 2990, 3182, 3894, 5214}, - new uint[]{651, 1989, 2228, 2990, 3182, 3989, 5215}, - new uint[]{652, 1989, 2229, 3182, 4296}, - new uint[]{646, 647, 1767}, - new uint[]{646, 647, 1766}, - new uint[]{648, 1771}, - new uint[]{649, 1772}, - new uint[]{653, 659, 1745, 3473}, - new uint[]{3576, 4054}, - new uint[]{655}, - Array.Empty(), - new uint[]{246, 247}, - new uint[]{254}, - new uint[]{250}, - Array.Empty(), - new uint[]{245, 1837, 2297, 2300, 2301, 2304}, - new uint[]{253, 1388, 1731, 1839, 1880, 2305, 2369}, - new uint[]{249, 1389, 1838, 2296}, - new uint[]{258, 1840, 1879}, - new uint[]{192}, - new uint[]{193}, - new uint[]{194}, - Array.Empty(), - new uint[]{436, 1842, 2986}, - new uint[]{103, 662, 1843}, - new uint[]{662, 1844, 2985}, - new uint[]{663, 1845}, - new uint[]{378}, - new uint[]{368}, - Array.Empty(), - new uint[]{372}, - new uint[]{377, 1832, 2518, 2702, 2711}, - new uint[]{562, 1833, 2519, 2694}, - new uint[]{375, 1834, 2521, 2704}, - new uint[]{371, 1835, 2520, 2703}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{64, 67, 2319, 2321}, - new uint[]{65, 68, 2317, 2320}, - new uint[]{66, 69, 2313, 2318}, - new uint[]{386, 1827, 2525, 2534, 2543}, - new uint[]{384, 1828, 2524, 2540, 2679}, - new uint[]{389, 1829, 2523, 2537, 2721}, - new uint[]{565, 1830, 2526, 2541}, - new uint[]{225, 283, 367, 1360, 3099}, - Array.Empty(), - new uint[]{218, 266, 350}, - Array.Empty(), - new uint[]{347, 1168, 1705, 2539}, - new uint[]{345, 1705}, - new uint[]{979, 1866, 2536, 2542}, - new uint[]{559, 1705, 2535}, - new uint[]{1851, 2239, 4094}, - new uint[]{914}, - new uint[]{914}, - new uint[]{914}, - Array.Empty(), - new uint[]{1329}, - new uint[]{1272}, - new uint[]{1272}, - new uint[]{1272}, - new uint[]{1273}, - new uint[]{1273}, - new uint[]{1273}, - new uint[]{1274}, - new uint[]{1274}, - new uint[]{1275}, - new uint[]{1275}, - new uint[]{1275}, - new uint[]{1276}, - new uint[]{1277}, - new uint[]{1277}, - new uint[]{1277}, - new uint[]{1277}, - new uint[]{1255}, - new uint[]{1252}, - new uint[]{1253}, - new uint[]{1254}, - new uint[]{1243}, - new uint[]{1242}, - new uint[]{1239}, - new uint[]{1239}, - new uint[]{1239}, - new uint[]{1240}, - new uint[]{1239}, - new uint[]{1239}, - new uint[]{1239}, - new uint[]{1239}, - new uint[]{1239}, - new uint[]{1239}, - new uint[]{1240}, - new uint[]{1240}, - new uint[]{1238}, - new uint[]{1372}, - new uint[]{1234}, - Array.Empty(), - new uint[]{1263}, - Array.Empty(), - new uint[]{405}, - new uint[]{1261}, - new uint[]{1260}, - new uint[]{1259}, - new uint[]{6}, - new uint[]{1043}, - Array.Empty(), - Array.Empty(), - new uint[]{402}, - new uint[]{1258}, - Array.Empty(), - new uint[]{1257}, - new uint[]{289}, - new uint[]{1008}, - new uint[]{1009}, - new uint[]{1010}, - new uint[]{1011}, - new uint[]{1012}, - new uint[]{1013}, - new uint[]{1015}, - new uint[]{1014}, - new uint[]{479}, - new uint[]{1016}, - new uint[]{1024}, - new uint[]{1039, 1122}, - new uint[]{1047}, - new uint[]{1052}, - new uint[]{1053}, - new uint[]{1054}, - new uint[]{1055}, - new uint[]{1056}, - new uint[]{1057}, - new uint[]{1058}, - new uint[]{1059}, - new uint[]{1061}, - new uint[]{1062}, - new uint[]{479}, - new uint[]{1060}, - new uint[]{1092}, - new uint[]{1079}, - new uint[]{1075}, - new uint[]{117}, - new uint[]{1175}, - new uint[]{1174}, - new uint[]{1099}, - new uint[]{934}, - new uint[]{933}, - new uint[]{933}, - new uint[]{933}, - new uint[]{1304}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{531}, - new uint[]{539}, - new uint[]{621}, - new uint[]{751}, - new uint[]{751}, - new uint[]{751}, - new uint[]{887}, - new uint[]{1377}, - new uint[]{1547}, - new uint[]{942}, - new uint[]{938}, - new uint[]{936}, - new uint[]{935}, - new uint[]{713}, - new uint[]{35}, - new uint[]{949}, - new uint[]{974}, - new uint[]{973}, - new uint[]{970}, - new uint[]{970}, - new uint[]{972}, - new uint[]{971}, - new uint[]{945}, - new uint[]{980}, - new uint[]{617}, - new uint[]{541}, - new uint[]{941}, - new uint[]{940}, - new uint[]{1374}, - new uint[]{404}, - new uint[]{1373}, - new uint[]{978}, - new uint[]{977}, - new uint[]{836}, - new uint[]{982}, - new uint[]{981}, - new uint[]{981}, - new uint[]{729}, - new uint[]{975}, - new uint[]{976}, - new uint[]{945}, - new uint[]{980}, - new uint[]{617}, - new uint[]{1556}, - new uint[]{619}, - new uint[]{620}, - new uint[]{948}, - new uint[]{517}, - new uint[]{946}, - new uint[]{193}, - new uint[]{194}, - new uint[]{947}, - new uint[]{945}, - new uint[]{980}, - new uint[]{617}, - new uint[]{1550}, - new uint[]{752}, - new uint[]{945}, - new uint[]{811}, - new uint[]{812}, - new uint[]{813}, - new uint[]{814}, - new uint[]{815}, - new uint[]{816}, - new uint[]{817}, - new uint[]{818}, - new uint[]{1209}, - new uint[]{1532}, - new uint[]{716}, - new uint[]{983}, - new uint[]{985}, - new uint[]{555}, - new uint[]{554}, - new uint[]{554}, - new uint[]{554}, - new uint[]{554}, - new uint[]{780}, - new uint[]{1378}, - new uint[]{1381}, - new uint[]{1380}, - new uint[]{1277}, - new uint[]{827}, - Array.Empty(), - new uint[]{1306}, - new uint[]{991}, - new uint[]{989}, - new uint[]{990}, - new uint[]{993}, - new uint[]{994}, - new uint[]{1007}, - new uint[]{1005}, - new uint[]{992}, - new uint[]{256}, - new uint[]{251}, - new uint[]{248}, - new uint[]{1187}, - new uint[]{1195}, - new uint[]{1194}, - new uint[]{117}, - new uint[]{1196}, - new uint[]{1187}, - new uint[]{1195}, - new uint[]{116}, - new uint[]{1197}, - new uint[]{1193}, - new uint[]{346}, - new uint[]{344}, - new uint[]{342}, - new uint[]{348}, - new uint[]{346}, - Array.Empty(), - new uint[]{342}, - new uint[]{348}, - new uint[]{1279}, - new uint[]{1284}, - new uint[]{1285}, - new uint[]{824}, - new uint[]{826}, - new uint[]{906}, - new uint[]{833}, - new uint[]{834}, - new uint[]{824}, - new uint[]{835}, - new uint[]{824}, - new uint[]{838}, - new uint[]{839}, - new uint[]{1314}, - new uint[]{837}, - new uint[]{1221}, - new uint[]{1343}, - new uint[]{342}, - new uint[]{968}, - new uint[]{1398}, - new uint[]{1399}, - new uint[]{8141}, - Array.Empty(), - new uint[]{1401}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{269}, - new uint[]{1001}, - new uint[]{1176}, - new uint[]{999}, - new uint[]{996}, - new uint[]{998}, - new uint[]{997}, - new uint[]{995}, - new uint[]{994}, - new uint[]{1006}, - new uint[]{1005}, - new uint[]{1267}, - new uint[]{1268}, - Array.Empty(), - new uint[]{1003}, - new uint[]{1002}, - new uint[]{1004}, - new uint[]{346}, - new uint[]{344}, - new uint[]{342}, - new uint[]{348}, - new uint[]{38}, - new uint[]{1210}, - new uint[]{1211}, - new uint[]{1212}, - new uint[]{1287}, - new uint[]{1288}, - new uint[]{1289}, - new uint[]{1290}, - new uint[]{1292}, - new uint[]{1291}, - new uint[]{1293}, - new uint[]{1294}, - new uint[]{1295}, - new uint[]{1296}, - new uint[]{1297}, - new uint[]{1548}, - new uint[]{1549}, - new uint[]{1551}, - new uint[]{1552}, - new uint[]{1553}, - new uint[]{1554}, - new uint[]{1555}, - Array.Empty(), - new uint[]{1566}, - new uint[]{1557}, - new uint[]{1558}, - new uint[]{1559}, - new uint[]{1383}, - new uint[]{1205}, - new uint[]{1205}, - Array.Empty(), - Array.Empty(), - new uint[]{346}, - new uint[]{1560}, - new uint[]{1561}, - new uint[]{1562}, - new uint[]{1563}, - Array.Empty(), - new uint[]{1565}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{891}, - new uint[]{888}, - new uint[]{889}, - new uint[]{890}, - new uint[]{1154}, - new uint[]{1169}, - new uint[]{1165}, - new uint[]{1160}, - new uint[]{1143}, - new uint[]{1133}, - new uint[]{1159}, - new uint[]{1073}, - new uint[]{1137}, - new uint[]{1127}, - new uint[]{1126}, - new uint[]{1109}, - new uint[]{1108}, - new uint[]{1110}, - new uint[]{1105}, - new uint[]{1166}, - new uint[]{1033, 1088}, - new uint[]{1167}, - new uint[]{1151}, - new uint[]{1150}, - new uint[]{542}, - new uint[]{1144}, - new uint[]{1136}, - new uint[]{497}, - new uint[]{1129}, - new uint[]{1128}, - new uint[]{1125}, - new uint[]{1124}, - new uint[]{1107}, - new uint[]{1106}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{200}, - new uint[]{1037}, - new uint[]{1264}, - new uint[]{1262}, - new uint[]{1262}, - new uint[]{1265}, - new uint[]{1266}, - new uint[]{1269}, - new uint[]{1270}, - new uint[]{116}, - Array.Empty(), - Array.Empty(), - new uint[]{1367, 1584}, - Array.Empty(), - Array.Empty(), - new uint[]{1584}, - new uint[]{1584}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1584}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{621}, - new uint[]{1861}, - new uint[]{981, 1337}, - new uint[]{981}, - new uint[]{1273, 1331, 1332, 1868}, - new uint[]{892, 1332, 1868}, - new uint[]{1277}, - new uint[]{1277}, - new uint[]{1277}, - new uint[]{1277}, - Array.Empty(), - new uint[]{1275, 1343, 1371, 1711, 1733}, - new uint[]{1275, 1343, 1371}, - new uint[]{1275, 1371}, - Array.Empty(), - new uint[]{1584}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1584, 1856}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1341, 1584}, - new uint[]{1711}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{526}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1729}, - Array.Empty(), - new uint[]{904, 981}, - Array.Empty(), - new uint[]{981, 1338}, - Array.Empty(), - new uint[]{1359}, - new uint[]{903, 1273}, - Array.Empty(), - new uint[]{1273}, - new uint[]{1277}, - new uint[]{1277}, - new uint[]{1277}, - new uint[]{1277}, - new uint[]{1277}, - new uint[]{1277}, - Array.Empty(), - Array.Empty(), - new uint[]{1275, 1343}, - new uint[]{1275, 1371}, - new uint[]{1275, 1371}, - new uint[]{1275, 1371}, - Array.Empty(), - Array.Empty(), - new uint[]{1320, 1328, 1334, 1355, 1358, 1659}, - new uint[]{519}, - new uint[]{1352, 1356}, - new uint[]{1324}, - new uint[]{1336, 1339, 1340, 1361, 1867}, - new uint[]{1321, 1335, 1363, 1370}, - new uint[]{1322, 1323}, - new uint[]{1322, 1351, 1711}, - Array.Empty(), - new uint[]{2175}, - new uint[]{849}, - new uint[]{850}, - new uint[]{851}, - new uint[]{852}, - new uint[]{853}, - new uint[]{854}, - new uint[]{855}, - new uint[]{856}, - new uint[]{857}, - new uint[]{858}, - new uint[]{859}, - new uint[]{860}, - new uint[]{861}, - new uint[]{862}, - Array.Empty(), - Array.Empty(), - new uint[]{1177}, - new uint[]{1213}, - new uint[]{1304}, - new uint[]{929}, - new uint[]{974}, - new uint[]{1305}, - new uint[]{1177}, - new uint[]{923}, - new uint[]{1179}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{108}, - new uint[]{2971}, - new uint[]{895}, - Array.Empty(), - new uint[]{1319}, - Array.Empty(), - new uint[]{896}, - new uint[]{897}, - Array.Empty(), - new uint[]{898}, - new uint[]{899}, - new uint[]{865}, - new uint[]{866}, - new uint[]{867}, - new uint[]{868}, - new uint[]{869}, - new uint[]{870}, - new uint[]{871}, - new uint[]{872}, - new uint[]{873}, - new uint[]{874}, - new uint[]{875}, - new uint[]{876}, - new uint[]{877}, - new uint[]{878}, - new uint[]{879}, - new uint[]{880}, - new uint[]{881}, - new uint[]{882}, - new uint[]{883}, - new uint[]{884}, - new uint[]{885}, - new uint[]{886}, - new uint[]{1333, 1369, 1660, 1720, 1723, 1867}, - new uint[]{520, 1711}, - Array.Empty(), - Array.Empty(), - new uint[]{900, 1730}, - new uint[]{1347}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1325}, - new uint[]{1348}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1172}, - new uint[]{1171}, - Array.Empty(), - new uint[]{1237}, - new uint[]{1241}, - new uint[]{1256}, - new uint[]{1244}, - new uint[]{1251}, - new uint[]{1245}, - new uint[]{1246}, - new uint[]{1250}, - new uint[]{1249}, - new uint[]{1248}, - new uint[]{1247}, - new uint[]{346}, - new uint[]{344}, - new uint[]{346}, - new uint[]{344}, - new uint[]{344}, - new uint[]{344}, - new uint[]{969}, - new uint[]{1232}, - new uint[]{1231}, - new uint[]{1225}, - new uint[]{1230}, - new uint[]{1229}, - new uint[]{1228}, - new uint[]{1227}, - new uint[]{1226}, - new uint[]{1225}, - new uint[]{1589}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{1345}, - new uint[]{1278}, - new uint[]{1245}, - new uint[]{1330}, - new uint[]{109}, - new uint[]{143}, - new uint[]{144}, - new uint[]{145}, - new uint[]{146}, - new uint[]{111}, - new uint[]{284}, - new uint[]{147}, - new uint[]{151}, - new uint[]{153}, - new uint[]{441}, - new uint[]{158}, - new uint[]{438}, - new uint[]{117}, - new uint[]{154}, - new uint[]{155}, - new uint[]{157}, - new uint[]{430}, - new uint[]{431}, - new uint[]{432}, - new uint[]{433}, - new uint[]{434}, - new uint[]{435}, - new uint[]{625}, - new uint[]{1202}, - new uint[]{1203}, - new uint[]{1200}, - new uint[]{1201}, - new uint[]{918}, - new uint[]{919}, - new uint[]{920}, - new uint[]{921}, - new uint[]{922}, - new uint[]{1326}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1271}, - new uint[]{1331}, - new uint[]{908, 1178}, - new uint[]{833}, - Array.Empty(), - new uint[]{497}, - new uint[]{967}, - new uint[]{629}, - new uint[]{631}, - new uint[]{117}, - new uint[]{97}, - new uint[]{984}, - new uint[]{1303}, - new uint[]{987}, - new uint[]{986}, - new uint[]{1302}, - new uint[]{1357}, - new uint[]{1362}, - new uint[]{1223}, - new uint[]{1224}, - new uint[]{894}, - Array.Empty(), - new uint[]{1188}, - new uint[]{1189}, - new uint[]{1190}, - new uint[]{1191}, - new uint[]{1192}, - new uint[]{1193}, - new uint[]{117}, - new uint[]{1276}, - new uint[]{1346}, - new uint[]{1312}, - new uint[]{1608}, - new uint[]{1342}, - new uint[]{621}, - new uint[]{622}, - new uint[]{1354}, - new uint[]{1704}, - new uint[]{193}, - new uint[]{194}, - new uint[]{602}, - new uint[]{602}, - new uint[]{601}, - new uint[]{139}, - new uint[]{140}, - new uint[]{212}, - new uint[]{2163}, - new uint[]{130}, - new uint[]{108}, - new uint[]{2135}, - new uint[]{2118}, - new uint[]{2160}, - Array.Empty(), - new uint[]{2136}, - new uint[]{1471}, - new uint[]{1803}, - new uint[]{1804}, - new uint[]{244}, - new uint[]{128}, - new uint[]{354}, - new uint[]{1907}, - new uint[]{139}, - new uint[]{599}, - new uint[]{597}, - new uint[]{35}, - new uint[]{192}, - new uint[]{517}, - new uint[]{1680}, - new uint[]{1680}, - new uint[]{1678}, - new uint[]{1678}, - new uint[]{108}, - new uint[]{1676}, - new uint[]{1677}, - new uint[]{1672}, - new uint[]{1673}, - new uint[]{1674}, - new uint[]{114}, - new uint[]{1675}, - new uint[]{1535}, - new uint[]{1536}, - Array.Empty(), - new uint[]{1533}, - new uint[]{1534}, - new uint[]{1538}, - new uint[]{1535}, - new uint[]{1539}, - new uint[]{1540}, - new uint[]{1541}, - new uint[]{1542}, - new uint[]{1543}, - new uint[]{1544}, - new uint[]{1545}, - new uint[]{1546}, - new uint[]{108}, - Array.Empty(), - new uint[]{1696}, - new uint[]{1697}, - new uint[]{1698}, - Array.Empty(), - new uint[]{1689}, - new uint[]{1690}, - new uint[]{1691}, - new uint[]{1692}, - new uint[]{1693}, - new uint[]{1681}, - new uint[]{1681}, - new uint[]{1681}, - new uint[]{1681}, - new uint[]{1682}, - new uint[]{1683}, - new uint[]{1684}, - new uint[]{1685}, - new uint[]{1686}, - new uint[]{1687}, - new uint[]{29}, - new uint[]{1803}, - new uint[]{1804}, - new uint[]{1804}, - new uint[]{1802}, - new uint[]{1802}, - new uint[]{1802}, - new uint[]{1566}, - new uint[]{1566}, - new uint[]{1566}, - new uint[]{1402}, - new uint[]{1640}, - new uint[]{1970}, - new uint[]{2104}, - new uint[]{1883}, - new uint[]{1884}, - new uint[]{1885}, - new uint[]{1531, 2147}, - new uint[]{1886}, - new uint[]{1650}, - new uint[]{1613}, - new uint[]{1887}, - new uint[]{1888}, - new uint[]{2147}, - new uint[]{1889}, - new uint[]{1650}, - new uint[]{1650}, - new uint[]{2146}, - new uint[]{1890}, - new uint[]{1890}, - new uint[]{108}, - Array.Empty(), - new uint[]{1648}, - new uint[]{2091}, - new uint[]{1648}, - Array.Empty(), - new uint[]{108}, - new uint[]{1397}, - new uint[]{1397}, - new uint[]{1497}, - new uint[]{1498}, - new uint[]{1415}, - new uint[]{1499}, - new uint[]{1396}, - new uint[]{2154}, - new uint[]{2154}, - new uint[]{1657}, - new uint[]{2152}, - new uint[]{1654}, - new uint[]{1655}, - new uint[]{1656}, - new uint[]{1652}, - new uint[]{1449}, - new uint[]{1653}, - new uint[]{1808}, - new uint[]{1421}, - new uint[]{1892}, - new uint[]{1893}, - new uint[]{1894}, - new uint[]{1895}, - Array.Empty(), - new uint[]{1897}, - new uint[]{1805}, - new uint[]{1646}, - new uint[]{1645}, - new uint[]{1646}, - new uint[]{1645}, - new uint[]{1644}, - new uint[]{1644}, - new uint[]{1644}, - new uint[]{1644}, - new uint[]{1644}, - new uint[]{2100}, - new uint[]{2098}, - new uint[]{2099}, - new uint[]{1453}, - new uint[]{2101}, - new uint[]{2102}, - new uint[]{2103}, - new uint[]{583}, - new uint[]{68}, - new uint[]{69}, - new uint[]{2063}, - new uint[]{619}, - new uint[]{620}, - new uint[]{1391}, - new uint[]{1392}, - new uint[]{1393}, - new uint[]{1394}, - new uint[]{1639}, - new uint[]{750}, - new uint[]{1395}, - new uint[]{436}, - new uint[]{103}, - new uint[]{104}, - new uint[]{1901}, - new uint[]{653}, - new uint[]{1416}, - new uint[]{2204}, - new uint[]{1903}, - new uint[]{1904}, - new uint[]{1905}, - new uint[]{1906}, - new uint[]{1585}, - new uint[]{1586}, - new uint[]{1587}, - new uint[]{1588}, - new uint[]{1589}, - new uint[]{1589}, - new uint[]{1590}, - new uint[]{1848}, - Array.Empty(), - new uint[]{1592}, - new uint[]{1591}, - new uint[]{1593}, - new uint[]{1799}, - new uint[]{1596}, - new uint[]{1597}, - new uint[]{1595}, - new uint[]{1594}, - new uint[]{1599}, - new uint[]{1598}, - new uint[]{1600}, - new uint[]{1601}, - Array.Empty(), - new uint[]{1806}, - new uint[]{1805}, - new uint[]{1805}, - new uint[]{1858}, - new uint[]{1417}, - new uint[]{2201}, - new uint[]{2201}, - new uint[]{598}, - new uint[]{1907}, - new uint[]{550}, - new uint[]{614}, - new uint[]{2064}, - new uint[]{122}, - new uint[]{139}, - new uint[]{546}, - new uint[]{2065}, - new uint[]{2066}, - new uint[]{57}, - new uint[]{80}, - new uint[]{2200}, - new uint[]{2199}, - new uint[]{2198}, - new uint[]{619}, - new uint[]{729}, - new uint[]{2087}, - new uint[]{2088}, - new uint[]{1810}, - new uint[]{2089}, - new uint[]{1418}, - new uint[]{269}, - new uint[]{67}, - new uint[]{115}, - new uint[]{1910}, - new uint[]{1419}, - new uint[]{1420}, - new uint[]{1421}, - new uint[]{1911}, - new uint[]{1912}, - new uint[]{1582, 1605, 1847}, - Array.Empty(), - new uint[]{1581}, - new uint[]{1603}, - new uint[]{1582}, - Array.Empty(), - new uint[]{1581}, - new uint[]{1603}, - new uint[]{11}, - new uint[]{1422}, - new uint[]{1423}, - new uint[]{40}, - new uint[]{130}, - new uint[]{56}, - new uint[]{201}, - new uint[]{56}, - new uint[]{1424}, - new uint[]{1919}, - new uint[]{1920}, - new uint[]{1921}, - new uint[]{113}, - new uint[]{1923}, - new uint[]{1419}, - new uint[]{1425}, - new uint[]{1426}, - new uint[]{115}, - new uint[]{117}, - new uint[]{56}, - new uint[]{1924}, - new uint[]{1925}, - new uint[]{1926}, - new uint[]{2161}, - new uint[]{656}, - new uint[]{2162}, - new uint[]{1848}, - new uint[]{1927}, - new uint[]{1450}, - new uint[]{213}, - new uint[]{1451}, - new uint[]{1929}, - new uint[]{1422}, - new uint[]{1423}, - new uint[]{1452}, - new uint[]{1930}, - new uint[]{1424}, - new uint[]{1453}, - new uint[]{1931}, - new uint[]{2096}, - new uint[]{1932}, - new uint[]{1933}, - new uint[]{2153}, - new uint[]{1907}, - new uint[]{1935}, - new uint[]{1936}, - new uint[]{1937}, - new uint[]{361}, - new uint[]{1939}, - new uint[]{824}, - new uint[]{1391}, - new uint[]{1863}, - new uint[]{2186}, - new uint[]{2186}, - new uint[]{1941}, - new uint[]{2068}, - new uint[]{2202}, - new uint[]{2076}, - new uint[]{2077}, - new uint[]{2078}, - new uint[]{2079}, - new uint[]{1454}, - new uint[]{2080}, - new uint[]{656}, - new uint[]{2082}, - new uint[]{2081}, - new uint[]{1688}, - new uint[]{1942}, - new uint[]{15}, - new uint[]{56}, - new uint[]{116}, - new uint[]{614}, - new uint[]{2083}, - new uint[]{2084}, - new uint[]{1293}, - new uint[]{656}, - new uint[]{2085}, - new uint[]{2086}, - new uint[]{2086}, - new uint[]{1567}, - new uint[]{1568}, - new uint[]{1569}, - new uint[]{1570}, - new uint[]{1798}, - new uint[]{1572}, - new uint[]{1573}, - Array.Empty(), - new uint[]{1571}, - new uint[]{1574}, - new uint[]{1575}, - new uint[]{1576}, - new uint[]{1577}, - new uint[]{1578}, - new uint[]{1579}, - new uint[]{1580}, - new uint[]{2073}, - new uint[]{2074}, - new uint[]{2075}, - new uint[]{1385}, - new uint[]{1581}, - new uint[]{1582}, - new uint[]{1583}, - new uint[]{1584}, - new uint[]{1584}, - new uint[]{1584}, - new uint[]{1607}, - new uint[]{1427}, - new uint[]{1428}, - new uint[]{1429}, - new uint[]{1430}, - new uint[]{1431}, - new uint[]{1432}, - new uint[]{1433}, - new uint[]{1434}, - new uint[]{1435}, - new uint[]{1436}, - new uint[]{1437}, - new uint[]{1438}, - new uint[]{1439}, - new uint[]{1440}, - new uint[]{1445}, - new uint[]{1441}, - new uint[]{1442}, - new uint[]{1443}, - new uint[]{1444}, - new uint[]{1610}, - new uint[]{1446}, - new uint[]{1614}, - new uint[]{1615}, - new uint[]{1616}, - new uint[]{1617}, - new uint[]{1618}, - new uint[]{1619}, - new uint[]{1620}, - new uint[]{1621}, - new uint[]{1622}, - new uint[]{1623}, - new uint[]{1624}, - new uint[]{1625}, - new uint[]{646}, - new uint[]{647}, - new uint[]{648}, - new uint[]{1629}, - new uint[]{1630}, - new uint[]{1631}, - new uint[]{1632}, - new uint[]{1633}, - new uint[]{1634}, - new uint[]{1635}, - new uint[]{1636}, - new uint[]{1637}, - new uint[]{1638}, - new uint[]{1796}, - new uint[]{1797}, - new uint[]{1734}, - new uint[]{1734}, - new uint[]{1734}, - new uint[]{1747}, - new uint[]{1750}, - new uint[]{1752}, - new uint[]{1763}, - new uint[]{1764}, - new uint[]{1765}, - new uint[]{1767}, - new uint[]{1766}, - new uint[]{1773}, - new uint[]{1776}, - new uint[]{1778}, - new uint[]{114}, - new uint[]{1777}, - new uint[]{1783}, - new uint[]{491}, - new uint[]{1789}, - new uint[]{1638}, - new uint[]{1631}, - new uint[]{1787}, - new uint[]{117}, - new uint[]{1762}, - new uint[]{1770}, - new uint[]{1779}, - new uint[]{1786}, - new uint[]{1793}, - new uint[]{1792}, - new uint[]{1794}, - new uint[]{1232}, - new uint[]{1795}, - new uint[]{1170}, - new uint[]{115}, - new uint[]{1148}, - new uint[]{113}, - new uint[]{1609}, - new uint[]{2105}, - new uint[]{2106}, - new uint[]{2107, 2120}, - new uint[]{2108}, - new uint[]{2109}, - new uint[]{2110}, - new uint[]{2111}, - new uint[]{2159}, - new uint[]{1810}, - new uint[]{1811}, - new uint[]{1812}, - new uint[]{1486}, - new uint[]{2092}, - new uint[]{2113}, - new uint[]{269}, - Array.Empty(), - new uint[]{2114}, - new uint[]{557}, - new uint[]{2116}, - new uint[]{2117}, - new uint[]{2206}, - new uint[]{1975}, - new uint[]{1976}, - new uint[]{34}, - new uint[]{1977}, - new uint[]{1978}, - new uint[]{1979}, - new uint[]{1980}, - Array.Empty(), - new uint[]{1982}, - new uint[]{58}, - new uint[]{59}, - new uint[]{60}, - new uint[]{61}, - new uint[]{1985}, - new uint[]{1986}, - Array.Empty(), - new uint[]{1988}, - Array.Empty(), - new uint[]{1991}, - new uint[]{331}, - new uint[]{333}, - new uint[]{332}, - new uint[]{1996}, - new uint[]{2001}, - new uint[]{2002}, - new uint[]{2003}, - new uint[]{2004}, - new uint[]{2005}, - new uint[]{2006}, - new uint[]{2007}, - new uint[]{236}, - new uint[]{2010}, - new uint[]{2013}, - new uint[]{2014}, - new uint[]{2015}, - new uint[]{2016}, - new uint[]{2017}, - new uint[]{2022}, - new uint[]{2023}, - new uint[]{2024}, - new uint[]{2025}, - new uint[]{2026}, - new uint[]{2029}, - new uint[]{2030}, - new uint[]{2031}, - new uint[]{2034}, - new uint[]{2035}, - new uint[]{2036}, - new uint[]{2037}, - new uint[]{2041}, - new uint[]{2042}, - new uint[]{2043}, - new uint[]{2043, 2044}, - new uint[]{2045}, - new uint[]{2046}, - new uint[]{2047}, - new uint[]{2048}, - new uint[]{2051}, - new uint[]{2051}, - new uint[]{2051}, - new uint[]{2052}, - new uint[]{2053}, - new uint[]{2054}, - new uint[]{2055}, - new uint[]{2115}, - new uint[]{2123}, - new uint[]{2106, 2124}, - new uint[]{2125}, - new uint[]{2126}, - new uint[]{2109, 2127}, - new uint[]{2128}, - new uint[]{2129}, - new uint[]{2089}, - new uint[]{2113}, - new uint[]{2205}, - new uint[]{1727}, - new uint[]{1946}, - new uint[]{2149}, - new uint[]{104}, - new uint[]{105}, - new uint[]{2089}, - new uint[]{2130}, - Array.Empty(), - new uint[]{2131}, - new uint[]{2132}, - new uint[]{2133}, - new uint[]{2134}, - new uint[]{2121}, - new uint[]{2137}, - new uint[]{2137}, - new uint[]{2143}, - new uint[]{2067}, - new uint[]{253}, - Array.Empty(), - new uint[]{245}, - new uint[]{1126}, - new uint[]{2069}, - new uint[]{2070}, - new uint[]{2071}, - new uint[]{2072}, - new uint[]{2072}, - new uint[]{1486}, - new uint[]{2092}, - new uint[]{2088}, - new uint[]{1811}, - new uint[]{1809}, - new uint[]{2090}, - Array.Empty(), - Array.Empty(), - new uint[]{1486}, - new uint[]{2208, 2209}, - new uint[]{1464}, - new uint[]{1461}, - Array.Empty(), - new uint[]{2174}, - new uint[]{1479}, - new uint[]{1481}, - new uint[]{1463}, - new uint[]{1480}, - new uint[]{1462}, - new uint[]{1465}, - new uint[]{1466}, - new uint[]{1467}, - new uint[]{1459}, - new uint[]{1468}, - new uint[]{1469}, - new uint[]{1470}, - new uint[]{1471}, - new uint[]{1472}, - new uint[]{1473}, - new uint[]{1474}, - new uint[]{1475}, - new uint[]{1477}, - new uint[]{1476}, - new uint[]{1478}, - new uint[]{1482}, - new uint[]{2171}, - new uint[]{2176}, - new uint[]{1483}, - new uint[]{1484}, - new uint[]{1485}, - new uint[]{2118}, - new uint[]{2119}, - new uint[]{2120}, - new uint[]{2158}, - new uint[]{297}, - new uint[]{2136}, - new uint[]{108}, - new uint[]{2170}, - new uint[]{2210}, - new uint[]{2138}, - new uint[]{2142}, - new uint[]{2139}, - new uint[]{2140}, - new uint[]{2141}, - new uint[]{108}, - new uint[]{1490}, - new uint[]{108}, - new uint[]{620}, - new uint[]{1492}, - new uint[]{1949}, - new uint[]{1950}, - new uint[]{1493}, - new uint[]{1400}, - new uint[]{1951}, - new uint[]{1952}, - new uint[]{1953}, - new uint[]{1494}, - new uint[]{1495}, - new uint[]{1493}, - new uint[]{1400}, - new uint[]{1954}, - new uint[]{1955}, - new uint[]{1956}, - new uint[]{1957}, - new uint[]{1496}, - new uint[]{1400}, - new uint[]{1494}, - new uint[]{1495}, - new uint[]{1958}, - new uint[]{1958}, - new uint[]{1960}, - new uint[]{1961}, - new uint[]{1962}, - new uint[]{1963}, - new uint[]{1951}, - new uint[]{1952}, - new uint[]{1954}, - new uint[]{1967}, - new uint[]{1493}, - new uint[]{1400}, - new uint[]{1501}, - new uint[]{1968}, - new uint[]{1969}, - new uint[]{1500}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1994}, - new uint[]{417}, - new uint[]{678}, - new uint[]{270}, - new uint[]{2009}, - new uint[]{637}, - new uint[]{346}, - new uint[]{342}, - Array.Empty(), - new uint[]{347}, - Array.Empty(), - Array.Empty(), - new uint[]{345}, - new uint[]{2181}, - new uint[]{1862}, - new uint[]{1714}, - new uint[]{1716}, - new uint[]{1718}, - new uint[]{1721}, - new uint[]{1722}, - new uint[]{1604}, - new uint[]{1724}, - Array.Empty(), - new uint[]{1707}, - new uint[]{248}, - new uint[]{260}, - new uint[]{1710}, - new uint[]{343}, - new uint[]{1661}, - new uint[]{1662}, - new uint[]{1663}, - new uint[]{1664}, - new uint[]{1665}, - new uint[]{1666}, - new uint[]{1667}, - new uint[]{1668}, - new uint[]{1669}, - new uint[]{1670}, - Array.Empty(), - new uint[]{1503}, - new uint[]{1504}, - new uint[]{1505}, - new uint[]{257}, - new uint[]{1506}, - new uint[]{1699}, - new uint[]{1507}, - new uint[]{1508}, - new uint[]{1509}, - Array.Empty(), - new uint[]{1511}, - new uint[]{1512}, - new uint[]{1513}, - new uint[]{1514}, - new uint[]{1515}, - new uint[]{1516}, - new uint[]{1517}, - new uint[]{1700}, - new uint[]{1701}, - new uint[]{1518}, - new uint[]{1519}, - new uint[]{1520}, - new uint[]{1521}, - new uint[]{1522}, - new uint[]{1523}, - new uint[]{1524}, - new uint[]{1702}, - new uint[]{1525}, - new uint[]{1526}, - new uint[]{1527}, - Array.Empty(), - new uint[]{1529}, - new uint[]{1530}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{1717, 2172}, - new uint[]{1713}, - new uint[]{1715}, - new uint[]{1712}, - new uint[]{1726}, - new uint[]{2093}, - new uint[]{1811}, - new uint[]{1813}, - new uint[]{1418}, - new uint[]{1502}, - new uint[]{2095}, - new uint[]{2090}, - new uint[]{1809}, - new uint[]{2089}, - new uint[]{297}, - new uint[]{2094}, - new uint[]{2093}, - Array.Empty(), - Array.Empty(), - new uint[]{1459}, - new uint[]{1460}, - new uint[]{1469}, - new uint[]{1472}, - new uint[]{1992}, - new uint[]{1993}, - new uint[]{1995}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{2057}, - Array.Empty(), - new uint[]{2059}, - new uint[]{2060}, - new uint[]{2061}, - new uint[]{2062}, - Array.Empty(), - new uint[]{2197}, - new uint[]{108}, - new uint[]{2196}, - new uint[]{1403}, - new uint[]{1882}, - new uint[]{1971}, - new uint[]{2211}, - new uint[]{1881}, - new uint[]{1640}, - new uint[]{1404}, - new uint[]{2203}, - new uint[]{1640}, - new uint[]{1972}, - new uint[]{1973}, - new uint[]{1681, 1870}, - new uint[]{1681, 1870}, - new uint[]{1681, 1870}, - new uint[]{1681, 1690, 1870}, - new uint[]{1651}, - new uint[]{2148}, - new uint[]{1640}, - new uint[]{1732}, - new uint[]{1848}, - new uint[]{399}, - new uint[]{67}, - new uint[]{68}, - new uint[]{69}, - Array.Empty(), - new uint[]{2144}, - new uint[]{2145}, - new uint[]{2168}, - new uint[]{1870}, - Array.Empty(), - Array.Empty(), - new uint[]{2183}, - new uint[]{1855}, - new uint[]{1974}, - new uint[]{1860}, - new uint[]{331}, - new uint[]{417}, - new uint[]{678}, - new uint[]{43}, - new uint[]{680}, - new uint[]{681}, - new uint[]{630}, - new uint[]{2097}, - new uint[]{2164}, - new uint[]{2185}, - new uint[]{2092}, - new uint[]{297}, - new uint[]{2121}, - new uint[]{2092}, - new uint[]{297}, - new uint[]{2121}, - new uint[]{2092}, - new uint[]{2089}, - new uint[]{2121}, - new uint[]{1984}, - new uint[]{1984}, - new uint[]{1998}, - new uint[]{1999}, - new uint[]{2180}, - Array.Empty(), - Array.Empty(), - new uint[]{2187}, - new uint[]{2188}, - new uint[]{2189}, - new uint[]{2190}, - new uint[]{2191}, - new uint[]{2192}, - new uint[]{1468}, - new uint[]{1470}, - new uint[]{1472}, - new uint[]{1473}, - new uint[]{1459}, - new uint[]{1459}, - new uint[]{2105}, - new uint[]{2109}, - new uint[]{2110}, - new uint[]{2106}, - new uint[]{2111}, - new uint[]{1382}, - new uint[]{1474}, - new uint[]{1482}, - new uint[]{1472}, - new uint[]{2212}, - new uint[]{108, 1482, 3234, 3240}, - new uint[]{2265}, - new uint[]{2266}, - new uint[]{2513}, - new uint[]{2325}, - new uint[]{108, 750, 9380}, - new uint[]{2261}, - new uint[]{2262}, - new uint[]{2263}, - new uint[]{2267}, - new uint[]{2267}, - new uint[]{2261}, - new uint[]{108}, - new uint[]{2259}, - new uint[]{2260}, - new uint[]{2256}, - new uint[]{2252}, - new uint[]{2251}, - new uint[]{2245}, - new uint[]{2249}, - new uint[]{2257}, - new uint[]{3984, 6290}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{1185}, - new uint[]{2246}, - new uint[]{2247}, - new uint[]{2248}, - new uint[]{2250}, - new uint[]{2255}, - new uint[]{2253}, - new uint[]{2137}, - new uint[]{2139}, - new uint[]{2140}, - new uint[]{2141}, - new uint[]{2138}, - new uint[]{2324}, - new uint[]{2142}, - Array.Empty(), - new uint[]{2254}, - new uint[]{2264}, - new uint[]{2258}, - new uint[]{2256}, - new uint[]{1186}, - new uint[]{2268}, - new uint[]{2269}, - new uint[]{2270}, - new uint[]{2271}, - new uint[]{2272}, - new uint[]{2273}, - new uint[]{2274}, - new uint[]{2275}, - new uint[]{2276}, - new uint[]{2277}, - new uint[]{2278}, - new uint[]{2279}, - new uint[]{2280}, - new uint[]{2281}, - Array.Empty(), - new uint[]{706}, - new uint[]{706}, - new uint[]{707}, - new uint[]{710}, - new uint[]{710}, - new uint[]{711}, - new uint[]{712}, - new uint[]{727}, - new uint[]{727}, - new uint[]{728}, - new uint[]{730}, - new uint[]{731}, - new uint[]{2510}, - new uint[]{732}, - new uint[]{732}, - new uint[]{733}, - new uint[]{108}, - new uint[]{2370}, - new uint[]{2371}, - new uint[]{2371}, - new uint[]{2333}, - new uint[]{2334}, - new uint[]{2335}, - new uint[]{428}, - Array.Empty(), - new uint[]{2337}, - new uint[]{2338}, - new uint[]{2339}, - new uint[]{2282}, - new uint[]{2283}, - new uint[]{2283}, - new uint[]{2283}, - new uint[]{983}, - new uint[]{2284}, - new uint[]{2285}, - new uint[]{2286}, - new uint[]{1303}, - new uint[]{2287}, - new uint[]{2288}, - new uint[]{2289}, - new uint[]{2290}, - new uint[]{2290}, - new uint[]{2281}, - new uint[]{2332}, - new uint[]{2332}, - new uint[]{736}, - new uint[]{737}, - new uint[]{738}, - new uint[]{739}, - new uint[]{740}, - new uint[]{741}, - new uint[]{820}, - new uint[]{821}, - new uint[]{822}, - new uint[]{1864}, - new uint[]{1871}, - new uint[]{1872}, - new uint[]{820}, - new uint[]{822}, - new uint[]{1864}, - new uint[]{1873}, - new uint[]{1874}, - new uint[]{1875}, - new uint[]{1876}, - Array.Empty(), - new uint[]{426}, - new uint[]{2340}, - new uint[]{427}, - new uint[]{2341}, - new uint[]{2342}, - new uint[]{2343}, - new uint[]{2344}, - new uint[]{2346}, - new uint[]{2917}, - new uint[]{633}, - new uint[]{428}, - new uint[]{2347}, - new uint[]{108, 2348}, - new uint[]{2349}, - new uint[]{2291}, - new uint[]{2292}, - new uint[]{2292}, - new uint[]{2292}, - new uint[]{2293}, - new uint[]{2293}, - new uint[]{2293}, - new uint[]{2286}, - new uint[]{913}, - new uint[]{2000}, - new uint[]{730}, - new uint[]{2375}, - new uint[]{2376}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{727}, - new uint[]{730}, - new uint[]{8143}, - new uint[]{1205}, - new uint[]{909}, - new uint[]{910}, - new uint[]{911}, - new uint[]{2360}, - new uint[]{1390, 1877}, - new uint[]{1878}, - new uint[]{258, 2298}, - new uint[]{2300, 2309}, - new uint[]{2302}, - new uint[]{2303}, - new uint[]{2306}, - new uint[]{2307}, - Array.Empty(), - new uint[]{2309}, - new uint[]{2306}, - new uint[]{2310}, - new uint[]{2315}, - new uint[]{2316}, - new uint[]{2312}, - Array.Empty(), - Array.Empty(), - new uint[]{2508}, - new uint[]{2509}, - new uint[]{2364}, - new uint[]{2365}, - new uint[]{2366}, - new uint[]{2326}, - new uint[]{2299}, - Array.Empty(), - new uint[]{692}, - new uint[]{693}, - new uint[]{694}, - new uint[]{695}, - new uint[]{697}, - new uint[]{2359}, - new uint[]{700}, - new uint[]{701}, - new uint[]{702}, - new uint[]{703}, - new uint[]{704}, - new uint[]{705}, - new uint[]{2224}, - new uint[]{2226}, - new uint[]{2227}, - new uint[]{2233}, - new uint[]{2241}, - new uint[]{2242}, - new uint[]{2243}, - new uint[]{2244}, - new uint[]{1756}, - new uint[]{2237}, - new uint[]{2240}, - new uint[]{2231}, - new uint[]{2368}, - new uint[]{2350}, - new uint[]{64}, - new uint[]{2367}, - new uint[]{2353}, - new uint[]{2354}, - new uint[]{2355}, - new uint[]{2356}, - new uint[]{2357}, - new uint[]{2377}, - new uint[]{2378}, - new uint[]{2379}, - new uint[]{2380}, - new uint[]{2381}, - new uint[]{2382}, - new uint[]{2383}, - new uint[]{2384}, - new uint[]{2385}, - new uint[]{2386}, - new uint[]{2387}, - new uint[]{2388}, - new uint[]{2389}, - new uint[]{2390}, - new uint[]{2390}, - new uint[]{2391}, - new uint[]{2392}, - new uint[]{2393}, - new uint[]{2394}, - new uint[]{2395}, - new uint[]{2396}, - new uint[]{2397}, - new uint[]{2379}, - new uint[]{2398}, - new uint[]{2399}, - new uint[]{2400}, - new uint[]{2400}, - new uint[]{2401}, - new uint[]{2402}, - new uint[]{2403}, - new uint[]{2404}, - new uint[]{2405}, - new uint[]{2406}, - new uint[]{2407}, - new uint[]{2408}, - new uint[]{2409}, - new uint[]{2410}, - new uint[]{2411}, - new uint[]{2411}, - new uint[]{2412}, - new uint[]{2413}, - new uint[]{2414}, - new uint[]{2415}, - new uint[]{2416}, - new uint[]{2417}, - new uint[]{2418}, - new uint[]{2419}, - new uint[]{2420}, - new uint[]{2421}, - new uint[]{2422}, - new uint[]{2423}, - new uint[]{2424}, - new uint[]{2425}, - new uint[]{2426}, - new uint[]{2427}, - new uint[]{2428}, - new uint[]{2429}, - new uint[]{2430}, - new uint[]{2431}, - new uint[]{2432}, - new uint[]{2406}, - new uint[]{2433}, - new uint[]{2434}, - new uint[]{2435}, - new uint[]{2436}, - new uint[]{2437}, - new uint[]{2438}, - new uint[]{2439}, - new uint[]{2440}, - new uint[]{2439}, - new uint[]{2440}, - new uint[]{2441}, - new uint[]{2442}, - new uint[]{2443}, - new uint[]{2444}, - new uint[]{2445}, - new uint[]{2407}, - new uint[]{2446}, - new uint[]{2447}, - new uint[]{2448}, - new uint[]{2380}, - new uint[]{2449}, - new uint[]{2450}, - new uint[]{2451}, - new uint[]{2452}, - new uint[]{2414}, - new uint[]{2453}, - new uint[]{2454}, - new uint[]{2455}, - new uint[]{2405}, - new uint[]{2456}, - new uint[]{2457}, - new uint[]{2458}, - new uint[]{2459}, - new uint[]{2460}, - new uint[]{2461}, - new uint[]{2462}, - new uint[]{2463}, - new uint[]{2394}, - new uint[]{2464}, - new uint[]{2465}, - new uint[]{2466}, - new uint[]{2411}, - new uint[]{2429}, - new uint[]{2467}, - new uint[]{2468}, - new uint[]{2469}, - new uint[]{2470}, - new uint[]{2404}, - new uint[]{2471}, - new uint[]{2472}, - new uint[]{2473}, - new uint[]{2474}, - new uint[]{2475}, - new uint[]{2476}, - new uint[]{2477}, - new uint[]{2404}, - new uint[]{2471}, - new uint[]{2478}, - new uint[]{2479}, - new uint[]{2480}, - new uint[]{2481}, - new uint[]{2482}, - new uint[]{2482}, - new uint[]{2483}, - new uint[]{2484}, - new uint[]{2485}, - new uint[]{2486}, - new uint[]{2388}, - new uint[]{2460}, - new uint[]{2488}, - new uint[]{2489}, - new uint[]{2487}, - new uint[]{2490}, - new uint[]{2491}, - new uint[]{2492}, - new uint[]{2493}, - new uint[]{2494}, - new uint[]{2452}, - new uint[]{2495}, - new uint[]{2496}, - new uint[]{2497}, - new uint[]{2498}, - new uint[]{2499}, - new uint[]{2500}, - new uint[]{2501}, - new uint[]{2502}, - new uint[]{2503}, - new uint[]{2504}, - new uint[]{2422}, - new uint[]{2314}, - new uint[]{2374}, - Array.Empty(), - new uint[]{2550}, - Array.Empty(), - new uint[]{2334}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{2291}, - new uint[]{2292}, - new uint[]{2292}, - new uint[]{2292}, - Array.Empty(), - new uint[]{2273}, - new uint[]{2295}, - new uint[]{2564}, - new uint[]{2309}, - new uint[]{2307}, - new uint[]{2313}, - new uint[]{2556}, - new uint[]{2557}, - Array.Empty(), - new uint[]{2552}, - new uint[]{2553}, - new uint[]{2554}, - new uint[]{2551}, - new uint[]{2550}, - new uint[]{2550}, - Array.Empty(), - Array.Empty(), - new uint[]{2567}, - Array.Empty(), - new uint[]{2560}, - new uint[]{2561}, - Array.Empty(), - Array.Empty(), - new uint[]{2572}, - new uint[]{2573}, - new uint[]{2574}, - new uint[]{2575}, - new uint[]{2576}, - new uint[]{2577}, - new uint[]{2578}, - new uint[]{2579}, - new uint[]{2580}, - new uint[]{2581}, - new uint[]{2582}, - new uint[]{2583}, - new uint[]{2566}, - new uint[]{2594}, - new uint[]{2596}, - new uint[]{2595}, - new uint[]{2604}, - new uint[]{2605}, - new uint[]{2606}, - new uint[]{2602}, - new uint[]{2607}, - new uint[]{2609}, - new uint[]{2619}, - new uint[]{2620}, - new uint[]{2621}, - new uint[]{2622}, - new uint[]{2609, 2621}, - new uint[]{2610}, - new uint[]{2624}, - new uint[]{2625}, - new uint[]{2626}, - new uint[]{2627}, - new uint[]{2610, 2613}, - new uint[]{2611}, - new uint[]{1478}, - new uint[]{2660}, - new uint[]{2611, 2614, 2615, 2616}, - new uint[]{2612}, - new uint[]{2628}, - new uint[]{2629}, - new uint[]{2630}, - new uint[]{2631}, - new uint[]{2632}, - new uint[]{2634}, - Array.Empty(), - Array.Empty(), - new uint[]{2636}, - new uint[]{2637}, - new uint[]{2638}, - Array.Empty(), - new uint[]{2612}, - new uint[]{2623}, - new uint[]{2597}, - Array.Empty(), - Array.Empty(), - new uint[]{2590}, - new uint[]{2598}, - Array.Empty(), - Array.Empty(), - new uint[]{2603}, - new uint[]{2505}, - Array.Empty(), - new uint[]{2599}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{2660}, - new uint[]{2659}, - new uint[]{1289}, - new uint[]{2547}, - new uint[]{1288}, - new uint[]{1287}, - new uint[]{1300}, - new uint[]{108}, - new uint[]{2661}, - new uint[]{2656}, - new uint[]{1297}, - new uint[]{2658}, - new uint[]{2662}, - new uint[]{2663}, - new uint[]{1300}, - new uint[]{2653}, - new uint[]{2548}, - new uint[]{2654}, - new uint[]{2549}, - new uint[]{2656}, - new uint[]{2660}, - new uint[]{2547}, - new uint[]{2654}, - new uint[]{1385}, - new uint[]{2650}, - new uint[]{2655}, - Array.Empty(), - new uint[]{2550}, - new uint[]{2551}, - new uint[]{2550}, - new uint[]{2550}, - Array.Empty(), - new uint[]{2552}, - new uint[]{2553}, - new uint[]{2554}, - new uint[]{2555}, - new uint[]{2652}, - new uint[]{2651}, - new uint[]{2591}, - new uint[]{2589}, - Array.Empty(), - new uint[]{2584}, - new uint[]{2585}, - new uint[]{2750}, - new uint[]{2593}, - new uint[]{2586}, - new uint[]{2587}, - new uint[]{2588}, - new uint[]{2665}, - new uint[]{2666}, - new uint[]{2667}, - new uint[]{2668}, - new uint[]{2669}, - new uint[]{2516}, - new uint[]{1528}, - new uint[]{374}, - Array.Empty(), - new uint[]{2527, 2538}, - new uint[]{2528}, - new uint[]{2529}, - new uint[]{2530}, - new uint[]{2531}, - new uint[]{2532}, - new uint[]{2522}, - new uint[]{2721, 2725}, - new uint[]{2698}, - new uint[]{2706}, - new uint[]{2722}, - new uint[]{2728, 3101, 3894}, - new uint[]{2729, 2737, 3333}, - new uint[]{2746}, - new uint[]{2709}, - new uint[]{2725}, - new uint[]{2672}, - new uint[]{2700, 2710}, - Array.Empty(), - Array.Empty(), - new uint[]{2865, 2868}, - new uint[]{2670, 3021}, - new uint[]{2684, 2702}, - new uint[]{2685, 2702}, - new uint[]{2702, 2712}, - Array.Empty(), - new uint[]{2680}, - new uint[]{2681}, - Array.Empty(), - new uint[]{2677, 3106}, - new uint[]{2677}, - new uint[]{2677, 3022, 3101}, - new uint[]{2686, 3020, 3185}, - new uint[]{2686, 3020, 3185}, - new uint[]{2686, 3020, 3185}, - new uint[]{2716}, - new uint[]{2717}, - new uint[]{2718}, - new uint[]{2689, 2715}, - new uint[]{2691, 2692, 2693, 2702, 2705}, - new uint[]{2749}, - Array.Empty(), - new uint[]{2723}, - Array.Empty(), - Array.Empty(), - new uint[]{2670}, - new uint[]{2738}, - new uint[]{2739}, - new uint[]{2740}, - new uint[]{2687}, - new uint[]{2708}, - new uint[]{2699}, - new uint[]{2713}, - new uint[]{2714}, - new uint[]{2724, 2735}, - new uint[]{2734}, - new uint[]{2736}, - new uint[]{2727}, - new uint[]{2678}, - new uint[]{2679}, - new uint[]{2680}, - new uint[]{2678}, - new uint[]{2679}, - new uint[]{2681}, - new uint[]{2680}, - new uint[]{2681}, - new uint[]{2682, 3894}, - new uint[]{2695}, - new uint[]{2695}, - new uint[]{2696}, - new uint[]{2719}, - new uint[]{2726}, - new uint[]{2681}, - new uint[]{2679}, - new uint[]{2680}, - new uint[]{2678}, - new uint[]{2679}, - new uint[]{2680}, - new uint[]{2741}, - new uint[]{539}, - new uint[]{2640}, - new uint[]{2742}, - new uint[]{2742}, - new uint[]{2641}, - new uint[]{2642}, - new uint[]{2643}, - new uint[]{2174}, - new uint[]{2644}, - new uint[]{2645}, - new uint[]{2646}, - new uint[]{1474}, - new uint[]{2647}, - new uint[]{2648}, - new uint[]{2649}, - new uint[]{2570}, - new uint[]{2569}, - new uint[]{2571, 3379}, - new uint[]{2505}, - new uint[]{2665}, - Array.Empty(), - new uint[]{108}, - new uint[]{2617, 2618, 2632, 2634}, - new uint[]{2592}, - new uint[]{2751}, - new uint[]{2754}, - new uint[]{2753}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{720, 721, 722, 725}, - new uint[]{108}, - new uint[]{108, 2568, 2608, 2891}, - new uint[]{2730, 4050}, - new uint[]{2827}, - new uint[]{2828}, - new uint[]{2829}, - new uint[]{2830}, - new uint[]{2831}, - new uint[]{2887}, - new uint[]{2888}, - new uint[]{2889}, - new uint[]{2890}, - new uint[]{2892}, - Array.Empty(), - new uint[]{2894}, - new uint[]{2895}, - new uint[]{2896}, - new uint[]{2897}, - new uint[]{2898}, - new uint[]{2899}, - new uint[]{2900}, - new uint[]{2901}, - new uint[]{2902}, - new uint[]{2904}, - new uint[]{2906}, - new uint[]{2905}, - new uint[]{2993}, - new uint[]{2790}, - new uint[]{2788}, - new uint[]{2789}, - new uint[]{2787}, - new uint[]{2786}, - new uint[]{2786}, - new uint[]{2782}, - new uint[]{2783}, - new uint[]{2784}, - new uint[]{2785}, - new uint[]{2781}, - new uint[]{2780}, - new uint[]{108}, - new uint[]{2832}, - new uint[]{2832}, - new uint[]{2833}, - new uint[]{2832}, - new uint[]{2832}, - new uint[]{2833}, - new uint[]{2891}, - new uint[]{2903}, - new uint[]{2916}, - new uint[]{2168}, - new uint[]{2833}, - new uint[]{2778}, - new uint[]{2779}, - new uint[]{2775}, - new uint[]{2776}, - new uint[]{2777}, - new uint[]{2086}, - new uint[]{2086}, - new uint[]{2086}, - new uint[]{2086}, - new uint[]{2774}, - new uint[]{2774}, - new uint[]{2809}, - new uint[]{2808}, - new uint[]{2801}, - new uint[]{2806}, - new uint[]{2805}, - new uint[]{2804}, - new uint[]{2800}, - new uint[]{2803}, - new uint[]{2802}, - new uint[]{2801}, - new uint[]{2800}, - new uint[]{2799}, - new uint[]{2796}, - new uint[]{2795}, - new uint[]{2798}, - new uint[]{2794}, - new uint[]{2797}, - new uint[]{2797}, - new uint[]{2792}, - new uint[]{2807}, - new uint[]{2791}, - new uint[]{2793}, - new uint[]{2815}, - new uint[]{2814}, - new uint[]{2813}, - new uint[]{2812}, - new uint[]{2824}, - new uint[]{2823}, - new uint[]{2822}, - new uint[]{108}, - new uint[]{2825}, - new uint[]{2821}, - new uint[]{2820}, - new uint[]{2819}, - new uint[]{2818}, - new uint[]{2817}, - new uint[]{2816}, - new uint[]{2826}, - new uint[]{2886}, - new uint[]{2851, 2970}, - new uint[]{2851, 2970}, - new uint[]{2852}, - new uint[]{2854}, - new uint[]{2853}, - new uint[]{2855}, - new uint[]{2856}, - Array.Empty(), - new uint[]{2857}, - new uint[]{2858}, - new uint[]{2859}, - new uint[]{2860}, - new uint[]{2861}, - Array.Empty(), - new uint[]{2758}, - new uint[]{2759}, - new uint[]{2760}, - new uint[]{2761}, - new uint[]{2762}, - new uint[]{2763}, - new uint[]{2764}, - new uint[]{2765}, - new uint[]{2766}, - new uint[]{2767}, - new uint[]{2768}, - new uint[]{2769}, - new uint[]{2770}, - new uint[]{2772}, - new uint[]{2771}, - new uint[]{2773}, - new uint[]{2810}, - new uint[]{2834}, - new uint[]{2836}, - new uint[]{2835}, - new uint[]{2837}, - Array.Empty(), - new uint[]{2839}, - new uint[]{2840}, - new uint[]{2841}, - new uint[]{2842}, - new uint[]{2843}, - new uint[]{2844}, - new uint[]{2845}, - new uint[]{2846}, - new uint[]{2847}, - new uint[]{2848}, - new uint[]{2849}, - new uint[]{2850}, - new uint[]{2884}, - new uint[]{2885}, - Array.Empty(), - new uint[]{2168}, - new uint[]{2994}, - new uint[]{2872}, - new uint[]{2873}, - new uint[]{3218}, - new uint[]{2995}, - new uint[]{2994}, - new uint[]{2994}, - new uint[]{2994}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{2868}, - new uint[]{2868}, - new uint[]{2869}, - new uint[]{2870}, - Array.Empty(), - new uint[]{2864, 2875, 3894}, - new uint[]{2863, 2875, 3021}, - new uint[]{2862}, - new uint[]{3182}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{2914}, - new uint[]{2915}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{2609}, - new uint[]{2619}, - new uint[]{2620}, - new uint[]{2621}, - new uint[]{2622}, - new uint[]{2623}, - new uint[]{2609, 2621}, - new uint[]{2610}, - new uint[]{2624}, - new uint[]{2625}, - new uint[]{2626}, - new uint[]{2627}, - new uint[]{2610, 2613}, - new uint[]{2611}, - new uint[]{1478}, - new uint[]{2611, 2614, 2615, 2616}, - new uint[]{2612}, - new uint[]{2628}, - new uint[]{2629}, - new uint[]{2630}, - new uint[]{2631}, - new uint[]{2632}, - new uint[]{2634}, - new uint[]{2635}, - new uint[]{2636}, - new uint[]{2637}, - new uint[]{2638}, - new uint[]{2612}, - new uint[]{2617, 2618, 2632, 2634}, - new uint[]{539}, - new uint[]{2640}, - new uint[]{2742}, - new uint[]{2742}, - new uint[]{2641}, - new uint[]{2642}, - new uint[]{2643}, - new uint[]{2174}, - new uint[]{2644}, - new uint[]{2645}, - new uint[]{2646}, - new uint[]{1474}, - new uint[]{2647}, - new uint[]{2648}, - new uint[]{2649}, - new uint[]{2919}, - new uint[]{2920}, - new uint[]{2921}, - new uint[]{2922}, - new uint[]{2923}, - new uint[]{2924}, - new uint[]{2925}, - new uint[]{2926}, - new uint[]{2927}, - new uint[]{2928}, - new uint[]{2929}, - new uint[]{2930}, - new uint[]{2931}, - new uint[]{2932}, - new uint[]{2933}, - new uint[]{2934}, - new uint[]{2935}, - new uint[]{2936}, - new uint[]{2937}, - new uint[]{2938}, - new uint[]{2939}, - new uint[]{2940}, - new uint[]{2941}, - new uint[]{2942}, - new uint[]{2943}, - new uint[]{2944}, - new uint[]{2945}, - new uint[]{2946}, - new uint[]{2947}, - new uint[]{2948}, - new uint[]{2949}, - new uint[]{2950}, - new uint[]{2951}, - new uint[]{2952}, - new uint[]{2953}, - new uint[]{2954}, - new uint[]{2955}, - new uint[]{2956}, - new uint[]{2957}, - new uint[]{2958}, - new uint[]{2959}, - new uint[]{2960}, - new uint[]{2961}, - new uint[]{2962}, - new uint[]{2963}, - new uint[]{2964}, - new uint[]{2965}, - new uint[]{2966}, - new uint[]{2967}, - new uint[]{2968}, - new uint[]{2969}, - new uint[]{3330}, - new uint[]{2866}, - new uint[]{2972}, - new uint[]{2973}, - new uint[]{2974}, - new uint[]{2975}, - new uint[]{2976}, - new uint[]{2977}, - new uint[]{2978}, - new uint[]{2979}, - new uint[]{2980}, - new uint[]{2981}, - Array.Empty(), - new uint[]{2984}, - new uint[]{2988}, - new uint[]{2992}, - new uint[]{3050}, - new uint[]{3051}, - new uint[]{3052}, - new uint[]{3053}, - new uint[]{3054}, - new uint[]{3055}, - new uint[]{3330}, - new uint[]{5763}, - new uint[]{3056}, - new uint[]{3057}, - new uint[]{3058}, - new uint[]{3059}, - new uint[]{3060}, - new uint[]{3061}, - new uint[]{3666}, - Array.Empty(), - new uint[]{3014}, - new uint[]{3015}, - new uint[]{3016}, - new uint[]{3017}, - new uint[]{3018}, - new uint[]{3019}, - new uint[]{2904}, - new uint[]{2906}, - new uint[]{2905}, - new uint[]{2997}, - new uint[]{2998}, - new uint[]{2999}, - new uint[]{3000}, - new uint[]{3001}, - new uint[]{3002}, - new uint[]{3003}, - new uint[]{3004}, - new uint[]{3005}, - new uint[]{3006}, - new uint[]{3007}, - new uint[]{3008}, - new uint[]{3009}, - new uint[]{3010}, - new uint[]{3011}, - new uint[]{3012}, - new uint[]{3013}, - new uint[]{3065}, - new uint[]{3192}, - new uint[]{3193}, - new uint[]{3194}, - new uint[]{3192, 3193}, - new uint[]{3197}, - new uint[]{3198}, - new uint[]{3199}, - new uint[]{3200}, - new uint[]{3201}, - new uint[]{3197, 3199, 3200, 3201}, - new uint[]{3204}, - new uint[]{3205}, - new uint[]{3206}, - new uint[]{3207}, - new uint[]{3208}, - new uint[]{3209}, - new uint[]{3209}, - new uint[]{3209}, - new uint[]{3204}, - new uint[]{3210}, - new uint[]{3211}, - new uint[]{3212}, - new uint[]{3213}, - Array.Empty(), - new uint[]{3214}, - new uint[]{3215}, - new uint[]{3216}, - new uint[]{3217}, - new uint[]{3210}, - new uint[]{261}, - new uint[]{267}, - new uint[]{3190}, - new uint[]{3191}, - new uint[]{1467}, - new uint[]{3196}, - new uint[]{3195}, - new uint[]{2810}, - new uint[]{3240}, - new uint[]{3242}, - new uint[]{3069}, - new uint[]{3070}, - new uint[]{3062}, - new uint[]{3063}, - new uint[]{3064}, - new uint[]{2994}, - new uint[]{3218}, - new uint[]{2995}, - new uint[]{2994}, - new uint[]{2994}, - new uint[]{2994}, - new uint[]{3038}, - new uint[]{3014}, - new uint[]{3039}, - new uint[]{3040}, - new uint[]{3041}, - new uint[]{3043}, - new uint[]{3042}, - new uint[]{3044}, - new uint[]{3044}, - new uint[]{3045}, - new uint[]{3072}, - new uint[]{3073}, - new uint[]{3074}, - new uint[]{3071}, - new uint[]{3075}, - new uint[]{3066}, - new uint[]{3067}, - new uint[]{3068}, - new uint[]{3028}, - new uint[]{3288}, - new uint[]{3030}, - new uint[]{3032}, - new uint[]{3037}, - new uint[]{114}, - new uint[]{3031}, - new uint[]{3027}, - new uint[]{3034}, - new uint[]{3035}, - new uint[]{3219}, - new uint[]{3029}, - new uint[]{108, 1644, 2775, 3271, 3272, 3408, 3428, 3434, 3437, 3634, 3639, 3642, 3744, 3851, 3852, 4555, 4567, 4568, 4571, 4739, 4745, 4747, 5259, 5273}, - new uint[]{3046}, - new uint[]{3047}, - new uint[]{3046}, - new uint[]{3047}, - new uint[]{3048}, - new uint[]{3046}, - new uint[]{3046}, - new uint[]{3047}, - new uint[]{3038}, - new uint[]{3049}, - new uint[]{3033}, - new uint[]{3220}, - Array.Empty(), - new uint[]{3022}, - new uint[]{3021}, - new uint[]{887}, - new uint[]{1858}, - new uint[]{1858}, - new uint[]{887}, - new uint[]{3026}, - new uint[]{3076}, - new uint[]{3164}, - new uint[]{3169}, - new uint[]{3172}, - new uint[]{3168}, - new uint[]{3163}, - new uint[]{3162}, - new uint[]{3164}, - new uint[]{3129}, - new uint[]{3130}, - new uint[]{3131}, - new uint[]{3045}, - new uint[]{3133}, - new uint[]{3134}, - new uint[]{3135}, - new uint[]{3136}, - new uint[]{3137}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{3139}, - new uint[]{3140}, - new uint[]{3141}, - new uint[]{3133}, - new uint[]{3142}, - new uint[]{3138}, - new uint[]{3129}, - new uint[]{3143}, - new uint[]{3144}, - new uint[]{3145}, - new uint[]{3146}, - new uint[]{3133}, - new uint[]{3129}, - new uint[]{3148}, - new uint[]{3147}, - new uint[]{3149}, - new uint[]{3272}, - new uint[]{3273}, - new uint[]{3274}, - new uint[]{3275}, - new uint[]{3276}, - new uint[]{3277}, - Array.Empty(), - new uint[]{3279}, - new uint[]{3280}, - new uint[]{3281}, - new uint[]{3282}, - new uint[]{3283}, - new uint[]{3284}, - new uint[]{3285}, - new uint[]{3286}, - new uint[]{1695}, - Array.Empty(), - new uint[]{3255}, - new uint[]{3256}, - new uint[]{3257}, - new uint[]{3258}, - new uint[]{3259}, - new uint[]{3260}, - new uint[]{3261}, - new uint[]{3262}, - new uint[]{3263}, - new uint[]{3264}, - new uint[]{3265}, - new uint[]{3266}, - new uint[]{3267}, - new uint[]{3268}, - new uint[]{3269}, - new uint[]{3270}, - new uint[]{3271}, - new uint[]{3150}, - new uint[]{3151}, - new uint[]{3152}, - new uint[]{3133}, - new uint[]{3153}, - new uint[]{3154}, - new uint[]{3155}, - new uint[]{3156}, - new uint[]{3159}, - new uint[]{3157}, - new uint[]{3158}, - new uint[]{3189}, - new uint[]{3160}, - new uint[]{3133}, - new uint[]{3138}, - new uint[]{3129}, - new uint[]{3165}, - new uint[]{3164}, - new uint[]{3166}, - new uint[]{3167}, - new uint[]{3170}, - new uint[]{3166}, - new uint[]{3167}, - new uint[]{3165}, - new uint[]{3164}, - new uint[]{3169}, - new uint[]{3243}, - new uint[]{3244}, - new uint[]{3246}, - new uint[]{3245}, - new uint[]{3247}, - new uint[]{3248}, - new uint[]{3249}, - new uint[]{3250}, - new uint[]{3380, 3381, 3382}, - new uint[]{3252}, - new uint[]{3119}, - new uint[]{3120}, - new uint[]{3121}, - new uint[]{3122}, - new uint[]{3123}, - new uint[]{3124}, - new uint[]{3125}, - new uint[]{3126}, - new uint[]{3110}, - new uint[]{2120}, - new uint[]{3114}, - new uint[]{3111}, - new uint[]{3112}, - new uint[]{3113}, - new uint[]{3118}, - new uint[]{3115}, - new uint[]{3116}, - new uint[]{3117}, - new uint[]{3127}, - new uint[]{3128}, - new uint[]{3132}, - new uint[]{3221}, - new uint[]{3152}, - new uint[]{3161}, - new uint[]{3165}, - new uint[]{3167}, - new uint[]{3164}, - new uint[]{3170}, - new uint[]{3172}, - new uint[]{3172}, - new uint[]{3173, 3174, 3175}, - new uint[]{3210}, - new uint[]{3213}, - new uint[]{3172}, - new uint[]{3172}, - new uint[]{3171}, - new uint[]{3091}, - new uint[]{3092}, - new uint[]{3093}, - Array.Empty(), - new uint[]{3095}, - new uint[]{3096}, - new uint[]{3097}, - new uint[]{3098}, - new uint[]{3077}, - new uint[]{3078}, - new uint[]{3079}, - new uint[]{3080}, - new uint[]{3081}, - new uint[]{108, 3082}, - new uint[]{3083}, - new uint[]{3084}, - new uint[]{3085}, - new uint[]{3086}, - new uint[]{3087}, - new uint[]{3088}, - new uint[]{3089}, - new uint[]{3090}, - new uint[]{3100}, - new uint[]{3100}, - new uint[]{3104}, - new uint[]{3104}, - new uint[]{3102}, - new uint[]{3103}, - new uint[]{3101}, - new uint[]{3107}, - new uint[]{3108}, - Array.Empty(), - new uint[]{3106}, - new uint[]{3105}, - Array.Empty(), - new uint[]{3188}, - new uint[]{3118, 3179}, - new uint[]{3183}, - new uint[]{3184}, - new uint[]{3153}, - new uint[]{3153}, - new uint[]{3154}, - new uint[]{3166}, - new uint[]{3166}, - new uint[]{3234}, - new uint[]{3235}, - new uint[]{3236}, - new uint[]{3237}, - new uint[]{3238}, - new uint[]{3239}, - new uint[]{3227}, - new uint[]{3228}, - new uint[]{3229}, - new uint[]{3230}, - new uint[]{3231}, - new uint[]{3232}, - new uint[]{3233}, - new uint[]{3241}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{108, 749, 4571, 8395}, - new uint[]{2993}, - new uint[]{108, 8395}, - new uint[]{3077}, - new uint[]{3222}, - new uint[]{3223}, - new uint[]{3224}, - new uint[]{3225}, - new uint[]{3301}, - new uint[]{3345}, - new uint[]{3345}, - new uint[]{3345}, - new uint[]{3082}, - new uint[]{3302}, - new uint[]{3303}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{3078}, - new uint[]{2665}, - new uint[]{2665}, - new uint[]{3304}, - new uint[]{3307}, - new uint[]{2665, 3305}, - new uint[]{3304}, - new uint[]{3305}, - new uint[]{3306}, - new uint[]{3321}, - new uint[]{3322}, - new uint[]{3323}, - new uint[]{3324}, - Array.Empty(), - new uint[]{3325}, - new uint[]{3326}, - Array.Empty(), - new uint[]{3329}, - new uint[]{2168}, - new uint[]{3331}, - new uint[]{3314}, - Array.Empty(), - new uint[]{3315}, - new uint[]{3316}, - new uint[]{3317}, - new uint[]{3318}, - new uint[]{3319}, - new uint[]{3320}, - new uint[]{3309, 3310, 3311}, - Array.Empty(), - new uint[]{3287}, - new uint[]{3386}, - new uint[]{3289}, - new uint[]{3290}, - new uint[]{3291}, - new uint[]{3292}, - new uint[]{3294}, - new uint[]{3293}, - new uint[]{3335}, - new uint[]{3337}, - new uint[]{3339}, - new uint[]{3340}, - Array.Empty(), - new uint[]{3300}, - new uint[]{3046}, - new uint[]{108}, - new uint[]{108}, - new uint[]{3355}, - new uint[]{3354}, - new uint[]{3353}, - new uint[]{3368}, - new uint[]{3367}, - new uint[]{3366}, - new uint[]{3365}, - new uint[]{3358}, - new uint[]{3357}, - Array.Empty(), - new uint[]{3363}, - new uint[]{3362}, - new uint[]{3361}, - new uint[]{3360}, - new uint[]{3359}, - Array.Empty(), - new uint[]{3352}, - new uint[]{3351}, - new uint[]{3350}, - new uint[]{3349}, - new uint[]{3369}, - new uint[]{3370}, - new uint[]{3373}, - new uint[]{3357}, - new uint[]{3374}, - new uint[]{3375}, - new uint[]{3375}, - Array.Empty(), - new uint[]{3251}, - new uint[]{3362}, - new uint[]{3361}, - new uint[]{3360}, - new uint[]{3359}, - new uint[]{3298}, - new uint[]{3298}, - new uint[]{3378}, - new uint[]{3372}, - new uint[]{3371}, - new uint[]{3095}, - new uint[]{3, 5, 9, 11, 19, 20, 52, 83, 90, 131, 159, 165, 242, 312, 451, 471, 540, 567, 584, 588, 593, 598, 599, 606, 653, 658, 665, 668, 719, 737, 744, 750, 834, 839, 906, 939, 959, 962, 964, 993, 1023, 1033, 1043, 1052, 1056, 1058, 1102, 1103, 1105, 1106, 1114, 1126, 1133, 1142, 1143, 1144, 1215, 1227, 1244, 1248, 1276, 1279, 1280, 1373, 1374, 1375, 1376, 1377, 1380, 1381, 1382, 1384, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1395, 1396, 1397, 1399, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1413, 1414, 1417, 1418, 1420, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1573, 1574, 1575, 1577, 1578, 1589, 1603, 1604, 1605, 1607}, - new uint[]{108}, - new uint[]{108, 3373, 3374, 3375, 3387}, - new uint[]{3370}, - new uint[]{2665}, - Array.Empty(), - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{3923}, - new uint[]{3925}, - new uint[]{3930}, - new uint[]{3931}, - new uint[]{3932}, - new uint[]{3933}, - new uint[]{3789}, - new uint[]{3405}, - new uint[]{3406}, - new uint[]{3407}, - new uint[]{3408}, - new uint[]{3409}, - new uint[]{3410}, - new uint[]{3791}, - Array.Empty(), - new uint[]{3793}, - new uint[]{3794}, - Array.Empty(), - new uint[]{3796}, - new uint[]{3797}, - new uint[]{3798}, - new uint[]{3818}, - new uint[]{3819}, - new uint[]{3820}, - new uint[]{3821}, - new uint[]{2143}, - new uint[]{3822}, - new uint[]{4383}, - new uint[]{4384}, - new uint[]{3823}, - new uint[]{4382}, - new uint[]{4383}, - new uint[]{4384}, - new uint[]{3293}, - new uint[]{3930}, - new uint[]{2343}, - new uint[]{3452}, - new uint[]{3453}, - new uint[]{3454}, - new uint[]{3455}, - new uint[]{3456}, - new uint[]{3457}, - new uint[]{3458}, - new uint[]{3459}, - new uint[]{3460}, - new uint[]{3461}, - new uint[]{3462}, - new uint[]{3463}, - new uint[]{3464}, - new uint[]{3465}, - new uint[]{3660}, - new uint[]{3660}, - new uint[]{3661}, - new uint[]{3661}, - new uint[]{3662}, - new uint[]{3662}, - new uint[]{3663}, - new uint[]{3663}, - new uint[]{3664}, - new uint[]{3664}, - new uint[]{3745}, - new uint[]{3746}, - new uint[]{3747}, - new uint[]{3748}, - new uint[]{3749}, - new uint[]{3747, 3748, 3750}, - new uint[]{4492}, - new uint[]{4420}, - new uint[]{1385}, - new uint[]{4133}, - new uint[]{3735}, - new uint[]{3921}, - new uint[]{3918}, - new uint[]{3910}, - new uint[]{3922}, - new uint[]{3913}, - new uint[]{3912}, - new uint[]{3915}, - new uint[]{3916}, - new uint[]{3911}, - new uint[]{3917}, - new uint[]{3920}, - new uint[]{3909}, - new uint[]{3914}, - new uint[]{3923}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{3388}, - new uint[]{3389}, - new uint[]{3390}, - new uint[]{3391}, - new uint[]{3392}, - new uint[]{3393}, - new uint[]{3394}, - new uint[]{3395}, - new uint[]{3396}, - new uint[]{3397}, - new uint[]{3398}, - new uint[]{3399}, - new uint[]{3400}, - new uint[]{3401}, - new uint[]{3402}, - new uint[]{3403}, - new uint[]{3404}, - new uint[]{3409}, - new uint[]{3649}, - new uint[]{3649, 3658}, - new uint[]{4606}, - new uint[]{108}, - new uint[]{3650}, - new uint[]{3651}, - new uint[]{3652}, - new uint[]{3653}, - new uint[]{3654}, - new uint[]{3655}, - new uint[]{3658}, - Array.Empty(), - new uint[]{3649}, - new uint[]{108, 3649}, - new uint[]{3650}, - new uint[]{8144}, - new uint[]{3652}, - new uint[]{3653}, - new uint[]{3654}, - new uint[]{3658}, - new uint[]{3655}, - new uint[]{3754}, - new uint[]{3755}, - new uint[]{4142}, - new uint[]{4490}, - new uint[]{1300}, - new uint[]{3753}, - new uint[]{3757}, - new uint[]{8145}, - new uint[]{3758}, - new uint[]{3759}, - new uint[]{3760}, - new uint[]{3761}, - new uint[]{2667}, - Array.Empty(), - new uint[]{3758}, - new uint[]{3754}, - new uint[]{3755}, - new uint[]{3753}, - new uint[]{3757}, - new uint[]{8146}, - new uint[]{3758}, - new uint[]{3759}, - new uint[]{3760}, - new uint[]{3761}, - new uint[]{2667}, - Array.Empty(), - Array.Empty(), - new uint[]{3818}, - new uint[]{3799}, - new uint[]{3800}, - new uint[]{3801}, - new uint[]{3802}, - new uint[]{3803}, - new uint[]{3804}, - Array.Empty(), - new uint[]{3805}, - new uint[]{3807}, - new uint[]{3808}, - new uint[]{3809, 3815}, - new uint[]{3809}, - new uint[]{3810, 3816}, - new uint[]{3810}, - new uint[]{3811}, - new uint[]{3812}, - new uint[]{3026}, - new uint[]{3813}, - new uint[]{3814}, - new uint[]{3806}, - new uint[]{3815}, - new uint[]{3816}, - Array.Empty(), - new uint[]{3772}, - new uint[]{3772}, - new uint[]{3773}, - new uint[]{3778}, - new uint[]{3779}, - new uint[]{3774}, - new uint[]{3775}, - new uint[]{3759}, - new uint[]{3776}, - new uint[]{3777}, - new uint[]{3772}, - new uint[]{3772}, - new uint[]{3773}, - new uint[]{3778}, - new uint[]{3774}, - new uint[]{3759}, - new uint[]{6305}, - new uint[]{4259}, - Array.Empty(), - new uint[]{3824}, - new uint[]{3825}, - new uint[]{3826}, - new uint[]{3827}, - new uint[]{3828}, - new uint[]{3829}, - new uint[]{3830}, - new uint[]{3831}, - new uint[]{3832}, - new uint[]{3833}, - new uint[]{3834}, - new uint[]{4336}, - new uint[]{3835}, - new uint[]{3836}, - new uint[]{3837}, - new uint[]{3838}, - new uint[]{3839}, - new uint[]{3840}, - new uint[]{4340}, - new uint[]{4339}, - new uint[]{3818}, - new uint[]{3825}, - new uint[]{4489}, - new uint[]{3765}, - Array.Empty(), - new uint[]{3378}, - new uint[]{3766}, - new uint[]{3766}, - new uint[]{8958}, - new uint[]{3767}, - new uint[]{3770}, - new uint[]{3769}, - new uint[]{3771}, - new uint[]{3768}, - new uint[]{3765}, - new uint[]{4141}, - new uint[]{3726}, - new uint[]{3372}, - Array.Empty(), - new uint[]{3119}, - new uint[]{3120}, - new uint[]{4135}, - new uint[]{4136}, - new uint[]{4137}, - new uint[]{4138}, - new uint[]{3721}, - new uint[]{3723}, - new uint[]{3724}, - new uint[]{3722}, - new uint[]{3731}, - new uint[]{3732}, - new uint[]{3733}, - new uint[]{3736}, - new uint[]{3737}, - new uint[]{108}, - new uint[]{3739}, - new uint[]{3278}, - new uint[]{3727}, - new uint[]{3728}, - new uint[]{3734}, - new uint[]{3740}, - new uint[]{3741}, - new uint[]{3742}, - new uint[]{4130}, - new uint[]{3127}, - new uint[]{4139}, - new uint[]{4140}, - new uint[]{2064}, - new uint[]{4116}, - new uint[]{4125}, - new uint[]{4117, 4506}, - new uint[]{4126}, - new uint[]{4130}, - new uint[]{1394}, - new uint[]{4116}, - new uint[]{3481, 3489}, - Array.Empty(), - new uint[]{3479}, - Array.Empty(), - new uint[]{3488}, - new uint[]{3492}, - new uint[]{3483, 3490}, - new uint[]{3485}, - Array.Empty(), - Array.Empty(), - new uint[]{3484}, - new uint[]{3487}, - new uint[]{3486}, - new uint[]{3582, 3620, 3670, 4289}, - new uint[]{3574, 3584, 3591, 3900}, - new uint[]{3573, 3583, 3590, 3902, 4049}, - new uint[]{3575, 3585, 3592, 3901}, - new uint[]{4337}, - new uint[]{4338}, - new uint[]{4390}, - new uint[]{3581}, - new uint[]{3577}, - new uint[]{3565, 3588, 3688}, - new uint[]{3578, 3691}, - Array.Empty(), - new uint[]{3564}, - new uint[]{3571, 3696}, - new uint[]{3579, 3693}, - new uint[]{3580}, - new uint[]{3568, 3668, 4052, 4284}, - new uint[]{3608, 4070}, - new uint[]{3597}, - new uint[]{3593, 3715}, - new uint[]{3598, 3706, 3945}, - new uint[]{3595, 3712}, - new uint[]{3611}, - Array.Empty(), - new uint[]{3612}, - new uint[]{3603, 3714}, - new uint[]{3607, 3710}, - new uint[]{3610}, - new uint[]{3605, 3713}, - new uint[]{3596, 3711}, - new uint[]{3566, 3606}, - new uint[]{3599}, - new uint[]{3600, 3707}, - new uint[]{3601, 3708}, - new uint[]{3602, 3709}, - new uint[]{56}, - new uint[]{3609}, - new uint[]{3626, 3977}, - new uint[]{3624, 4045}, - new uint[]{3613}, - new uint[]{3614, 4277}, - new uint[]{3559}, - new uint[]{3615, 3700, 4042}, - new uint[]{3617, 3701}, - Array.Empty(), - new uint[]{3629, 4294}, - new uint[]{3625, 4291}, - new uint[]{3542}, - new uint[]{117}, - new uint[]{3526}, - new uint[]{3507, 3703}, - new uint[]{3512}, - new uint[]{3501, 3515, 3527}, - new uint[]{3502, 3516, 3528, 4061}, - new uint[]{3503, 3517, 3529}, - new uint[]{3511, 3705}, - new uint[]{3671, 4059}, - new uint[]{3704, 4071}, - new uint[]{3506, 3674}, - new uint[]{3500, 3514, 3531, 3672}, - new uint[]{3509}, - new uint[]{3510, 4288}, - new uint[]{3594, 4283, 4301}, - new uint[]{3611}, - new uint[]{3504, 3673}, - new uint[]{3524, 4293}, - Array.Empty(), - new uint[]{3523, 3702, 4060}, - Array.Empty(), - new uint[]{3513, 3530}, - new uint[]{3505, 3675}, - new uint[]{3525}, - new uint[]{3544}, - new uint[]{3541}, - Array.Empty(), - Array.Empty(), - new uint[]{3554}, - new uint[]{3619, 3698, 4053, 4278, 4290}, - Array.Empty(), - new uint[]{3623}, - new uint[]{3555}, - new uint[]{3556}, - new uint[]{3537}, - Array.Empty(), - new uint[]{3552}, - new uint[]{4399}, - new uint[]{3538}, - new uint[]{3539}, - new uint[]{3543}, - new uint[]{3561}, - new uint[]{3551}, - new uint[]{3534}, - new uint[]{3535}, - new uint[]{3536}, - new uint[]{3532}, - Array.Empty(), - new uint[]{3557}, - new uint[]{4128}, - new uint[]{3502}, - new uint[]{3503}, - new uint[]{4129}, - new uint[]{2082}, - new uint[]{1990}, - new uint[]{108}, - new uint[]{4346}, - new uint[]{4347}, - new uint[]{4348}, - new uint[]{4349}, - new uint[]{4346}, - new uint[]{4347}, - new uint[]{4348}, - new uint[]{4349}, - new uint[]{4130}, - new uint[]{3850}, - new uint[]{4131}, - new uint[]{3428}, - new uint[]{3429}, - new uint[]{3430}, - new uint[]{3431}, - new uint[]{3432}, - new uint[]{3433}, - new uint[]{3434}, - new uint[]{3435}, - new uint[]{3436}, - new uint[]{3411}, - new uint[]{3412}, - new uint[]{3413}, - new uint[]{3414}, - new uint[]{3415}, - new uint[]{3416}, - new uint[]{3417}, - new uint[]{3418}, - new uint[]{3419}, - new uint[]{3420}, - new uint[]{3421}, - new uint[]{3422}, - new uint[]{3423}, - new uint[]{3424}, - new uint[]{3425}, - new uint[]{3426}, - new uint[]{3427}, - new uint[]{4132}, - new uint[]{3540}, - new uint[]{3586}, - Array.Empty(), - new uint[]{3817}, - new uint[]{4154}, - new uint[]{4154}, - new uint[]{1391}, - new uint[]{4155}, - new uint[]{4156}, - new uint[]{4157}, - new uint[]{4145}, - new uint[]{4158}, - new uint[]{4159}, - new uint[]{4160}, - new uint[]{4161}, - new uint[]{4162}, - new uint[]{1392}, - new uint[]{4150}, - new uint[]{4151}, - new uint[]{4152}, - new uint[]{4153}, - new uint[]{4130}, - new uint[]{1394}, - new uint[]{4130}, - new uint[]{4179}, - new uint[]{3563, 3690}, - new uint[]{4130}, - new uint[]{2082}, - new uint[]{4144}, - new uint[]{2077}, - new uint[]{4143}, - new uint[]{2080}, - new uint[]{2076}, - new uint[]{3849}, - new uint[]{3841}, - new uint[]{3843}, - new uint[]{3634}, - new uint[]{4385}, - new uint[]{3850}, - new uint[]{3639}, - new uint[]{3293}, - new uint[]{3642}, - new uint[]{3851}, - new uint[]{3852}, - new uint[]{4400}, - new uint[]{3841}, - new uint[]{3841}, - new uint[]{3319}, - new uint[]{3319}, - new uint[]{4401}, - new uint[]{3841}, - new uint[]{3841}, - new uint[]{3842}, - new uint[]{3842}, - new uint[]{3843}, - new uint[]{3843}, - new uint[]{3844}, - new uint[]{3845}, - new uint[]{3846}, - new uint[]{3847}, - new uint[]{3848}, - new uint[]{2234}, - new uint[]{4148}, - new uint[]{4147}, - new uint[]{4146}, - new uint[]{2098}, - new uint[]{2099}, - new uint[]{1453}, - new uint[]{4427}, - new uint[]{4178}, - new uint[]{3632}, - new uint[]{3633}, - new uint[]{3634}, - new uint[]{3635}, - new uint[]{3636}, - new uint[]{3637}, - new uint[]{3638}, - new uint[]{3639}, - new uint[]{3640}, - new uint[]{3641}, - new uint[]{3642}, - new uint[]{3643}, - new uint[]{3644}, - new uint[]{3645}, - new uint[]{4385}, - new uint[]{4386}, - new uint[]{4387}, - new uint[]{3632, 3634, 3635, 3639, 3640, 3641, 3642, 3643, 3645}, - new uint[]{3223}, - new uint[]{3224}, - new uint[]{1848}, - new uint[]{4173}, - new uint[]{4174}, - new uint[]{2347}, - new uint[]{4180}, - new uint[]{4185}, - new uint[]{4184}, - new uint[]{4186}, - new uint[]{4187}, - new uint[]{3438}, - new uint[]{3439}, - new uint[]{3440}, - new uint[]{3441}, - new uint[]{3442}, - new uint[]{3443}, - new uint[]{3445, 11994}, - new uint[]{3446, 11993}, - new uint[]{3447}, - new uint[]{3448}, - new uint[]{3449}, - new uint[]{3450}, - new uint[]{3451}, - new uint[]{3445, 11994}, - new uint[]{4188}, - new uint[]{1422}, - new uint[]{1423}, - new uint[]{3665}, - new uint[]{3665}, - new uint[]{4381}, - new uint[]{4163}, - new uint[]{4164}, - new uint[]{4165}, - new uint[]{4166}, - new uint[]{4167}, - new uint[]{4168}, - new uint[]{4109}, - new uint[]{4169}, - new uint[]{4170}, - new uint[]{4171}, - new uint[]{4172}, - new uint[]{4426}, - new uint[]{4342}, - new uint[]{4343}, - new uint[]{4344}, - new uint[]{4345}, - new uint[]{4388}, - new uint[]{4389}, - new uint[]{3919}, - new uint[]{3915}, - Array.Empty(), - new uint[]{4190}, - new uint[]{4190}, - new uint[]{4191}, - new uint[]{3045}, - new uint[]{4192}, - new uint[]{4193}, - new uint[]{365}, - new uint[]{398}, - new uint[]{106}, - new uint[]{117}, - new uint[]{4194}, - new uint[]{3929}, - new uint[]{3928}, - new uint[]{4195}, - new uint[]{4196}, - new uint[]{407}, - new uint[]{171}, - new uint[]{45}, - new uint[]{170}, - new uint[]{24}, - new uint[]{3854}, - new uint[]{3855}, - new uint[]{3856}, - new uint[]{3857}, - new uint[]{4424}, - new uint[]{3859}, - new uint[]{3860}, - new uint[]{3861}, - new uint[]{3862}, - new uint[]{3863}, - new uint[]{114}, - new uint[]{3476}, - new uint[]{3475}, - new uint[]{3478}, - new uint[]{3743}, - new uint[]{4116}, - new uint[]{4423}, - new uint[]{4126}, - new uint[]{4127}, - new uint[]{4197, 4198, 4199}, - new uint[]{4200}, - new uint[]{4201}, - new uint[]{4202}, - new uint[]{1440}, - new uint[]{4203}, - new uint[]{3888}, - new uint[]{4193}, - new uint[]{4204}, - Array.Empty(), - new uint[]{2147}, - new uint[]{4107}, - new uint[]{4173}, - new uint[]{4174}, - new uint[]{2096}, - new uint[]{4175}, - new uint[]{4176}, - new uint[]{1391}, - new uint[]{1392}, - Array.Empty(), - new uint[]{1393}, - new uint[]{1990}, - new uint[]{4184}, - new uint[]{4181}, - new uint[]{4182}, - new uint[]{4183}, - new uint[]{445}, - new uint[]{4189}, - new uint[]{3338}, - new uint[]{3326}, - new uint[]{3339}, - new uint[]{4193}, - new uint[]{4205}, - new uint[]{4206}, - new uint[]{4207}, - new uint[]{4208}, - new uint[]{4209}, - new uint[]{4220}, - new uint[]{4221}, - new uint[]{4222}, - new uint[]{4079, 4097, 4117}, - new uint[]{4101}, - new uint[]{4102}, - new uint[]{4035}, - new uint[]{3900, 4048, 4393}, - new uint[]{3902}, - new uint[]{3901}, - new uint[]{3900}, - new uint[]{3901}, - new uint[]{3902}, - new uint[]{3901}, - new uint[]{4109}, - Array.Empty(), - new uint[]{4068, 4100}, - new uint[]{4112}, - new uint[]{3908}, - new uint[]{3893}, - new uint[]{3894, 4123}, - new uint[]{3894, 4123}, - new uint[]{3894}, - new uint[]{3896}, - new uint[]{3895}, - new uint[]{3897}, - new uint[]{3898}, - new uint[]{3899}, - new uint[]{3900}, - new uint[]{3901}, - new uint[]{3901}, - new uint[]{3900}, - new uint[]{3900}, - new uint[]{3902}, - new uint[]{4030}, - new uint[]{4031}, - new uint[]{4032}, - new uint[]{4030}, - new uint[]{4033}, - new uint[]{4031}, - new uint[]{4034}, - new uint[]{4035}, - new uint[]{4107}, - new uint[]{4110}, - new uint[]{4111}, - new uint[]{4103}, - new uint[]{4104}, - new uint[]{4105}, - new uint[]{4106}, - new uint[]{3729}, - new uint[]{3730}, - new uint[]{3562}, - new uint[]{1273, 1275, 5660, 6159, 6399, 6402, 6403, 6533, 6544, 6560}, - new uint[]{1273, 6159, 6402, 6405, 6533, 6544, 8475, 8478}, - new uint[]{1275, 6398, 6399, 6402, 6404, 6535, 6560, 8478}, - new uint[]{1273, 1275, 6159, 6399, 6403, 6533, 6544}, - new uint[]{3995, 6159, 6399, 6405, 6533, 6535, 6560, 8477}, - new uint[]{108, 1275, 3889, 4005, 5660, 5797, 6156, 6406, 6478, 6479, 6534, 6541, 6547, 6556, 6654, 8675, 8676}, - new uint[]{3991, 4254, 6150, 6409, 6410, 6452, 6484, 6486, 6502, 6520, 8470, 8472}, - new uint[]{3976, 4410, 5660, 5791, 6156, 6399, 6412, 6481, 6484, 6520, 6537, 6543, 6559, 6655, 8470, 8471, 8473, 8479, 8480, 8481, 8675, 8676}, - new uint[]{5660, 6411}, - new uint[]{3891, 5660, 5791, 6398, 6399, 6417, 6421, 6520, 6557, 6558, 6653, 8470, 8471, 8473, 8479, 8480, 8482, 8483}, - new uint[]{4402}, - new uint[]{108, 3452}, - new uint[]{3656}, - new uint[]{3657}, - new uint[]{3656}, - new uint[]{3657}, - new uint[]{2085}, - new uint[]{2086}, - new uint[]{4269}, - new uint[]{4270}, - new uint[]{4271}, - new uint[]{4272}, - new uint[]{2086}, - new uint[]{3763}, - new uint[]{3762}, - new uint[]{3764}, - new uint[]{4193}, - new uint[]{4192}, - new uint[]{4204}, - new uint[]{4209}, - new uint[]{4212}, - new uint[]{4223}, - new uint[]{4224}, - new uint[]{3339}, - new uint[]{4225}, - new uint[]{4220}, - new uint[]{4149}, - new uint[]{4392}, - new uint[]{108, 9374, 9379, 9380, 9381, 9382, 9383, 9386, 9387, 9388, 9543, 10187}, - new uint[]{3745}, - new uint[]{3746}, - new uint[]{3747}, - new uint[]{3748}, - new uint[]{3749}, - new uint[]{3747, 3748, 3750}, - new uint[]{3493}, - new uint[]{3761}, - new uint[]{2667}, - Array.Empty(), - new uint[]{3602}, - new uint[]{3599}, - new uint[]{3600}, - new uint[]{3601}, - new uint[]{729}, - new uint[]{4130}, - new uint[]{3482, 4408}, - new uint[]{3569, 3694}, - new uint[]{3695}, - new uint[]{3570}, - new uint[]{657, 3587, 3631, 4044}, - new uint[]{3630}, - new uint[]{3616, 4043}, - new uint[]{3894}, - new uint[]{3178}, - new uint[]{3177}, - Array.Empty(), - Array.Empty(), - new uint[]{4113}, - new uint[]{4113}, - new uint[]{4085}, - new uint[]{3907}, - new uint[]{4287}, - new uint[]{3906}, - new uint[]{4089}, - new uint[]{3903, 4078}, - new uint[]{4057, 4062, 4334}, - new uint[]{4280}, - new uint[]{4087}, - new uint[]{3904, 4076}, - new uint[]{3904}, - new uint[]{3617}, - new uint[]{3905}, - new uint[]{3905}, - new uint[]{4047}, - new uint[]{4073, 4292}, - new uint[]{3623}, - new uint[]{3623}, - new uint[]{3623}, - new uint[]{4302}, - new uint[]{4279, 4297}, - new uint[]{4281}, - new uint[]{4058, 4063}, - new uint[]{4304}, - new uint[]{4303}, - new uint[]{4072}, - new uint[]{4086}, - new uint[]{4295}, - new uint[]{4298}, - new uint[]{4299}, - new uint[]{4236}, - new uint[]{4237}, - new uint[]{4238}, - new uint[]{4239}, - new uint[]{4324}, - new uint[]{4325}, - new uint[]{4326}, - new uint[]{4327}, - new uint[]{4328}, - new uint[]{4329}, - new uint[]{4330}, - new uint[]{4331}, - new uint[]{1808}, - new uint[]{4233}, - new uint[]{4234}, - new uint[]{3508}, - new uint[]{3558}, - new uint[]{3751, 3758}, - new uint[]{3469}, - new uint[]{4350}, - new uint[]{4351}, - new uint[]{4352}, - new uint[]{4353}, - new uint[]{4354}, - new uint[]{4355}, - new uint[]{4356}, - new uint[]{4357}, - new uint[]{4358}, - new uint[]{4359}, - new uint[]{4360}, - new uint[]{4361}, - new uint[]{4362}, - new uint[]{4363}, - new uint[]{4364}, - new uint[]{4365}, - new uint[]{4366}, - new uint[]{4367}, - new uint[]{4368}, - new uint[]{4369}, - new uint[]{4370}, - new uint[]{4371}, - new uint[]{4372}, - new uint[]{4373}, - new uint[]{4374}, - new uint[]{4375}, - new uint[]{4376}, - new uint[]{4377}, - new uint[]{4378}, - new uint[]{4380}, - new uint[]{729}, - new uint[]{4231}, - new uint[]{1893}, - new uint[]{1895}, - new uint[]{4232}, - new uint[]{2145}, - new uint[]{4099}, - new uint[]{1416}, - new uint[]{4226}, - new uint[]{4227}, - new uint[]{2204}, - new uint[]{4235}, - new uint[]{4236}, - new uint[]{4237}, - new uint[]{108}, - new uint[]{4316}, - new uint[]{4317}, - new uint[]{4318}, - new uint[]{4319}, - Array.Empty(), - new uint[]{3164}, - new uint[]{4241}, - new uint[]{4243}, - new uint[]{3171}, - new uint[]{3170}, - new uint[]{4493}, - new uint[]{3860}, - new uint[]{3861}, - new uint[]{4247}, - new uint[]{4247}, - new uint[]{4248}, - new uint[]{3863}, - new uint[]{4254}, - new uint[]{3860}, - new uint[]{3861}, - new uint[]{4253}, - new uint[]{4253}, - new uint[]{4253}, - new uint[]{3858}, - new uint[]{4255}, - new uint[]{3860}, - new uint[]{3861}, - new uint[]{3870}, - new uint[]{4249}, - new uint[]{4250}, - new uint[]{4251, 4421}, - new uint[]{794}, - new uint[]{1849}, - new uint[]{108}, - new uint[]{4491}, - new uint[]{4250}, - new uint[]{4251}, - new uint[]{3660}, - new uint[]{3660}, - new uint[]{4251}, - Array.Empty(), - Array.Empty(), - new uint[]{4029}, - new uint[]{4093}, - new uint[]{4090}, - new uint[]{4040, 4335}, - new uint[]{4041}, - new uint[]{1240, 1893, 3186, 4091, 4092, 4116, 4123}, - new uint[]{4038}, - new uint[]{4056}, - Array.Empty(), - new uint[]{4029}, - new uint[]{4036}, - new uint[]{4037}, - new uint[]{4039}, - new uint[]{4095}, - new uint[]{108}, - new uint[]{3725}, - new uint[]{3553}, - new uint[]{3628, 3669}, - Array.Empty(), - new uint[]{3164}, - new uint[]{4251}, - new uint[]{4242}, - new uint[]{4243}, - new uint[]{4244}, - new uint[]{4091}, - new uint[]{4245}, - new uint[]{4246}, - new uint[]{3171}, - new uint[]{3170}, - new uint[]{4256}, - new uint[]{4257}, - new uint[]{2077}, - new uint[]{2080}, - new uint[]{2076}, - new uint[]{4258}, - new uint[]{4259}, - new uint[]{4228}, - new uint[]{2204}, - new uint[]{4229}, - new uint[]{4230}, - new uint[]{1416}, - new uint[]{4226}, - new uint[]{4227}, - new uint[]{4379}, - new uint[]{4193}, - new uint[]{4204}, - new uint[]{4209}, - new uint[]{4210}, - new uint[]{4211}, - new uint[]{4212}, - new uint[]{4212}, - new uint[]{3888}, - new uint[]{1990}, - new uint[]{4203}, - new uint[]{3560, 3618, 3697}, - new uint[]{3518, 3546, 4018}, - new uint[]{3519, 3547}, - new uint[]{3520, 3548}, - new uint[]{3521, 3549}, - new uint[]{3522, 3550}, - new uint[]{4228}, - new uint[]{4312}, - new uint[]{4118, 4582}, - new uint[]{4081}, - new uint[]{4394}, - new uint[]{4395}, - new uint[]{4075}, - new uint[]{4077}, - new uint[]{4077}, - new uint[]{4080}, - new uint[]{4074}, - new uint[]{4311}, - new uint[]{4096}, - new uint[]{4098}, - new uint[]{4099}, - new uint[]{4081}, - new uint[]{4082}, - new uint[]{4083}, - new uint[]{4084}, - new uint[]{4119}, - new uint[]{4120}, - new uint[]{4121}, - new uint[]{787}, - new uint[]{2086}, - new uint[]{4218}, - new uint[]{4214}, - new uint[]{4213}, - new uint[]{4216}, - new uint[]{4219}, - new uint[]{4215}, - new uint[]{4217}, - new uint[]{3860}, - new uint[]{3861}, - new uint[]{3870}, - new uint[]{3871}, - new uint[]{3872}, - new uint[]{3873}, - new uint[]{3874}, - new uint[]{3875}, - new uint[]{3876}, - new uint[]{3877}, - new uint[]{3878}, - new uint[]{3879}, - new uint[]{3880}, - new uint[]{1724}, - new uint[]{4260}, - new uint[]{4261}, - new uint[]{4262}, - new uint[]{4263, 4264}, - new uint[]{4259}, - new uint[]{108}, - new uint[]{4265}, - new uint[]{4266}, - new uint[]{4267}, - new uint[]{4259}, - new uint[]{4322}, - new uint[]{3318}, - new uint[]{3317}, - new uint[]{4323}, - new uint[]{4321}, - new uint[]{108}, - new uint[]{4322}, - new uint[]{4322}, - new uint[]{4322}, - new uint[]{4322}, - new uint[]{4333}, - new uint[]{4333}, - new uint[]{3319}, - new uint[]{3319}, - new uint[]{3317}, - new uint[]{3317}, - new uint[]{4323}, - new uint[]{4332}, - new uint[]{4331}, - new uint[]{4321}, - new uint[]{3888}, - new uint[]{3773}, - new uint[]{3958, 3959, 4407}, - new uint[]{3960}, - Array.Empty(), - Array.Empty(), - new uint[]{3957}, - new uint[]{3956}, - new uint[]{3955}, - new uint[]{4412}, - new uint[]{3949, 3954}, - new uint[]{3953}, - Array.Empty(), - new uint[]{4417}, - new uint[]{3950}, - new uint[]{3948}, - new uint[]{3951, 3952}, - new uint[]{3861}, - new uint[]{3860}, - new uint[]{3864}, - new uint[]{4425}, - new uint[]{1400}, - new uint[]{3865}, - new uint[]{3129}, - new uint[]{3866}, - new uint[]{3867}, - new uint[]{3868}, - new uint[]{3869}, - new uint[]{4313}, - new uint[]{4313}, - new uint[]{4300}, - new uint[]{5533}, - new uint[]{4314}, - new uint[]{4055}, - new uint[]{4066}, - new uint[]{4065}, - new uint[]{4051}, - new uint[]{4315}, - new uint[]{4124}, - new uint[]{1402}, - new uint[]{3887}, - new uint[]{3892}, - new uint[]{3888, 3889, 3890}, - new uint[]{3891}, - new uint[]{3965}, - new uint[]{3964}, - new uint[]{3983}, - new uint[]{3962}, - new uint[]{3946}, - new uint[]{3783}, - Array.Empty(), - Array.Empty(), - new uint[]{114}, - new uint[]{3474}, - new uint[]{3471, 3684}, - new uint[]{3475, 3488}, - new uint[]{3478, 3685}, - new uint[]{3470}, - new uint[]{3476}, - new uint[]{3477, 3680}, - new uint[]{3472}, - new uint[]{3473, 3682}, - new uint[]{3499, 4406}, - new uint[]{3495, 4011}, - new uint[]{3494}, - new uint[]{3497}, - new uint[]{3496}, - new uint[]{3498}, - new uint[]{56}, - Array.Empty(), - new uint[]{3937, 4012, 4416}, - new uint[]{3944}, - new uint[]{3943}, - Array.Empty(), - new uint[]{3942}, - new uint[]{3941}, - new uint[]{3940}, - new uint[]{3939}, - Array.Empty(), - new uint[]{3938}, - new uint[]{3936}, - new uint[]{3935}, - new uint[]{3934}, - new uint[]{1640}, - new uint[]{3881}, - new uint[]{3882}, - new uint[]{3883}, - new uint[]{3884}, - new uint[]{3885}, - new uint[]{3886}, - new uint[]{4192}, - new uint[]{3477}, - new uint[]{3474}, - new uint[]{3952}, - new uint[]{3659}, - Array.Empty(), - new uint[]{3781}, - new uint[]{3410}, - new uint[]{3410}, - Array.Empty(), - Array.Empty(), - new uint[]{3982}, - new uint[]{3981}, - new uint[]{3980}, - new uint[]{3984}, - new uint[]{3984}, - new uint[]{3979}, - new uint[]{3978}, - new uint[]{3975}, - new uint[]{3974}, - Array.Empty(), - new uint[]{3973}, - new uint[]{3972}, - new uint[]{3971}, - new uint[]{3970}, - new uint[]{3969}, - new uint[]{3968}, - new uint[]{3967}, - new uint[]{108}, - new uint[]{4419}, - new uint[]{3968}, - new uint[]{538}, - new uint[]{4009}, - new uint[]{4008}, - new uint[]{4006}, - Array.Empty(), - new uint[]{4002, 4004}, - new uint[]{4003}, - new uint[]{4001, 4418}, - new uint[]{4000}, - new uint[]{3999}, - new uint[]{3998}, - new uint[]{3997}, - new uint[]{4405}, - new uint[]{4404}, - new uint[]{4403}, - new uint[]{3996}, - new uint[]{3564}, - new uint[]{3993}, - new uint[]{3992}, - new uint[]{3990}, - new uint[]{3988}, - new uint[]{3988}, - new uint[]{3987}, - new uint[]{3986}, - new uint[]{3985}, - new uint[]{1640}, - new uint[]{3881}, - new uint[]{3882}, - new uint[]{1402}, - new uint[]{1403}, - new uint[]{1404}, - new uint[]{1402}, - new uint[]{1403}, - new uint[]{1404}, - new uint[]{3882}, - new uint[]{3789}, - new uint[]{3780}, - new uint[]{108}, - new uint[]{3780}, - new uint[]{3765}, - new uint[]{3766}, - new uint[]{3770}, - new uint[]{3769}, - new uint[]{3768}, - new uint[]{3765}, - new uint[]{108}, - new uint[]{108}, - new uint[]{3660}, - new uint[]{3660}, - new uint[]{3753}, - new uint[]{3752}, - new uint[]{3758}, - new uint[]{115}, - Array.Empty(), - Array.Empty(), - new uint[]{3716}, - new uint[]{3717}, - new uint[]{3718}, - new uint[]{3719}, - new uint[]{3720}, - new uint[]{3679}, - new uint[]{3679}, - new uint[]{3686}, - new uint[]{3686}, - new uint[]{3689}, - new uint[]{3687}, - new uint[]{3692}, - new uint[]{3692}, - new uint[]{3701}, - new uint[]{3709}, - new uint[]{2838}, - new uint[]{3773}, - new uint[]{3853}, - new uint[]{3853}, - new uint[]{4341}, - new uint[]{4398}, - new uint[]{4428}, - new uint[]{4429}, - new uint[]{4430}, - new uint[]{4431}, - new uint[]{4432}, - new uint[]{4433}, - new uint[]{4434}, - new uint[]{4435}, - new uint[]{4436}, - new uint[]{4437}, - new uint[]{4438}, - new uint[]{4439}, - new uint[]{4440}, - new uint[]{4441}, - new uint[]{4442}, - new uint[]{4443}, - new uint[]{4444}, - new uint[]{4445}, - new uint[]{4446}, - new uint[]{4447}, - new uint[]{4448}, - new uint[]{4449}, - new uint[]{4450}, - new uint[]{4451}, - new uint[]{4452}, - new uint[]{4453}, - new uint[]{4454}, - new uint[]{4455}, - new uint[]{4456}, - new uint[]{4457}, - new uint[]{4458}, - new uint[]{4459}, - new uint[]{4460}, - new uint[]{4461}, - new uint[]{4462}, - new uint[]{4463}, - new uint[]{4464}, - new uint[]{4465}, - new uint[]{4466}, - new uint[]{4467}, - new uint[]{4468}, - new uint[]{4469}, - new uint[]{4470}, - new uint[]{4471}, - new uint[]{4472}, - new uint[]{4473}, - new uint[]{4474}, - new uint[]{4475}, - new uint[]{4476}, - new uint[]{4477}, - new uint[]{4478}, - new uint[]{4479}, - new uint[]{4480}, - new uint[]{4481}, - new uint[]{4482}, - new uint[]{4483}, - new uint[]{4484}, - new uint[]{4485}, - new uint[]{4486}, - new uint[]{4487}, - new uint[]{4488}, - new uint[]{4897}, - new uint[]{5046}, - new uint[]{5047}, - new uint[]{4026}, - new uint[]{4025}, - new uint[]{4024}, - new uint[]{4023}, - new uint[]{4022}, - new uint[]{4021}, - new uint[]{4020}, - new uint[]{3545, 4019}, - new uint[]{4017}, - new uint[]{4016}, - new uint[]{4015}, - new uint[]{4014}, - new uint[]{4013}, - new uint[]{4243}, - new uint[]{4243}, - new uint[]{4243}, - new uint[]{4243}, - new uint[]{4010}, - new uint[]{4397}, - new uint[]{114}, - new uint[]{795}, - new uint[]{3410}, - new uint[]{3410}, - new uint[]{3410}, - new uint[]{4239}, - new uint[]{108}, - new uint[]{108, 3789}, - new uint[]{731}, - new uint[]{3790}, - new uint[]{3180, 4034}, - new uint[]{3181}, - new uint[]{4115}, - new uint[]{1239, 4091, 4092, 4305, 4309, 4310}, - new uint[]{1895, 4422}, - new uint[]{3187, 4123}, - new uint[]{4123, 4310}, - new uint[]{1239, 4067, 4850}, - new uint[]{4307, 4422}, - new uint[]{1240, 1893, 4306}, - new uint[]{4079, 4088, 4097, 4308}, - Array.Empty(), - new uint[]{4067, 4851}, - new uint[]{4282}, - new uint[]{4027}, - new uint[]{4028}, - new uint[]{3738}, - new uint[]{3948, 4415}, - Array.Empty(), - new uint[]{3444}, - new uint[]{3654, 3655}, - new uint[]{4414}, - new uint[]{4413}, - Array.Empty(), - new uint[]{3784}, - Array.Empty(), - new uint[]{4411}, - new uint[]{4007}, - Array.Empty(), - Array.Empty(), - new uint[]{3676}, - new uint[]{3677}, - new uint[]{3678}, - new uint[]{3681}, - new uint[]{3683}, - new uint[]{3660}, - new uint[]{3660}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{2901}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{3983}, - new uint[]{116}, - new uint[]{113}, - new uint[]{114}, - new uint[]{115, 3961}, - new uint[]{3480, 3491, 4409}, - new uint[]{4624}, - new uint[]{4624}, - new uint[]{4623}, - new uint[]{4625}, - new uint[]{4631}, - new uint[]{4632}, - new uint[]{4633}, - new uint[]{4635}, - new uint[]{4613}, - new uint[]{4609}, - new uint[]{4610}, - new uint[]{4612}, - new uint[]{4613}, - Array.Empty(), - new uint[]{4607}, - new uint[]{4608}, - new uint[]{4609}, - new uint[]{4611}, - new uint[]{108}, - new uint[]{4551}, - new uint[]{4552}, - new uint[]{4553}, - new uint[]{4554}, - new uint[]{4568}, - new uint[]{4555}, - new uint[]{4556}, - new uint[]{4557}, - new uint[]{4558}, - new uint[]{4559}, - new uint[]{4560}, - new uint[]{4561}, - new uint[]{4562}, - new uint[]{4563}, - new uint[]{4564}, - new uint[]{4565}, - new uint[]{4566}, - new uint[]{4626}, - new uint[]{4627}, - new uint[]{4630}, - new uint[]{4628}, - new uint[]{4629}, - new uint[]{4626}, - new uint[]{2564}, - new uint[]{4622}, - new uint[]{4620}, - new uint[]{4621}, - Array.Empty(), - new uint[]{4636}, - new uint[]{4637}, - new uint[]{4638}, - new uint[]{4639}, - new uint[]{4640}, - new uint[]{4641}, - new uint[]{4642}, - new uint[]{4643}, - new uint[]{4644}, - new uint[]{4645}, - new uint[]{4646}, - new uint[]{4646}, - new uint[]{4647}, - new uint[]{4648}, - new uint[]{4649}, - new uint[]{4650}, - new uint[]{4651}, - new uint[]{4653}, - new uint[]{4654}, - new uint[]{4655}, - new uint[]{4656}, - new uint[]{4657}, - new uint[]{4658}, - new uint[]{4659}, - new uint[]{4660}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{4568}, - new uint[]{4568}, - new uint[]{4567}, - new uint[]{4568}, - new uint[]{4568}, - new uint[]{4569}, - new uint[]{4570}, - new uint[]{4571}, - Array.Empty(), - new uint[]{4572}, - new uint[]{4573}, - new uint[]{4574}, - new uint[]{4570}, - new uint[]{4575}, - new uint[]{4576}, - new uint[]{4577}, - new uint[]{4578}, - new uint[]{4579}, - new uint[]{4580}, - new uint[]{108}, - new uint[]{4614}, - new uint[]{4616}, - new uint[]{4619}, - new uint[]{4617}, - new uint[]{4618}, - new uint[]{3632}, - new uint[]{3633}, - new uint[]{3634}, - new uint[]{3635}, - new uint[]{3636}, - new uint[]{3637}, - new uint[]{3638}, - new uint[]{3639}, - new uint[]{3640}, - new uint[]{3641}, - new uint[]{3642}, - new uint[]{3643}, - new uint[]{3644}, - new uint[]{3645}, - new uint[]{4386}, - new uint[]{4387}, - new uint[]{3632, 3639, 3640, 3641, 3642, 3644, 3645}, - new uint[]{4634}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{4652}, - new uint[]{108, 6291, 6292, 6431, 6432, 6439, 6442, 6444, 6448, 6451, 6476, 6494, 6504, 6508, 6510, 6512, 6526, 6527, 6547, 8479, 9401, 10808, 10809, 10829}, - new uint[]{4334, 4583}, - new uint[]{4335, 4584}, - new uint[]{4585}, - new uint[]{4587}, - new uint[]{4586}, - new uint[]{4603}, - new uint[]{4588}, - new uint[]{4589}, - new uint[]{4590}, - new uint[]{4591}, - new uint[]{4592, 4682}, - new uint[]{4593}, - new uint[]{4594}, - new uint[]{4562}, - new uint[]{4581}, - new uint[]{4563}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{4666}, - new uint[]{4671}, - new uint[]{4672}, - new uint[]{4673}, - new uint[]{4597}, - new uint[]{3841}, - new uint[]{3841}, - new uint[]{4401}, - new uint[]{3843}, - new uint[]{4401}, - new uint[]{3842}, - new uint[]{3842}, - new uint[]{3843}, - new uint[]{3843}, - new uint[]{4598}, - new uint[]{4599}, - new uint[]{4130}, - new uint[]{729}, - new uint[]{713}, - new uint[]{4595}, - new uint[]{4596}, - new uint[]{4670}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{4600}, - new uint[]{4602}, - new uint[]{4602}, - new uint[]{4600}, - new uint[]{4601}, - new uint[]{4600}, - Array.Empty(), - new uint[]{4653}, - new uint[]{4654}, - new uint[]{3842}, - new uint[]{108}, - new uint[]{4578}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{4744}, - new uint[]{4839}, - new uint[]{4745}, - new uint[]{4746}, - new uint[]{4747}, - new uint[]{4748}, - new uint[]{4749}, - new uint[]{4750}, - new uint[]{4751}, - new uint[]{4752}, - new uint[]{4753}, - new uint[]{4754}, - new uint[]{4755}, - new uint[]{4756}, - new uint[]{4757}, - new uint[]{4758}, - new uint[]{4759}, - new uint[]{4760}, - new uint[]{4761}, - new uint[]{4776}, - new uint[]{4776}, - new uint[]{4777}, - new uint[]{4778}, - new uint[]{4779}, - new uint[]{4780}, - new uint[]{4776}, - new uint[]{4687}, - new uint[]{3646}, - new uint[]{4791}, - new uint[]{4791}, - new uint[]{4688}, - Array.Empty(), - new uint[]{4690}, - new uint[]{4762}, - new uint[]{4794}, - new uint[]{4798}, - new uint[]{4799}, - new uint[]{4800}, - new uint[]{4795}, - new uint[]{4801}, - new uint[]{736}, - new uint[]{4802}, - new uint[]{4803}, - new uint[]{4804}, - new uint[]{4796}, - new uint[]{4805}, - new uint[]{4806}, - new uint[]{4807}, - new uint[]{4808}, - new uint[]{4810}, - new uint[]{4809}, - new uint[]{4813}, - new uint[]{4811}, - new uint[]{4812}, - new uint[]{3376}, - new uint[]{4692}, - new uint[]{4775}, - new uint[]{4694}, - new uint[]{3749}, - new uint[]{3774}, - new uint[]{3746}, - new uint[]{4698}, - new uint[]{4695}, - new uint[]{3745}, - new uint[]{4709}, - new uint[]{4838}, - new uint[]{4699}, - new uint[]{4700}, - new uint[]{4700}, - new uint[]{4700}, - new uint[]{4773}, - new uint[]{4703}, - new uint[]{4704}, - new uint[]{4818}, - new uint[]{4817}, - new uint[]{4816}, - new uint[]{4705}, - new uint[]{4769}, - new uint[]{4770}, - new uint[]{4772}, - new uint[]{4691}, - new uint[]{4771}, - new uint[]{4706}, - new uint[]{4768}, - new uint[]{4820}, - new uint[]{4699, 4703, 4704, 4705, 4706, 4764}, - new uint[]{4707}, - new uint[]{3778}, - new uint[]{3776}, - new uint[]{3777}, - new uint[]{4699}, - new uint[]{4700}, - new uint[]{4706}, - new uint[]{4705}, - new uint[]{4703}, - new uint[]{4704}, - new uint[]{4817}, - new uint[]{4816}, - new uint[]{4708}, - Array.Empty(), - new uint[]{4820}, - new uint[]{4773}, - new uint[]{4819}, - new uint[]{4703, 4705, 4706, 4707, 4708, 4764}, - new uint[]{4813}, - new uint[]{4730}, - new uint[]{4729}, - new uint[]{4733}, - new uint[]{4734}, - new uint[]{4732}, - new uint[]{4732}, - new uint[]{4729}, - new uint[]{4733}, - new uint[]{4731}, - new uint[]{4728}, - new uint[]{4727}, - new uint[]{4725, 4726}, - new uint[]{4725}, - new uint[]{4728}, - new uint[]{4725}, - new uint[]{108}, - new uint[]{108}, - new uint[]{4735}, - new uint[]{4736}, - new uint[]{4737}, - new uint[]{4738}, - new uint[]{4739}, - new uint[]{4739}, - new uint[]{4740}, - new uint[]{4741}, - new uint[]{4742}, - new uint[]{4743}, - new uint[]{541}, - new uint[]{4765}, - new uint[]{4766}, - new uint[]{4767}, - new uint[]{4784}, - new uint[]{4785}, - new uint[]{4957}, - new uint[]{4956}, - new uint[]{4955}, - new uint[]{4952}, - new uint[]{4953}, - new uint[]{5043}, - new uint[]{4815}, - new uint[]{4896}, - new uint[]{4954}, - new uint[]{2667}, - new uint[]{4782}, - new uint[]{541}, - new uint[]{4784}, - new uint[]{4782}, - new uint[]{4814}, - new uint[]{4784}, - new uint[]{4785}, - new uint[]{4786}, - new uint[]{4784}, - new uint[]{4786}, - new uint[]{4782}, - new uint[]{4784}, - new uint[]{4781}, - new uint[]{4782}, - new uint[]{4784}, - new uint[]{4785}, - new uint[]{4786}, - new uint[]{4781}, - new uint[]{4782}, - new uint[]{4784}, - new uint[]{4785}, - new uint[]{4781}, - new uint[]{4782}, - new uint[]{4784}, - Array.Empty(), - new uint[]{4786}, - new uint[]{4781}, - new uint[]{4782}, - new uint[]{4784}, - Array.Empty(), - new uint[]{4814}, - new uint[]{4781}, - new uint[]{4782}, - new uint[]{4784}, - new uint[]{4781}, - new uint[]{4784}, - new uint[]{4786}, - new uint[]{4781}, - new uint[]{4783}, - new uint[]{4784}, - new uint[]{4785}, - new uint[]{4781}, - new uint[]{4783}, - new uint[]{4781}, - new uint[]{4783}, - new uint[]{4782}, - new uint[]{4787}, - new uint[]{4788}, - new uint[]{4789}, - Array.Empty(), - new uint[]{2667}, - new uint[]{4687}, - new uint[]{3646}, - new uint[]{4688}, - Array.Empty(), - new uint[]{4690}, - new uint[]{4797}, - new uint[]{4701}, - new uint[]{4702}, - new uint[]{4697}, - Array.Empty(), - new uint[]{4710}, - new uint[]{4711}, - new uint[]{4712}, - new uint[]{4712}, - new uint[]{4713}, - new uint[]{4714}, - new uint[]{4715}, - new uint[]{4716}, - new uint[]{4717}, - new uint[]{4718}, - new uint[]{4719}, - new uint[]{4721}, - new uint[]{4720}, - new uint[]{4724}, - new uint[]{4713}, - new uint[]{4723}, - new uint[]{4722}, - new uint[]{3745}, - new uint[]{4709}, - new uint[]{4776}, - new uint[]{4776}, - new uint[]{4777}, - new uint[]{4778}, - new uint[]{4779}, - new uint[]{4780}, - new uint[]{4776}, - new uint[]{4782}, - Array.Empty(), - new uint[]{3376}, - new uint[]{4692}, - new uint[]{4775}, - new uint[]{4694}, - new uint[]{3749}, - new uint[]{3774}, - new uint[]{3746}, - new uint[]{4698}, - new uint[]{4695}, - new uint[]{2667}, - new uint[]{4691}, - new uint[]{4693}, - new uint[]{3758}, - new uint[]{4772}, - new uint[]{4774}, - new uint[]{4699}, - new uint[]{4700}, - new uint[]{4773}, - new uint[]{4703}, - new uint[]{4705}, - new uint[]{4706}, - new uint[]{4768}, - new uint[]{4820}, - new uint[]{4699, 4703, 4705, 4706, 4764}, - new uint[]{4707}, - new uint[]{3778}, - new uint[]{3776}, - new uint[]{3777}, - new uint[]{4699}, - new uint[]{4700}, - new uint[]{4706}, - new uint[]{4705}, - new uint[]{4703}, - new uint[]{4708}, - new uint[]{4773}, - new uint[]{4705, 4706, 4707, 4708, 4764}, - new uint[]{4811}, - new uint[]{4812}, - new uint[]{4811}, - new uint[]{4812}, - new uint[]{4787}, - new uint[]{4788}, - new uint[]{4821}, - new uint[]{4822, 4823, 4824, 4825}, - new uint[]{4826, 4827, 4828, 4829, 4830, 4831, 4832, 4833, 4834, 4835, 4836, 4837, 4840, 4841, 4842, 4843, 4844, 4845}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{3458}, - new uint[]{3458}, - Array.Empty(), - new uint[]{4963}, - new uint[]{4962}, - new uint[]{3460}, - new uint[]{3459}, - new uint[]{4960}, - new uint[]{4961}, - new uint[]{4959}, - new uint[]{3458, 3459, 4962, 4963}, - new uint[]{4943}, - new uint[]{4944}, - new uint[]{4945}, - new uint[]{4946}, - new uint[]{4947}, - new uint[]{4948}, - new uint[]{4949}, - new uint[]{4950}, - new uint[]{4951}, - new uint[]{4928}, - new uint[]{4929}, - new uint[]{4932}, - new uint[]{4933}, - new uint[]{4931}, - new uint[]{4930}, - new uint[]{4936}, - new uint[]{4935}, - new uint[]{4937}, - new uint[]{4934}, - new uint[]{4939}, - new uint[]{4938}, - new uint[]{4940}, - new uint[]{4942}, - new uint[]{4954}, - new uint[]{4941}, - new uint[]{4855}, - new uint[]{4856}, - new uint[]{4857}, - new uint[]{4858}, - new uint[]{4859}, - new uint[]{4860}, - new uint[]{4861}, - new uint[]{4854}, - new uint[]{4853}, - new uint[]{4852}, - new uint[]{3818}, - new uint[]{3819}, - new uint[]{3820}, - new uint[]{4489}, - new uint[]{5045}, - new uint[]{1492}, - new uint[]{729}, - new uint[]{4846}, - new uint[]{4847}, - new uint[]{4878}, - new uint[]{4879}, - new uint[]{4880}, - new uint[]{4881}, - new uint[]{4882}, - Array.Empty(), - new uint[]{4884}, - new uint[]{4885}, - new uint[]{4886}, - new uint[]{4887}, - new uint[]{4878}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{4942}, - new uint[]{4871}, - new uint[]{4848}, - new uint[]{4907}, - new uint[]{5589}, - new uint[]{4908}, - Array.Empty(), - Array.Empty(), - new uint[]{4909}, - new uint[]{5048}, - new uint[]{5049}, - new uint[]{4910}, - new uint[]{4849}, - new uint[]{4911}, - new uint[]{4911}, - new uint[]{4912}, - new uint[]{4913}, - new uint[]{4914}, - new uint[]{4915}, - new uint[]{4916}, - new uint[]{4888}, - new uint[]{4889}, - new uint[]{4890}, - new uint[]{4891}, - new uint[]{4892}, - new uint[]{4893}, - new uint[]{4894}, - new uint[]{4958}, - new uint[]{2095}, - new uint[]{4895}, - new uint[]{5050}, - new uint[]{5051}, - new uint[]{108, 4965, 5055}, - new uint[]{5052}, - new uint[]{5053}, - new uint[]{4966}, - new uint[]{4967}, - new uint[]{4968}, - new uint[]{4969}, - new uint[]{4970}, - new uint[]{4971}, - new uint[]{4972}, - new uint[]{5044}, - new uint[]{4897}, - new uint[]{4898}, - new uint[]{4899}, - new uint[]{4900}, - new uint[]{4901}, - new uint[]{4902}, - new uint[]{4903}, - new uint[]{4904}, - new uint[]{4862}, - new uint[]{4863}, - new uint[]{4864}, - new uint[]{4865}, - new uint[]{4866}, - new uint[]{4867}, - new uint[]{4868}, - new uint[]{4869}, - new uint[]{4870}, - new uint[]{4872}, - new uint[]{4873}, - new uint[]{4874}, - new uint[]{4875}, - new uint[]{4877}, - new uint[]{4871}, - new uint[]{5056}, - new uint[]{4911}, - new uint[]{5057}, - new uint[]{4876}, - new uint[]{4973}, - new uint[]{4974}, - new uint[]{4905}, - new uint[]{4905}, - new uint[]{4905}, - new uint[]{4906}, - new uint[]{4901}, - new uint[]{108}, - new uint[]{5054}, - Array.Empty(), - new uint[]{5479}, - new uint[]{4975}, - new uint[]{4976}, - new uint[]{4977}, - new uint[]{4978}, - new uint[]{4979}, - new uint[]{4980}, - new uint[]{4981}, - new uint[]{4982}, - new uint[]{4983}, - new uint[]{4984}, - new uint[]{4985}, - new uint[]{4986}, - new uint[]{4987}, - new uint[]{4988}, - new uint[]{4989}, - new uint[]{4990}, - new uint[]{4991}, - new uint[]{4992}, - new uint[]{4993}, - new uint[]{4994}, - new uint[]{4995}, - new uint[]{4996}, - new uint[]{4997}, - new uint[]{4998}, - new uint[]{4999}, - new uint[]{5000}, - new uint[]{5001}, - new uint[]{5002}, - new uint[]{5003}, - new uint[]{5004}, - new uint[]{5005}, - new uint[]{5006}, - new uint[]{5007}, - new uint[]{5008}, - new uint[]{5009}, - new uint[]{5010}, - new uint[]{5011}, - new uint[]{5012}, - new uint[]{5013}, - new uint[]{5014}, - new uint[]{5015}, - new uint[]{5016}, - new uint[]{5017}, - new uint[]{5018}, - new uint[]{5019}, - new uint[]{5020}, - new uint[]{5021}, - new uint[]{5022}, - new uint[]{5023}, - new uint[]{5024}, - new uint[]{5025}, - new uint[]{5026}, - new uint[]{5027}, - new uint[]{5028}, - new uint[]{5029}, - new uint[]{5030}, - new uint[]{5031}, - new uint[]{5032}, - new uint[]{5033}, - new uint[]{5034}, - new uint[]{5035}, - new uint[]{5036}, - new uint[]{5037}, - new uint[]{5038}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - Array.Empty(), - new uint[]{5041}, - new uint[]{5041}, - new uint[]{5041}, - new uint[]{5041}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{3458}, - new uint[]{3458}, - Array.Empty(), - Array.Empty(), - new uint[]{3459}, - new uint[]{4960}, - new uint[]{4961}, - new uint[]{4959}, - new uint[]{3458, 3459}, - new uint[]{5039}, - new uint[]{5040}, - new uint[]{5058}, - new uint[]{5059}, - new uint[]{5060}, - new uint[]{5060}, - new uint[]{5060}, - new uint[]{5060}, - new uint[]{5061}, - new uint[]{5061}, - new uint[]{5061}, - new uint[]{5061}, - new uint[]{5061}, - new uint[]{5061}, - new uint[]{5062}, - new uint[]{5063}, - new uint[]{5064}, - new uint[]{5065}, - new uint[]{5066}, - new uint[]{5066}, - new uint[]{5066}, - new uint[]{5066}, - new uint[]{5067}, - new uint[]{5068}, - new uint[]{5069}, - new uint[]{5070}, - Array.Empty(), - new uint[]{5072}, - new uint[]{5073}, - new uint[]{5074}, - new uint[]{5075}, - new uint[]{5076}, - new uint[]{5077}, - new uint[]{5078}, - new uint[]{5079}, - new uint[]{5080}, - new uint[]{5081}, - new uint[]{5082}, - new uint[]{5083}, - new uint[]{5084}, - new uint[]{5085}, - new uint[]{5086}, - new uint[]{5087}, - new uint[]{5088}, - new uint[]{5089}, - new uint[]{5090}, - new uint[]{5091}, - new uint[]{5092}, - new uint[]{5093}, - new uint[]{5094}, - new uint[]{5095}, - new uint[]{5096}, - new uint[]{5097}, - new uint[]{5098}, - new uint[]{5099}, - new uint[]{5100}, - new uint[]{5101}, - new uint[]{5102}, - new uint[]{5103}, - new uint[]{5104}, - new uint[]{5105}, - new uint[]{5106}, - new uint[]{5107}, - new uint[]{5108}, - new uint[]{5109}, - new uint[]{5110}, - new uint[]{5111}, - new uint[]{5112}, - new uint[]{5113}, - new uint[]{5114}, - new uint[]{5115}, - new uint[]{5116}, - new uint[]{5117}, - new uint[]{5118}, - new uint[]{5119}, - new uint[]{5120}, - new uint[]{5121}, - new uint[]{5122}, - new uint[]{5123}, - new uint[]{5124}, - new uint[]{5125}, - new uint[]{5126}, - new uint[]{5127}, - new uint[]{5128}, - new uint[]{5129}, - new uint[]{5130}, - new uint[]{5131}, - new uint[]{5132}, - new uint[]{5133}, - new uint[]{5134}, - new uint[]{5135}, - new uint[]{5136}, - new uint[]{5137}, - new uint[]{5138}, - new uint[]{5139}, - new uint[]{5140}, - new uint[]{5141}, - new uint[]{5142}, - new uint[]{5143}, - new uint[]{5144}, - new uint[]{5145}, - new uint[]{5146}, - new uint[]{5147}, - new uint[]{5148}, - new uint[]{5149}, - new uint[]{5150}, - new uint[]{5151}, - new uint[]{5152}, - new uint[]{5153}, - new uint[]{5154}, - new uint[]{5155}, - new uint[]{5156}, - new uint[]{5157}, - new uint[]{5158}, - new uint[]{5159}, - new uint[]{5160}, - new uint[]{5161}, - new uint[]{5162}, - new uint[]{5163}, - new uint[]{5164}, - new uint[]{5165}, - new uint[]{5166}, - new uint[]{5167}, - new uint[]{4981}, - new uint[]{5030}, - Array.Empty(), - new uint[]{108}, - new uint[]{5216}, - new uint[]{5278}, - new uint[]{5279}, - new uint[]{5280}, - new uint[]{5218}, - Array.Empty(), - Array.Empty(), - new uint[]{5219}, - new uint[]{5220}, - new uint[]{4895}, - new uint[]{5221}, - new uint[]{5222}, - new uint[]{5223}, - new uint[]{5224}, - new uint[]{5225}, - new uint[]{5226}, - new uint[]{5227}, - new uint[]{5228}, - new uint[]{5229}, - new uint[]{5230}, - new uint[]{5231}, - new uint[]{5232}, - new uint[]{5233}, - new uint[]{5234}, - new uint[]{5235}, - new uint[]{5236}, - new uint[]{5237}, - new uint[]{5238}, - new uint[]{5061}, - new uint[]{5061}, - new uint[]{5061}, - new uint[]{5168}, - new uint[]{5085}, - new uint[]{5085}, - new uint[]{5085}, - new uint[]{5199}, - new uint[]{5201}, - new uint[]{5200}, - new uint[]{5202}, - new uint[]{5203}, - new uint[]{5204}, - new uint[]{4914}, - new uint[]{5199}, - new uint[]{5201}, - new uint[]{5202}, - new uint[]{5203}, - new uint[]{5204}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{5265}, - new uint[]{5266}, - new uint[]{5267}, - new uint[]{5268}, - new uint[]{5269}, - new uint[]{5270}, - Array.Empty(), - new uint[]{5272}, - new uint[]{5259}, - new uint[]{1644}, - new uint[]{5186}, - new uint[]{5186}, - new uint[]{5187}, - new uint[]{5188}, - new uint[]{5189}, - new uint[]{5190}, - new uint[]{5246}, - new uint[]{5247}, - new uint[]{5251}, - new uint[]{5252}, - new uint[]{5253}, - Array.Empty(), - new uint[]{5257}, - new uint[]{5255}, - new uint[]{5256}, - new uint[]{5258}, - new uint[]{5254}, - new uint[]{5260}, - new uint[]{5259}, - new uint[]{5264}, - new uint[]{5262}, - new uint[]{5261}, - new uint[]{5263}, - new uint[]{5193}, - new uint[]{5194}, - new uint[]{5195}, - new uint[]{5196}, - new uint[]{5197}, - new uint[]{5193}, - new uint[]{108}, - new uint[]{5195}, - new uint[]{5196}, - new uint[]{5197}, - new uint[]{5198}, - new uint[]{5174, 5193}, - new uint[]{4130}, - new uint[]{4392}, - new uint[]{5239}, - new uint[]{713}, - new uint[]{1492}, - new uint[]{5240}, - new uint[]{5241}, - new uint[]{5244}, - new uint[]{5242}, - new uint[]{5243}, - Array.Empty(), - new uint[]{3306}, - new uint[]{5274}, - new uint[]{3647}, - new uint[]{3648}, - Array.Empty(), - new uint[]{5169}, - new uint[]{5170}, - new uint[]{5171}, - new uint[]{5172}, - new uint[]{5173}, - new uint[]{1385}, - new uint[]{3749}, - new uint[]{5176}, - new uint[]{5277}, - new uint[]{5178}, - new uint[]{5170}, - new uint[]{5180}, - new uint[]{5181}, - new uint[]{5182}, - new uint[]{5183}, - new uint[]{5184}, - new uint[]{5185}, - new uint[]{4698, 5180, 5182, 5209}, - new uint[]{5186}, - new uint[]{5186}, - new uint[]{5187}, - new uint[]{5188}, - new uint[]{5189}, - Array.Empty(), - new uint[]{5192}, - Array.Empty(), - Array.Empty(), - new uint[]{5179}, - new uint[]{5191}, - new uint[]{541}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{5181}, - Array.Empty(), - new uint[]{5207}, - new uint[]{5208}, - new uint[]{4691}, - new uint[]{5206}, - new uint[]{5175}, - new uint[]{3468}, - new uint[]{5205}, - new uint[]{5180}, - new uint[]{5182}, - new uint[]{5185}, - Array.Empty(), - new uint[]{5184}, - new uint[]{4698, 5180, 5182, 5209}, - new uint[]{5356}, - new uint[]{5357}, - new uint[]{5358}, - new uint[]{5359}, - Array.Empty(), - Array.Empty(), - new uint[]{5193}, - new uint[]{5194}, - new uint[]{5195}, - new uint[]{5197}, - new uint[]{5194}, - new uint[]{5174, 5193}, - new uint[]{5309}, - new uint[]{5321}, - new uint[]{5333}, - new uint[]{5345}, - new uint[]{5371}, - new uint[]{5384}, - new uint[]{5397}, - new uint[]{5410}, - new uint[]{5424}, - new uint[]{5438}, - new uint[]{5449}, - new uint[]{5461}, - new uint[]{5471}, - new uint[]{4996}, - new uint[]{5299}, - new uint[]{5300}, - new uint[]{5301}, - new uint[]{5302}, - new uint[]{5303}, - new uint[]{5304}, - new uint[]{5305}, - new uint[]{5306}, - new uint[]{5307}, - new uint[]{5308}, - new uint[]{5311}, - new uint[]{5312}, - new uint[]{5313}, - new uint[]{5004}, - new uint[]{5314}, - new uint[]{5315}, - new uint[]{5316}, - new uint[]{5317}, - new uint[]{5318}, - new uint[]{5319}, - new uint[]{5320}, - new uint[]{5322}, - new uint[]{5323}, - new uint[]{5324}, - new uint[]{5325}, - new uint[]{5326}, - new uint[]{5327}, - new uint[]{5328}, - new uint[]{5329}, - new uint[]{5330}, - new uint[]{5331}, - new uint[]{5332}, - new uint[]{5334}, - new uint[]{5335}, - new uint[]{5336}, - new uint[]{5337}, - new uint[]{5338}, - new uint[]{5339}, - new uint[]{5340}, - new uint[]{5341}, - new uint[]{5342}, - new uint[]{5343}, - new uint[]{5344}, - new uint[]{5346}, - new uint[]{5347}, - new uint[]{5348}, - new uint[]{5349}, - new uint[]{5350}, - new uint[]{5351}, - new uint[]{4979}, - new uint[]{5352}, - new uint[]{5353}, - new uint[]{5354}, - new uint[]{5355}, - new uint[]{5480}, - new uint[]{5360}, - new uint[]{5361}, - new uint[]{5362}, - new uint[]{5363}, - new uint[]{5364}, - new uint[]{5365}, - new uint[]{5366}, - new uint[]{5367}, - new uint[]{5368}, - new uint[]{5369}, - new uint[]{5370}, - new uint[]{5372}, - new uint[]{5373}, - new uint[]{5374}, - new uint[]{5375}, - new uint[]{5376}, - new uint[]{5377}, - new uint[]{5378}, - new uint[]{5379}, - new uint[]{5380}, - new uint[]{5381}, - new uint[]{5382}, - new uint[]{5383}, - new uint[]{5385}, - new uint[]{5386}, - new uint[]{5387}, - new uint[]{5388}, - new uint[]{5389}, - new uint[]{5390}, - new uint[]{5391}, - new uint[]{5392}, - new uint[]{5393}, - new uint[]{5394}, - new uint[]{5395}, - new uint[]{5396}, - new uint[]{5398}, - new uint[]{5399}, - new uint[]{5400}, - new uint[]{5401}, - new uint[]{5402}, - new uint[]{5403}, - new uint[]{5404}, - new uint[]{5405}, - new uint[]{5406}, - new uint[]{5407}, - new uint[]{5408}, - new uint[]{5409}, - new uint[]{5412}, - new uint[]{5413}, - new uint[]{5414}, - new uint[]{5415}, - new uint[]{5416}, - new uint[]{5417}, - new uint[]{5418}, - new uint[]{5419}, - new uint[]{5420}, - new uint[]{5421}, - new uint[]{5422}, - new uint[]{5423}, - new uint[]{5381}, - new uint[]{5429}, - new uint[]{5430}, - new uint[]{5431}, - new uint[]{5432}, - new uint[]{5433}, - new uint[]{5406}, - new uint[]{5434}, - new uint[]{5435}, - new uint[]{5436}, - new uint[]{5437}, - new uint[]{5439}, - new uint[]{5440}, - new uint[]{5441}, - new uint[]{5389}, - new uint[]{5442}, - new uint[]{5443}, - new uint[]{5444}, - new uint[]{5445}, - new uint[]{5446}, - new uint[]{5447}, - new uint[]{5448}, - new uint[]{5450}, - new uint[]{5451}, - new uint[]{5452}, - new uint[]{5453}, - new uint[]{5454}, - new uint[]{5455}, - new uint[]{5456}, - new uint[]{5457}, - new uint[]{5458}, - new uint[]{5459}, - new uint[]{5460}, - new uint[]{5462}, - new uint[]{5463}, - new uint[]{5440}, - new uint[]{5464}, - new uint[]{5465}, - new uint[]{5466}, - new uint[]{5467}, - new uint[]{5480}, - new uint[]{5468}, - new uint[]{5469}, - new uint[]{5470}, - new uint[]{5401}, - new uint[]{5474}, - new uint[]{5420}, - new uint[]{5415}, - new uint[]{5472}, - new uint[]{5473}, - new uint[]{5364}, - new uint[]{5409}, - new uint[]{5475}, - new uint[]{5422}, - new uint[]{5423}, - new uint[]{3467}, - new uint[]{5169}, - new uint[]{5170}, - new uint[]{5171}, - new uint[]{5172}, - new uint[]{5173}, - new uint[]{5176}, - new uint[]{5277}, - new uint[]{5179}, - Array.Empty(), - new uint[]{5217}, - new uint[]{108, 510, 1482, 2210, 2564, 2618, 2632, 3210, 3305, 3308, 5629, 5631, 5633, 5640, 5641, 5642, 6037, 6038, 6039, 6052, 6070, 6071, 6072, 6087, 6088, 6089, 6090, 6104, 6115, 6117, 6118, 6119, 6120, 6133, 6153, 6177, 6216, 6237, 6241, 6243, 6263, 6266, 6267, 6268, 6274, 6275, 6307, 6308, 6309, 6311, 6321, 6333, 6338, 6345, 6347, 6352, 6385, 6795, 6907, 6908, 6910, 6922, 6924, 6925, 6929, 6941, 6950, 6970, 6994, 6995, 6996, 7055, 7056, 7057, 7058, 7070, 7092, 7093, 7096, 7097, 7101, 7102, 7103, 7104, 7107, 7117, 7118, 7126, 7127, 7131, 7132, 7133, 7135, 7179, 7180, 7181, 7202, 7203, 7206, 7221, 7223, 7225, 7237, 7244, 7245, 7400, 7640, 7689, 7863, 7958, 9225, 9650, 9958, 9990, 10315, 11072, 11143}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{5310}, - Array.Empty(), - new uint[]{4578}, - new uint[]{4580}, - new uint[]{5477}, - new uint[]{5425}, - new uint[]{5426}, - new uint[]{5427}, - new uint[]{5428}, - new uint[]{4170}, - new uint[]{5333, 5461}, - new uint[]{4579}, - new uint[]{4580}, - new uint[]{5477}, - new uint[]{5042, 5625, 7395}, - new uint[]{5292}, - new uint[]{5293}, - new uint[]{5294}, - new uint[]{5297}, - new uint[]{5290}, - new uint[]{5291}, - new uint[]{5295}, - new uint[]{5283}, - new uint[]{5296}, - new uint[]{5298}, - new uint[]{5289}, - new uint[]{5288}, - new uint[]{5286}, - new uint[]{5285}, - new uint[]{5287}, - new uint[]{5284}, - new uint[]{5366}, - new uint[]{5411}, - new uint[]{2564}, - new uint[]{5526}, - new uint[]{2564}, - new uint[]{5523}, - new uint[]{2568}, - new uint[]{5522}, - new uint[]{5524}, - new uint[]{5525}, - new uint[]{5507}, - new uint[]{5508}, - new uint[]{5507}, - new uint[]{3725}, - new uint[]{5529}, - new uint[]{5585}, - new uint[]{5586}, - new uint[]{5530}, - new uint[]{5587}, - new uint[]{5531}, - new uint[]{5532}, - new uint[]{5534}, - new uint[]{5535}, - new uint[]{5536}, - new uint[]{5537}, - new uint[]{5538}, - new uint[]{5539}, - new uint[]{3805}, - new uint[]{5540}, - new uint[]{5541}, - new uint[]{5542}, - new uint[]{5543}, - new uint[]{3797}, - new uint[]{5544}, - new uint[]{5545}, - new uint[]{5509}, - new uint[]{5510}, - new uint[]{5511}, - new uint[]{5512}, - new uint[]{5513}, - new uint[]{5514}, - new uint[]{5509}, - new uint[]{2096}, - new uint[]{5567}, - new uint[]{5567}, - new uint[]{5568}, - new uint[]{5569}, - new uint[]{5570}, - new uint[]{5571}, - new uint[]{5572}, - new uint[]{5567}, - new uint[]{5560}, - new uint[]{5561}, - new uint[]{5562}, - new uint[]{5563}, - new uint[]{5554}, - new uint[]{5564}, - new uint[]{5565}, - new uint[]{5566}, - new uint[]{5547}, - new uint[]{5548}, - Array.Empty(), - new uint[]{5550}, - new uint[]{5551}, - new uint[]{5552}, - new uint[]{5546}, - new uint[]{5553}, - new uint[]{5557}, - new uint[]{5554}, - new uint[]{5555}, - new uint[]{5556}, - new uint[]{5558}, - new uint[]{5559}, - new uint[]{3281}, - new uint[]{5515}, - new uint[]{5516}, - Array.Empty(), - new uint[]{5517}, - new uint[]{5519}, - new uint[]{5518}, - new uint[]{5521}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{4686}, - new uint[]{5476}, - new uint[]{5573}, - new uint[]{5574}, - new uint[]{5575}, - new uint[]{5576}, - new uint[]{5576}, - new uint[]{5577}, - new uint[]{5578}, - new uint[]{5579}, - new uint[]{5580}, - new uint[]{5581}, - new uint[]{5582}, - new uint[]{5583}, - new uint[]{3780}, - new uint[]{3782}, - new uint[]{3781}, - new uint[]{3780}, - new uint[]{5276}, - new uint[]{3780}, - new uint[]{5515}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{5640}, - new uint[]{5549}, - new uint[]{5550}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{5502}, - new uint[]{5503}, - new uint[]{5504}, - new uint[]{5505}, - Array.Empty(), - Array.Empty(), - new uint[]{5567}, - new uint[]{5567}, - new uint[]{5568}, - new uint[]{5569}, - new uint[]{5570}, - Array.Empty(), - new uint[]{5572}, - new uint[]{5567}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{2096}, - Array.Empty(), - Array.Empty(), - new uint[]{628}, - new uint[]{6014}, - new uint[]{6015}, - new uint[]{6017}, - new uint[]{6018}, - new uint[]{6019}, - new uint[]{108}, - new uint[]{5520}, - new uint[]{108}, - new uint[]{5689, 6353}, - new uint[]{5690}, - new uint[]{5691}, - new uint[]{6145}, - new uint[]{5718, 5767}, - new uint[]{5696}, - new uint[]{5698, 5731}, - new uint[]{5699, 5706, 6429}, - new uint[]{5704, 5709}, - Array.Empty(), - Array.Empty(), - new uint[]{5716}, - new uint[]{5717}, - new uint[]{5681, 5694}, - Array.Empty(), - Array.Empty(), - new uint[]{5700, 5710}, - Array.Empty(), - new uint[]{5672, 5692}, - Array.Empty(), - new uint[]{5684}, - new uint[]{5787, 6485}, - new uint[]{5719, 6797}, - new uint[]{5683}, - new uint[]{5674}, - new uint[]{5711}, - new uint[]{5705}, - new uint[]{5701}, - new uint[]{5712}, - new uint[]{5721}, - new uint[]{5720}, - new uint[]{5688}, - new uint[]{5707}, - new uint[]{5722}, - new uint[]{113}, - new uint[]{115}, - new uint[]{56}, - new uint[]{117}, - new uint[]{116}, - new uint[]{5733}, - new uint[]{108}, - new uint[]{5743, 5832, 6477, 6483}, - new uint[]{5744, 6477, 6483, 6489}, - new uint[]{5745, 6483, 6489}, - new uint[]{5747, 5766, 5849}, - new uint[]{5739, 5897}, - Array.Empty(), - new uint[]{5768, 6528}, - new uint[]{5755, 6518}, - new uint[]{5776}, - new uint[]{5769, 6509, 6525, 6731}, - Array.Empty(), - new uint[]{5782}, - Array.Empty(), - new uint[]{5756, 5770, 6529}, - new uint[]{5773, 6799}, - new uint[]{6141}, - new uint[]{5752, 6519}, - new uint[]{5753, 6519}, - new uint[]{5754, 6519}, - new uint[]{5734}, - new uint[]{5735, 5899}, - new uint[]{5775}, - Array.Empty(), - new uint[]{5758, 5786, 6288}, - Array.Empty(), - new uint[]{5783, 6521}, - new uint[]{5777}, - new uint[]{5736}, - new uint[]{5737, 5900}, - new uint[]{5738, 6798}, - new uint[]{5746, 6729}, - new uint[]{5749, 5774, 6550}, - new uint[]{5778}, - new uint[]{5728}, - new uint[]{5714}, - new uint[]{5715}, - new uint[]{5685}, - new uint[]{5693, 6796}, - Array.Empty(), - Array.Empty(), - new uint[]{5686}, - new uint[]{6775}, - Array.Empty(), - new uint[]{5726}, - new uint[]{5732, 6741}, - new uint[]{5680}, - new uint[]{5697, 6280}, - new uint[]{5687}, - new uint[]{5713}, - new uint[]{5708}, - new uint[]{5702}, - new uint[]{5723}, - new uint[]{5724}, - new uint[]{5725}, - new uint[]{5729}, - new uint[]{5730}, - new uint[]{5751, 6730}, - new uint[]{5750}, - new uint[]{5740, 6505, 6722}, - new uint[]{5741, 5784, 5887}, - Array.Empty(), - new uint[]{5748, 5759, 5771}, - new uint[]{5760, 5772}, - new uint[]{5761, 6728}, - new uint[]{5762}, - Array.Empty(), - new uint[]{5764}, - new uint[]{5836, 6507}, - new uint[]{5765}, - new uint[]{5779, 5941}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{5785}, - new uint[]{5780}, - new uint[]{5781}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{6426}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{5727}, - new uint[]{5675, 6776}, - Array.Empty(), - Array.Empty(), - new uint[]{5954}, - new uint[]{6378}, - new uint[]{6381}, - new uint[]{6382}, - new uint[]{6383}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{5590}, - new uint[]{5591}, - new uint[]{5592}, - new uint[]{5650}, - new uint[]{5576}, - new uint[]{5651}, - new uint[]{5652}, - new uint[]{5670}, - new uint[]{108}, - new uint[]{6154}, - new uint[]{4133}, - new uint[]{5239}, - new uint[]{5656}, - new uint[]{5657}, - new uint[]{5658}, - new uint[]{5659}, - new uint[]{5660}, - new uint[]{5661}, - new uint[]{5662}, - new uint[]{5239}, - new uint[]{4130}, - new uint[]{6146}, - new uint[]{6143}, - new uint[]{6144}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{5540}, - new uint[]{6144}, - new uint[]{6147}, - Array.Empty(), - new uint[]{5643}, - new uint[]{5629}, - new uint[]{5629}, - new uint[]{5630}, - new uint[]{108}, - new uint[]{6142}, - new uint[]{6085}, - new uint[]{6086}, - new uint[]{6087}, - new uint[]{6088}, - new uint[]{6089}, - new uint[]{6090}, - new uint[]{6675}, - new uint[]{6676}, - new uint[]{6691, 6787}, - new uint[]{6691, 6787}, - new uint[]{6786}, - new uint[]{108}, - new uint[]{3237}, - new uint[]{6677}, - new uint[]{5970}, - new uint[]{5659}, - new uint[]{5964}, - new uint[]{5965}, - new uint[]{5966}, - new uint[]{5967}, - new uint[]{5953}, - new uint[]{5968}, - new uint[]{5969}, - new uint[]{5950}, - new uint[]{5951}, - new uint[]{1768}, - new uint[]{6342}, - new uint[]{6091}, - new uint[]{3305}, - new uint[]{6093}, - new uint[]{6075}, - new uint[]{6075}, - new uint[]{6076}, - new uint[]{6077}, - new uint[]{6078}, - new uint[]{6079}, - new uint[]{6080}, - new uint[]{6081}, - new uint[]{6082}, - new uint[]{6083}, - new uint[]{6084}, - new uint[]{5630}, - new uint[]{6173}, - new uint[]{6174}, - new uint[]{6175}, - new uint[]{6175}, - new uint[]{6176}, - new uint[]{6177}, - new uint[]{6178}, - new uint[]{6180}, - new uint[]{6155}, - new uint[]{6181}, - new uint[]{6182}, - new uint[]{6263}, - new uint[]{6264}, - new uint[]{6265}, - new uint[]{6266}, - new uint[]{6267}, - new uint[]{6268}, - new uint[]{6269}, - new uint[]{6270}, - new uint[]{5984}, - new uint[]{5985}, - new uint[]{5986}, - new uint[]{5987}, - new uint[]{5988}, - new uint[]{5989}, - new uint[]{5990}, - new uint[]{5991}, - new uint[]{5992}, - new uint[]{5993}, - new uint[]{5994}, - new uint[]{5995}, - new uint[]{5996}, - new uint[]{5997}, - new uint[]{5998}, - new uint[]{5999}, - new uint[]{6000}, - new uint[]{6001}, - new uint[]{6002}, - new uint[]{6003}, - new uint[]{6004}, - new uint[]{6005}, - new uint[]{6006}, - new uint[]{6007}, - new uint[]{6008}, - new uint[]{6009}, - new uint[]{6010}, - new uint[]{6011}, - new uint[]{6012}, - new uint[]{6013}, - new uint[]{6674}, - new uint[]{9083, 9088, 9090, 9095, 9096, 9099, 9103, 9107, 9109, 9113, 9117}, - new uint[]{9070, 9074, 9083, 9089, 9092, 9094, 9104, 9107, 9109, 9114, 9119, 9123, 9125}, - new uint[]{9070, 9079, 9087, 9088, 9089, 9093, 9099, 9100, 9105, 9106, 9107, 9111, 9114, 9117, 9120, 9122, 9124}, - new uint[]{9068, 9079, 9085, 9086, 9091, 9098, 9102, 9105, 9110, 9122}, - new uint[]{9072, 9077, 9088, 9090, 9097, 9113, 9118}, - new uint[]{9082, 9093, 9094, 9100, 9103, 9104, 9111, 9125}, - new uint[]{9069, 9080, 9084, 9089, 9093, 9095, 9101, 9108, 9111, 9115, 9119, 9123}, - new uint[]{9075, 9076, 9081, 9087, 9088, 9099, 9102, 9103, 9112, 9121}, - new uint[]{9080, 9081, 9084, 9087, 9088, 9093, 9102, 9103, 9105, 9107, 9113, 9114, 9115, 9120, 9125}, - new uint[]{6352}, - new uint[]{6049}, - new uint[]{6050}, - new uint[]{6051}, - new uint[]{5645}, - new uint[]{6045}, - new uint[]{6342}, - new uint[]{6341}, - new uint[]{6672}, - new uint[]{6673}, - new uint[]{1854}, - new uint[]{6691, 6787}, - new uint[]{108, 3649}, - new uint[]{6346}, - new uint[]{6341}, - new uint[]{5648}, - new uint[]{6662}, - new uint[]{6658}, - new uint[]{6659}, - new uint[]{6660}, - new uint[]{1501}, - new uint[]{108}, - new uint[]{4865}, - new uint[]{4866}, - new uint[]{4869}, - new uint[]{6391}, - new uint[]{6341}, - new uint[]{6669}, - new uint[]{6670}, - new uint[]{5972}, - new uint[]{6221}, - new uint[]{6221}, - new uint[]{108}, - new uint[]{6671}, - new uint[]{6071}, - new uint[]{6072}, - new uint[]{6073}, - new uint[]{6074}, - new uint[]{6058}, - new uint[]{6059}, - new uint[]{6060}, - new uint[]{6061}, - new uint[]{6062}, - new uint[]{6063}, - new uint[]{6064}, - new uint[]{6065}, - new uint[]{6066}, - new uint[]{6067}, - new uint[]{6068}, - new uint[]{6058}, - new uint[]{6069}, - new uint[]{6237}, - new uint[]{6238}, - new uint[]{6241}, - new uint[]{6243}, - new uint[]{6244}, - new uint[]{6246}, - new uint[]{5789}, - new uint[]{6275}, - new uint[]{6272}, - new uint[]{6279}, - new uint[]{6278}, - new uint[]{6277}, - Array.Empty(), - new uint[]{5641}, - new uint[]{5642}, - new uint[]{6226}, - new uint[]{6227}, - new uint[]{6228}, - new uint[]{6229}, - new uint[]{6384}, - new uint[]{6230}, - new uint[]{6231}, - new uint[]{6231}, - new uint[]{6232}, - new uint[]{6231}, - new uint[]{6233}, - new uint[]{6234}, - new uint[]{6235}, - new uint[]{6236}, - new uint[]{6335}, - new uint[]{6239}, - new uint[]{6146}, - new uint[]{5575}, - new uint[]{6148}, - new uint[]{6149}, - new uint[]{6156, 6158, 6790}, - new uint[]{6156, 6159}, - new uint[]{6157, 6158, 6160}, - new uint[]{6157, 6160}, - new uint[]{6161}, - new uint[]{6162, 6165}, - new uint[]{6163, 6165, 6791}, - new uint[]{6164}, - new uint[]{6163}, - new uint[]{6153}, - new uint[]{6152}, - new uint[]{5576}, - new uint[]{5562}, - new uint[]{6170}, - new uint[]{6208}, - new uint[]{6172}, - new uint[]{6336}, - new uint[]{6336}, - new uint[]{6153}, - new uint[]{6152}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{6566}, - Array.Empty(), - new uint[]{6166}, - new uint[]{6151}, - new uint[]{5973}, - Array.Empty(), - new uint[]{6307}, - new uint[]{6308}, - new uint[]{6309}, - new uint[]{4385}, - new uint[]{6310}, - new uint[]{6311}, - new uint[]{1420}, - new uint[]{6119}, - new uint[]{6120}, - new uint[]{6118}, - new uint[]{6117}, - new uint[]{6116}, - new uint[]{6115}, - new uint[]{6665}, - new uint[]{6242}, - new uint[]{6185}, - new uint[]{6186}, - new uint[]{6187}, - new uint[]{6188}, - new uint[]{6189}, - Array.Empty(), - new uint[]{6190}, - new uint[]{6191}, - new uint[]{6192}, - new uint[]{6193}, - Array.Empty(), - new uint[]{6194}, - new uint[]{6195}, - new uint[]{6196}, - new uint[]{713}, - new uint[]{4392}, - new uint[]{6146}, - new uint[]{4130}, - new uint[]{6102}, - new uint[]{6103}, - new uint[]{6097, 6250}, - new uint[]{6101}, - new uint[]{6098}, - new uint[]{6099}, - new uint[]{6100}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{6094}, - new uint[]{6094}, - new uint[]{6094}, - new uint[]{6097}, - new uint[]{6101}, - new uint[]{6098}, - new uint[]{6104}, - new uint[]{6108}, - Array.Empty(), - new uint[]{6140}, - new uint[]{6138}, - new uint[]{6139}, - new uint[]{6136}, - new uint[]{6137}, - new uint[]{6134}, - new uint[]{6135}, - new uint[]{6132}, - new uint[]{6131}, - new uint[]{6130}, - new uint[]{6129}, - new uint[]{6127}, - new uint[]{6128}, - new uint[]{6125}, - new uint[]{6124}, - new uint[]{6123}, - new uint[]{6122}, - new uint[]{6121}, - new uint[]{3920}, - new uint[]{3921}, - new uint[]{3922}, - new uint[]{3913}, - new uint[]{3912}, - new uint[]{6342}, - new uint[]{6668}, - new uint[]{3930}, - Array.Empty(), - new uint[]{6222}, - new uint[]{6221}, - new uint[]{6221}, - Array.Empty(), - new uint[]{6222}, - new uint[]{6223}, - new uint[]{6221, 6224}, - new uint[]{108}, - new uint[]{4420}, - new uint[]{6037}, - new uint[]{108}, - new uint[]{6038}, - new uint[]{6389}, - new uint[]{6389}, - new uint[]{6390}, - new uint[]{6039}, - new uint[]{6039}, - new uint[]{6041}, - new uint[]{6042}, - new uint[]{6040}, - new uint[]{6666}, - new uint[]{6114}, - new uint[]{331}, - new uint[]{6021}, - new uint[]{332}, - new uint[]{5666}, - Array.Empty(), - new uint[]{6342}, - new uint[]{6343}, - new uint[]{6248}, - new uint[]{6249}, - new uint[]{6250}, - new uint[]{6251}, - new uint[]{6252}, - Array.Empty(), - new uint[]{6254}, - new uint[]{6255}, - new uint[]{6256}, - new uint[]{6258}, - new uint[]{6259}, - new uint[]{6260}, - new uint[]{6261}, - new uint[]{6262}, - new uint[]{6257}, - new uint[]{5980}, - new uint[]{6088}, - new uint[]{3165}, - new uint[]{108, 6104}, - new uint[]{5667}, - new uint[]{6200}, - new uint[]{6200}, - new uint[]{6202}, - new uint[]{6201}, - new uint[]{6203}, - new uint[]{6203}, - new uint[]{6204}, - new uint[]{6204}, - new uint[]{6205}, - new uint[]{6205}, - new uint[]{6206}, - new uint[]{6206}, - new uint[]{6207}, - new uint[]{6170, 6171}, - new uint[]{6208}, - new uint[]{6209}, - new uint[]{6210}, - new uint[]{6211}, - new uint[]{6212}, - new uint[]{6213}, - new uint[]{6214}, - new uint[]{6215}, - new uint[]{6216}, - new uint[]{6170}, - new uint[]{6217}, - new uint[]{6218}, - new uint[]{6219}, - new uint[]{6220}, - new uint[]{6112}, - new uint[]{5764}, - new uint[]{6113}, - new uint[]{6113}, - new uint[]{6111}, - new uint[]{6289}, - new uint[]{6111}, - new uint[]{6111}, - new uint[]{6111}, - new uint[]{6710}, - new uint[]{6095}, - new uint[]{6095}, - new uint[]{6110}, - new uint[]{6105}, - new uint[]{6106}, - new uint[]{6107}, - new uint[]{6096}, - new uint[]{6096}, - new uint[]{6110}, - new uint[]{6105}, - new uint[]{6107}, - new uint[]{6114}, - new uint[]{331}, - new uint[]{6021}, - new uint[]{332}, - new uint[]{5666}, - new uint[]{6022}, - new uint[]{1416}, - new uint[]{4226}, - new uint[]{4227}, - new uint[]{823}, - new uint[]{828}, - new uint[]{751}, - new uint[]{108, 8395}, - new uint[]{6183}, - new uint[]{6184}, - new uint[]{331}, - new uint[]{6021}, - new uint[]{6328}, - new uint[]{6329}, - new uint[]{6330}, - new uint[]{6331}, - new uint[]{6324}, - new uint[]{6332}, - new uint[]{6333}, - new uint[]{6334}, - new uint[]{6332}, - new uint[]{6321}, - new uint[]{6322}, - new uint[]{6323}, - new uint[]{6324}, - new uint[]{6325}, - new uint[]{6326}, - new uint[]{108}, - new uint[]{108}, - new uint[]{6667}, - new uint[]{6224}, - new uint[]{6224}, - new uint[]{5790, 5797, 5798, 6355}, - new uint[]{5791, 6793, 6794}, - new uint[]{5793, 5794, 5795, 6792}, - new uint[]{5796, 6732}, - new uint[]{5799}, - new uint[]{5800}, - new uint[]{5801}, - new uint[]{5802}, - new uint[]{5806}, - new uint[]{5807}, - new uint[]{5808}, - new uint[]{5809}, - new uint[]{5810}, - new uint[]{5811}, - new uint[]{5812}, - new uint[]{2235, 5813}, - new uint[]{5814, 6785}, - new uint[]{5814, 6785}, - Array.Empty(), - new uint[]{2234}, - new uint[]{5815}, - new uint[]{5814, 6785}, - new uint[]{5814, 5872, 5946, 6785}, - new uint[]{5816}, - new uint[]{5819}, - new uint[]{5216}, - new uint[]{1402}, - new uint[]{1402}, - new uint[]{1403}, - new uint[]{3825}, - new uint[]{5822}, - new uint[]{5823}, - new uint[]{5824}, - new uint[]{5825}, - new uint[]{5826}, - new uint[]{1255, 5827, 5855, 5872, 6739}, - new uint[]{5828}, - Array.Empty(), - new uint[]{5975}, - new uint[]{5976}, - new uint[]{5977}, - new uint[]{4130}, - new uint[]{4392}, - new uint[]{6565}, - Array.Empty(), - new uint[]{108}, - new uint[]{6700}, - new uint[]{6701}, - new uint[]{1640}, - new uint[]{3881}, - new uint[]{6694}, - new uint[]{6702}, - new uint[]{6703}, - new uint[]{6704}, - new uint[]{6705}, - new uint[]{108}, - new uint[]{5979}, - new uint[]{5979}, - new uint[]{4331}, - new uint[]{4321}, - new uint[]{6300}, - new uint[]{4332, 5240, 6300, 6303, 6320}, - new uint[]{6301}, - new uint[]{6302}, - new uint[]{6303}, - new uint[]{6306}, - new uint[]{4332}, - new uint[]{6304}, - new uint[]{6304}, - new uint[]{6304}, - new uint[]{6304}, - new uint[]{5241}, - new uint[]{5243}, - new uint[]{5242}, - new uint[]{5244}, - new uint[]{6313}, - new uint[]{3849}, - new uint[]{4142}, - new uint[]{6314}, - new uint[]{6315}, - new uint[]{6316}, - new uint[]{4131}, - new uint[]{6317}, - new uint[]{3850}, - new uint[]{6318}, - new uint[]{6319}, - new uint[]{6320}, - new uint[]{5240}, - new uint[]{4130}, - new uint[]{4392}, - new uint[]{5239}, - new uint[]{6146}, - new uint[]{3204}, - new uint[]{5649}, - new uint[]{6306}, - new uint[]{6661}, - new uint[]{6656}, - new uint[]{6273}, - new uint[]{6225}, - new uint[]{6225}, - new uint[]{6276}, - new uint[]{6245}, - new uint[]{6706}, - new uint[]{5631}, - new uint[]{5632}, - new uint[]{6711}, - new uint[]{6712}, - Array.Empty(), - new uint[]{6385}, - new uint[]{6690}, - new uint[]{6386}, - Array.Empty(), - new uint[]{6388}, - new uint[]{6387}, - Array.Empty(), - new uint[]{6705}, - new uint[]{6705}, - new uint[]{6707}, - new uint[]{4130}, - new uint[]{4392}, - new uint[]{5239}, - new uint[]{4846}, - new uint[]{4740}, - new uint[]{5947}, - new uint[]{5948}, - new uint[]{5949}, - new uint[]{5950}, - new uint[]{5951}, - new uint[]{5952}, - new uint[]{5953}, - new uint[]{5954}, - new uint[]{5955}, - new uint[]{5956}, - new uint[]{5957}, - new uint[]{5958}, - new uint[]{5959}, - new uint[]{5960}, - new uint[]{5961}, - new uint[]{108}, - new uint[]{2147}, - new uint[]{6344}, - new uint[]{6345}, - new uint[]{4759}, - new uint[]{4760}, - new uint[]{4761}, - new uint[]{4762}, - new uint[]{6346}, - new uint[]{6408}, - new uint[]{6709}, - new uint[]{1640}, - new uint[]{3881}, - new uint[]{6694}, - new uint[]{6695}, - new uint[]{5682, 5695}, - Array.Empty(), - new uint[]{4236}, - new uint[]{4237}, - new uint[]{6686}, - new uint[]{6687}, - new uint[]{6688}, - new uint[]{6407}, - Array.Empty(), - new uint[]{6413}, - new uint[]{6414}, - new uint[]{6415}, - new uint[]{6416}, - new uint[]{6418}, - new uint[]{6422}, - new uint[]{6424}, - new uint[]{4427}, - new uint[]{5648}, - new uint[]{6419, 6420, 6423}, - Array.Empty(), - Array.Empty(), - new uint[]{6425}, - new uint[]{6696}, - new uint[]{5788, 5919}, - new uint[]{5742}, - new uint[]{5757}, - new uint[]{6697}, - new uint[]{6698}, - new uint[]{108}, - new uint[]{6699}, - new uint[]{6693}, - new uint[]{5962}, - new uint[]{5963}, - new uint[]{6347}, - new uint[]{6347}, - new uint[]{6351}, - new uint[]{6348}, - new uint[]{108}, - new uint[]{541}, - new uint[]{541}, - new uint[]{108}, - new uint[]{5633}, - new uint[]{5634}, - new uint[]{5635}, - new uint[]{5626}, - new uint[]{6724}, - new uint[]{6056}, - new uint[]{5636}, - new uint[]{5637}, - new uint[]{5633, 6056}, - new uint[]{6379}, - new uint[]{5954}, - new uint[]{5664}, - new uint[]{2096}, - new uint[]{628}, - new uint[]{5663}, - new uint[]{5665}, - new uint[]{5663}, - new uint[]{6385}, - new uint[]{6261}, - new uint[]{6392}, - new uint[]{6393}, - new uint[]{2096}, - new uint[]{6020}, - new uint[]{6016}, - new uint[]{6394}, - new uint[]{6395}, - new uint[]{6290}, - new uint[]{6290}, - new uint[]{6298}, - new uint[]{6293, 6294}, - new uint[]{2343}, - new uint[]{108, 6325, 6327, 8395}, - new uint[]{6453}, - new uint[]{6349}, - new uint[]{6350}, - new uint[]{6231}, - new uint[]{6231}, - new uint[]{6231}, - new uint[]{6231}, - new uint[]{5671}, - new uint[]{5678}, - new uint[]{5672}, - new uint[]{5673}, - new uint[]{5674}, - new uint[]{5675}, - new uint[]{5676}, - new uint[]{5677}, - new uint[]{5679}, - new uint[]{5680}, - new uint[]{5698}, - new uint[]{5699}, - new uint[]{5700}, - new uint[]{5701}, - new uint[]{5702}, - new uint[]{5703}, - new uint[]{113}, - new uint[]{115}, - new uint[]{56}, - Array.Empty(), - new uint[]{6052}, - new uint[]{6052}, - new uint[]{6053}, - new uint[]{6054}, - new uint[]{6055}, - new uint[]{6055}, - new uint[]{4815}, - new uint[]{6052, 6055}, - new uint[]{6385}, - Array.Empty(), - new uint[]{6686}, - new uint[]{6687}, - new uint[]{6688}, - new uint[]{6685}, - new uint[]{108}, - new uint[]{6689}, - new uint[]{5655}, - new uint[]{5653}, - new uint[]{5654}, - new uint[]{6337}, - new uint[]{6338}, - new uint[]{6339}, - new uint[]{6340}, - new uint[]{6340}, - new uint[]{6340}, - new uint[]{4237}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{5850}, - new uint[]{5851}, - new uint[]{5853}, - new uint[]{5854}, - new uint[]{5855}, - new uint[]{5856}, - new uint[]{3102}, - new uint[]{104, 105}, - new uint[]{5842, 5855, 5862, 5880, 5894, 6713, 6720, 6789}, - new uint[]{5860}, - new uint[]{5861, 6354}, - new uint[]{5861, 5913, 5938}, - new uint[]{5861, 5915}, - new uint[]{5842, 5863, 6714, 6740}, - new uint[]{3107}, - new uint[]{5865}, - new uint[]{3107}, - new uint[]{5865}, - new uint[]{5866}, - new uint[]{5866}, - new uint[]{5867}, - new uint[]{5868}, - new uint[]{5869}, - new uint[]{5838, 5870}, - new uint[]{5871}, - new uint[]{5777}, - new uint[]{5872, 5946}, - new uint[]{5873}, - new uint[]{5829, 5895, 5934}, - new uint[]{5874}, - new uint[]{5875}, - new uint[]{5800}, - new uint[]{5876}, - new uint[]{5805}, - new uint[]{5878}, - new uint[]{5806}, - Array.Empty(), - new uint[]{5882}, - new uint[]{5883}, - new uint[]{5883}, - new uint[]{5884}, - new uint[]{5885}, - new uint[]{3930}, - new uint[]{5839, 5886}, - new uint[]{5888}, - new uint[]{5889}, - new uint[]{5890}, - new uint[]{5891}, - new uint[]{5892}, - new uint[]{5916}, - new uint[]{5893}, - new uint[]{5896}, - Array.Empty(), - new uint[]{5901}, - new uint[]{5902}, - new uint[]{5903}, - new uint[]{5904}, - new uint[]{5905}, - new uint[]{5906}, - new uint[]{5907}, - new uint[]{5909}, - new uint[]{5841, 5981}, - Array.Empty(), - new uint[]{5910}, - new uint[]{5911}, - new uint[]{5912}, - new uint[]{5877}, - new uint[]{2234}, - new uint[]{6736}, - new uint[]{5830}, - Array.Empty(), - new uint[]{5833}, - new uint[]{5832}, - new uint[]{5834}, - new uint[]{5835}, - new uint[]{5837}, - new uint[]{5838}, - new uint[]{5804}, - Array.Empty(), - new uint[]{5841, 5893, 5946}, - new uint[]{5982}, - new uint[]{5843, 5983}, - new uint[]{5847}, - new uint[]{5848}, - new uint[]{108}, - new uint[]{6023}, - new uint[]{6024}, - new uint[]{6026}, - new uint[]{6025}, - new uint[]{6027}, - new uint[]{6028}, - new uint[]{6029}, - new uint[]{6030}, - new uint[]{6031}, - new uint[]{6032}, - new uint[]{6033}, - new uint[]{6034}, - new uint[]{6035}, - new uint[]{6035}, - new uint[]{6036}, - new uint[]{6737}, - new uint[]{6738}, - new uint[]{5660}, - new uint[]{6735}, - new uint[]{6471}, - new uint[]{6472}, - new uint[]{6474}, - new uint[]{6475}, - new uint[]{6480}, - new uint[]{6482}, - new uint[]{6492}, - new uint[]{6497}, - new uint[]{6455}, - new uint[]{6454}, - new uint[]{5644}, - new uint[]{6050}, - new uint[]{6051}, - new uint[]{5645}, - new uint[]{6045}, - new uint[]{5643}, - new uint[]{3860}, - new uint[]{5646}, - new uint[]{5647}, - new uint[]{5971}, - new uint[]{6043}, - new uint[]{6044}, - new uint[]{6146}, - new uint[]{5575}, - new uint[]{6148}, - new uint[]{6149}, - new uint[]{6159, 6162}, - new uint[]{6156}, - new uint[]{6046}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{6493}, - new uint[]{6556, 6557, 6558, 6559, 6653, 6654, 6655}, - new uint[]{108}, - new uint[]{108}, - new uint[]{6157}, - new uint[]{6163}, - new uint[]{6743}, - new uint[]{6744}, - new uint[]{6745}, - new uint[]{6746}, - new uint[]{6747}, - new uint[]{6748}, - new uint[]{6749}, - new uint[]{6750}, - new uint[]{6751}, - new uint[]{6752}, - new uint[]{6753}, - new uint[]{6754}, - new uint[]{6755}, - new uint[]{6756}, - new uint[]{6757}, - new uint[]{6758}, - new uint[]{6759}, - new uint[]{6760}, - new uint[]{6761}, - new uint[]{6762}, - new uint[]{6763}, - new uint[]{6764}, - new uint[]{6765}, - new uint[]{6766}, - new uint[]{6767}, - new uint[]{6768}, - new uint[]{6769}, - new uint[]{6770}, - new uint[]{6771}, - new uint[]{6772}, - new uint[]{6773}, - new uint[]{6774}, - new uint[]{6433}, - new uint[]{6434}, - new uint[]{6435}, - Array.Empty(), - new uint[]{6438}, - new uint[]{6440}, - new uint[]{6441}, - new uint[]{6443}, - new uint[]{6445}, - new uint[]{6446}, - new uint[]{6447}, - new uint[]{6449}, - new uint[]{6450}, - new uint[]{6503}, - new uint[]{6506}, - Array.Empty(), - new uint[]{6513}, - new uint[]{6514}, - new uint[]{6515}, - new uint[]{6516}, - new uint[]{6517}, - new uint[]{6522}, - new uint[]{6523}, - new uint[]{6524}, - new uint[]{6047}, - new uint[]{5633}, - new uint[]{5634}, - new uint[]{6724}, - new uint[]{3293}, - new uint[]{6048}, - new uint[]{5644}, - new uint[]{6377}, - new uint[]{6364}, - new uint[]{6365}, - new uint[]{6366}, - new uint[]{108}, - new uint[]{108}, - new uint[]{6385}, - new uint[]{6690}, - new uint[]{6386}, - new uint[]{6385}, - new uint[]{108}, - new uint[]{6473}, - new uint[]{4144}, - new uint[]{4192}, - new uint[]{6367}, - new uint[]{6368}, - new uint[]{6369}, - new uint[]{6156, 6790}, - new uint[]{6159}, - new uint[]{6163, 6791}, - new uint[]{6715}, - new uint[]{2147}, - new uint[]{4760}, - new uint[]{5978}, - new uint[]{6716}, - new uint[]{3257}, - new uint[]{3258}, - new uint[]{3259}, - new uint[]{3262}, - new uint[]{3264}, - new uint[]{1486}, - new uint[]{1418}, - new uint[]{1502}, - new uint[]{6057}, - new uint[]{3374}, - new uint[]{5625}, - new uint[]{5625}, - new uint[]{5626}, - new uint[]{5627}, - Array.Empty(), - new uint[]{108}, - new uint[]{6718}, - new uint[]{108}, - new uint[]{6719}, - new uint[]{6530}, - new uint[]{6531}, - new uint[]{6536}, - new uint[]{6538}, - new uint[]{6539}, - new uint[]{6542}, - new uint[]{6545}, - new uint[]{6546}, - new uint[]{6548}, - new uint[]{6551}, - new uint[]{6552}, - new uint[]{6553}, - new uint[]{6555}, - new uint[]{6549}, - new uint[]{5777}, - Array.Empty(), - new uint[]{6499}, - new uint[]{5753}, - new uint[]{6500}, - new uint[]{6495}, - new uint[]{5748}, - Array.Empty(), - Array.Empty(), - new uint[]{5631}, - new uint[]{6711}, - new uint[]{6712}, - new uint[]{3164}, - new uint[]{3133}, - new uint[]{6678}, - new uint[]{3138}, - new uint[]{3129}, - new uint[]{6679}, - new uint[]{6680}, - new uint[]{6680}, - new uint[]{6680}, - new uint[]{3165}, - new uint[]{4144}, - new uint[]{4192}, - new uint[]{4204}, - new uint[]{6375}, - new uint[]{6370, 6376}, - new uint[]{6371}, - new uint[]{6372}, - new uint[]{6372}, - new uint[]{6373}, - new uint[]{6374}, - new uint[]{6681}, - new uint[]{1501}, - new uint[]{108}, - new uint[]{6052}, - new uint[]{6052}, - new uint[]{6053}, - new uint[]{6054}, - new uint[]{6566}, - new uint[]{5970}, - new uint[]{4130}, - new uint[]{713}, - new uint[]{6357}, - new uint[]{6358}, - new uint[]{6470}, - new uint[]{6356}, - new uint[]{5721}, - new uint[]{6359}, - new uint[]{6281}, - new uint[]{5841}, - new uint[]{6283}, - new uint[]{6284}, - new uint[]{6285}, - new uint[]{6286}, - new uint[]{6287}, - new uint[]{5792}, - new uint[]{5914}, - new uint[]{5818}, - new uint[]{5916}, - new uint[]{5918}, - new uint[]{5920}, - new uint[]{5921}, - new uint[]{5922}, - new uint[]{5923}, - new uint[]{5924}, - new uint[]{5925}, - new uint[]{5926}, - new uint[]{5927}, - new uint[]{5798}, - new uint[]{5929}, - new uint[]{5930}, - new uint[]{5931}, - new uint[]{5932}, - new uint[]{5933}, - new uint[]{5934, 6282}, - new uint[]{5935}, - Array.Empty(), - new uint[]{5937}, - new uint[]{5939}, - new uint[]{5940}, - new uint[]{5942}, - new uint[]{5943}, - Array.Empty(), - new uint[]{5944}, - new uint[]{5945}, - Array.Empty(), - new uint[]{6111}, - new uint[]{6683}, - new uint[]{6684}, - new uint[]{6684}, - new uint[]{108}, - new uint[]{6360}, - new uint[]{6361}, - new uint[]{6362}, - new uint[]{6363}, - new uint[]{6657}, - new uint[]{6102}, - new uint[]{6097, 6250}, - new uint[]{6098}, - new uint[]{6101}, - new uint[]{5719}, - new uint[]{5723}, - new uint[]{4392}, - new uint[]{5954}, - new uint[]{108}, - new uint[]{6567}, - new uint[]{6568}, - new uint[]{6569}, - new uint[]{6570}, - new uint[]{6571}, - new uint[]{6572}, - new uint[]{6573}, - new uint[]{6574}, - new uint[]{6575}, - new uint[]{6576}, - new uint[]{6577}, - new uint[]{6578}, - new uint[]{6579}, - new uint[]{6580}, - new uint[]{6581}, - new uint[]{6582}, - new uint[]{6583}, - new uint[]{6584}, - new uint[]{6585}, - new uint[]{6586}, - new uint[]{6587}, - new uint[]{6588}, - new uint[]{6589}, - new uint[]{6590}, - new uint[]{6591}, - new uint[]{6592}, - new uint[]{6593}, - new uint[]{6594}, - new uint[]{6595}, - new uint[]{6596}, - new uint[]{6597}, - new uint[]{6598}, - new uint[]{6599}, - new uint[]{6600}, - new uint[]{6601}, - new uint[]{6602}, - new uint[]{6582}, - new uint[]{6603}, - new uint[]{6604}, - new uint[]{6605}, - new uint[]{6606}, - new uint[]{6607}, - new uint[]{6608}, - new uint[]{6609}, - new uint[]{6610}, - new uint[]{6611}, - new uint[]{6612}, - new uint[]{6585}, - new uint[]{6613}, - new uint[]{6614}, - new uint[]{6615}, - new uint[]{6616}, - new uint[]{6617}, - new uint[]{6618}, - new uint[]{6619}, - new uint[]{6620}, - new uint[]{6621}, - new uint[]{6622}, - new uint[]{6623}, - new uint[]{6624}, - new uint[]{6625}, - new uint[]{6626}, - new uint[]{6627}, - new uint[]{6628}, - new uint[]{6629}, - new uint[]{6630}, - new uint[]{6631}, - new uint[]{6632}, - new uint[]{6633}, - new uint[]{6634}, - new uint[]{6635}, - new uint[]{6636}, - new uint[]{6637}, - new uint[]{6638}, - new uint[]{6639}, - new uint[]{6640}, - new uint[]{6641}, - new uint[]{6642}, - new uint[]{6585}, - new uint[]{6643}, - new uint[]{6644}, - new uint[]{6645}, - new uint[]{6586}, - new uint[]{6646}, - new uint[]{6647}, - new uint[]{6648}, - new uint[]{6649}, - new uint[]{6650}, - new uint[]{6651}, - new uint[]{6652}, - new uint[]{6562}, - new uint[]{6563}, - new uint[]{6554}, - new uint[]{6540}, - new uint[]{6532}, - new uint[]{6456}, - new uint[]{6457}, - new uint[]{6458}, - new uint[]{6459}, - new uint[]{6460}, - new uint[]{6461}, - new uint[]{6462}, - new uint[]{6463}, - new uint[]{6464}, - new uint[]{6465}, - new uint[]{6466}, - new uint[]{6468}, - new uint[]{6469}, - new uint[]{6734}, - new uint[]{6467}, - new uint[]{6727}, - new uint[]{6427}, - new uint[]{6430}, - new uint[]{6428}, - new uint[]{6511}, - new uint[]{6487}, - Array.Empty(), - new uint[]{6495}, - new uint[]{6491}, - new uint[]{6493}, - new uint[]{6493}, - new uint[]{6402, 6404, 6405}, - new uint[]{6396}, - new uint[]{6397}, - new uint[]{6400}, - new uint[]{6401}, - new uint[]{6564}, - new uint[]{6564}, - new uint[]{6501}, - new uint[]{6501}, - new uint[]{6501}, - new uint[]{108}, - new uint[]{6111}, - new uint[]{108}, - new uint[]{6680}, - new uint[]{6680}, - new uint[]{6682}, - Array.Empty(), - new uint[]{108, 6095}, - new uint[]{6664}, - new uint[]{6663}, - Array.Empty(), - new uint[]{5632}, - new uint[]{6692}, - new uint[]{6437}, - new uint[]{6498}, - new uint[]{541}, - new uint[]{3306}, - new uint[]{6296}, - new uint[]{4953}, - new uint[]{6395}, - new uint[]{108}, - new uint[]{6708}, - new uint[]{5628}, - new uint[]{108}, - new uint[]{108}, - new uint[]{5640}, - Array.Empty(), - new uint[]{6529}, - new uint[]{6721, 6723}, - new uint[]{5923}, - new uint[]{5846}, - new uint[]{5845}, - new uint[]{5844}, - new uint[]{5898}, - new uint[]{5936}, - new uint[]{2234}, - new uint[]{5801}, - new uint[]{6285}, - new uint[]{5817}, - new uint[]{2234}, - new uint[]{5832}, - new uint[]{5833}, - new uint[]{5834}, - new uint[]{2236}, - new uint[]{5578}, - new uint[]{5852}, - new uint[]{5829}, - new uint[]{2236}, - new uint[]{5578}, - new uint[]{5578}, - new uint[]{6284}, - new uint[]{5970}, - new uint[]{5659}, - new uint[]{5964}, - new uint[]{5660}, - new uint[]{5660}, - new uint[]{5967}, - Array.Empty(), - new uint[]{6726}, - new uint[]{6742}, - Array.Empty(), - new uint[]{12317}, - new uint[]{6857, 6858}, - new uint[]{6859, 6860, 6861, 6862}, - new uint[]{541}, - Array.Empty(), - new uint[]{6922}, - new uint[]{3069}, - new uint[]{6923}, - new uint[]{6950}, - new uint[]{5789}, - new uint[]{6275}, - new uint[]{6272}, - Array.Empty(), - new uint[]{6278}, - new uint[]{6277}, - new uint[]{6271}, - new uint[]{5641}, - new uint[]{5642}, - new uint[]{6273}, - new uint[]{6276}, - new uint[]{6856}, - new uint[]{6869}, - new uint[]{6870}, - new uint[]{6871}, - new uint[]{6872}, - new uint[]{6925}, - new uint[]{6926}, - new uint[]{6927}, - new uint[]{6928}, - new uint[]{6929}, - new uint[]{6930}, - new uint[]{6931}, - new uint[]{6932}, - new uint[]{6933}, - new uint[]{6934}, - new uint[]{6935}, - new uint[]{6936}, - new uint[]{6937}, - new uint[]{6938}, - new uint[]{6939}, - new uint[]{6940}, - new uint[]{5640, 5641, 5642, 6275}, - new uint[]{5640, 5641, 5642, 6856}, - new uint[]{5641}, - new uint[]{5642}, - new uint[]{6907}, - new uint[]{6908}, - new uint[]{6909}, - new uint[]{6910}, - new uint[]{6941}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{6897}, - new uint[]{6896}, - new uint[]{6898}, - new uint[]{6899}, - new uint[]{6900}, - new uint[]{6901}, - new uint[]{6902}, - new uint[]{6903}, - new uint[]{6905}, - new uint[]{6904}, - new uint[]{6906}, - new uint[]{6945}, - new uint[]{6953}, - new uint[]{6952}, - new uint[]{6951}, - new uint[]{6942}, - new uint[]{108, 6943}, - new uint[]{6944}, - new uint[]{6945}, - new uint[]{6946}, - new uint[]{6853}, - new uint[]{6847}, - new uint[]{6848}, - new uint[]{6849}, - new uint[]{6850}, - new uint[]{6851}, - new uint[]{6385}, - new uint[]{6911}, - new uint[]{4130}, - new uint[]{5978}, - new uint[]{4133}, - new uint[]{6912}, - new uint[]{6971}, - new uint[]{5970}, - Array.Empty(), - new uint[]{6913}, - new uint[]{5964}, - new uint[]{6386}, - new uint[]{6914}, - new uint[]{1482}, - new uint[]{2210}, - new uint[]{2612}, - new uint[]{2628}, - new uint[]{2630}, - new uint[]{2631}, - new uint[]{2632}, - new uint[]{6958}, - new uint[]{6957}, - new uint[]{3210}, - new uint[]{3204}, - Array.Empty(), - new uint[]{6854}, - new uint[]{6855}, - Array.Empty(), - new uint[]{6817}, - new uint[]{6808}, - new uint[]{6811}, - new uint[]{6810}, - new uint[]{6807}, - new uint[]{6812}, - new uint[]{6813}, - new uint[]{6814}, - new uint[]{6815}, - new uint[]{6809}, - new uint[]{6816}, - new uint[]{6818}, - new uint[]{6819}, - new uint[]{6820}, - new uint[]{6821}, - new uint[]{6822}, - new uint[]{6823}, - new uint[]{6824}, - new uint[]{6825}, - new uint[]{6826}, - new uint[]{6827}, - new uint[]{6828}, - new uint[]{6829}, - new uint[]{6830}, - new uint[]{6831}, - new uint[]{6832}, - new uint[]{6835}, - new uint[]{6834}, - new uint[]{6833}, - new uint[]{6836}, - new uint[]{6837}, - new uint[]{6838}, - new uint[]{6839}, - new uint[]{6840}, - new uint[]{6841}, - new uint[]{6842}, - new uint[]{6843}, - new uint[]{6844}, - new uint[]{6845}, - new uint[]{6846}, - new uint[]{6863}, - new uint[]{6864}, - Array.Empty(), - new uint[]{6915}, - new uint[]{6916}, - new uint[]{6917}, - new uint[]{6918}, - new uint[]{6919}, - new uint[]{6920}, - new uint[]{6921}, - new uint[]{7147}, - new uint[]{7167}, - new uint[]{7168}, - Array.Empty(), - new uint[]{6865}, - new uint[]{6866}, - new uint[]{6941}, - Array.Empty(), - new uint[]{6873}, - new uint[]{6874}, - new uint[]{6875}, - new uint[]{6876, 6894}, - new uint[]{6876}, - new uint[]{6877}, - new uint[]{6878}, - new uint[]{6878}, - new uint[]{6879}, - new uint[]{6880}, - new uint[]{6881}, - new uint[]{6881, 6895}, - new uint[]{6882, 6889}, - new uint[]{6884}, - new uint[]{6883, 6890}, - new uint[]{6882, 6886}, - new uint[]{6884, 6888}, - new uint[]{6883, 6887}, - new uint[]{6885}, - new uint[]{6889}, - new uint[]{6890}, - new uint[]{6891}, - new uint[]{6961}, - new uint[]{6962}, - new uint[]{6963}, - new uint[]{6964}, - new uint[]{6965}, - new uint[]{6966}, - new uint[]{7184}, - new uint[]{7147}, - new uint[]{5746}, - new uint[]{5743}, - new uint[]{5744}, - new uint[]{5745}, - new uint[]{6967}, - new uint[]{5746}, - new uint[]{5743}, - new uint[]{5744}, - new uint[]{7036}, - new uint[]{108}, - new uint[]{108}, - new uint[]{6949}, - new uint[]{6954}, - new uint[]{6955}, - new uint[]{6956}, - new uint[]{6961}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{6967}, - new uint[]{7143}, - new uint[]{7160}, - new uint[]{7144}, - new uint[]{6959}, - new uint[]{6567}, - new uint[]{6568}, - new uint[]{6569}, - new uint[]{6570}, - new uint[]{6571}, - new uint[]{6572}, - new uint[]{6573}, - new uint[]{6574}, - new uint[]{6575}, - new uint[]{6576}, - new uint[]{6577}, - new uint[]{6578}, - new uint[]{6579}, - new uint[]{6580}, - new uint[]{6581}, - new uint[]{6582}, - new uint[]{6583}, - new uint[]{6584}, - new uint[]{6585}, - new uint[]{6586}, - new uint[]{6587}, - new uint[]{6588}, - new uint[]{6589}, - new uint[]{6590}, - new uint[]{6591}, - new uint[]{6592}, - new uint[]{6593}, - new uint[]{6594}, - new uint[]{6595}, - new uint[]{6596}, - new uint[]{6597}, - new uint[]{6598}, - new uint[]{6599}, - new uint[]{6600}, - new uint[]{6601}, - new uint[]{6602}, - new uint[]{6582}, - new uint[]{6603}, - new uint[]{6604}, - new uint[]{6605}, - new uint[]{6606}, - new uint[]{6607}, - new uint[]{6608}, - new uint[]{6609}, - new uint[]{6610}, - new uint[]{6611}, - new uint[]{6612}, - new uint[]{6585}, - new uint[]{6613}, - new uint[]{6614}, - new uint[]{6615}, - new uint[]{6616}, - new uint[]{6617}, - new uint[]{6618}, - new uint[]{6619}, - new uint[]{6620}, - new uint[]{6621}, - new uint[]{6622}, - new uint[]{6623}, - new uint[]{6624}, - new uint[]{6625}, - new uint[]{6626}, - new uint[]{6627}, - new uint[]{6628}, - new uint[]{6629}, - new uint[]{6630}, - new uint[]{6631}, - new uint[]{6632}, - new uint[]{6633}, - new uint[]{6634}, - new uint[]{6635}, - new uint[]{6636}, - new uint[]{6637}, - new uint[]{6638}, - new uint[]{6639}, - new uint[]{6640}, - new uint[]{6641}, - new uint[]{6642}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{6960}, - new uint[]{6968}, - new uint[]{6969}, - new uint[]{7114}, - new uint[]{7115}, - new uint[]{6994}, - new uint[]{6995}, - new uint[]{7016}, - new uint[]{6996}, - new uint[]{7001}, - new uint[]{6999}, - new uint[]{7015}, - new uint[]{7074}, - new uint[]{7055}, - new uint[]{108}, - new uint[]{7056}, - new uint[]{7057}, - new uint[]{7058}, - new uint[]{7058}, - new uint[]{7144}, - new uint[]{7107}, - new uint[]{7108}, - new uint[]{7109}, - new uint[]{7110}, - new uint[]{7111}, - new uint[]{7112}, - new uint[]{7107}, - new uint[]{7108}, - new uint[]{7109}, - new uint[]{7110}, - new uint[]{7111}, - new uint[]{7112}, - new uint[]{7116}, - new uint[]{7059}, - new uint[]{7060}, - new uint[]{7061}, - new uint[]{7062}, - new uint[]{7063}, - new uint[]{7064}, - new uint[]{7065}, - new uint[]{7066}, - new uint[]{7067}, - new uint[]{7068}, - new uint[]{7069}, - new uint[]{2642}, - new uint[]{7071}, - new uint[]{6972}, - new uint[]{6973}, - new uint[]{6974}, - new uint[]{6975}, - new uint[]{6976}, - new uint[]{6977}, - new uint[]{6978}, - new uint[]{6979}, - new uint[]{6980}, - new uint[]{6981}, - new uint[]{7113}, - new uint[]{7113}, - new uint[]{7182}, - new uint[]{7181}, - new uint[]{7092}, - new uint[]{7093}, - new uint[]{7094}, - new uint[]{7095}, - new uint[]{7092}, - new uint[]{7093}, - new uint[]{7094}, - Array.Empty(), - new uint[]{7000}, - new uint[]{6998}, - new uint[]{7002}, - new uint[]{7007}, - new uint[]{7005}, - new uint[]{7004}, - new uint[]{7003}, - new uint[]{7006}, - new uint[]{7009}, - new uint[]{7008}, - new uint[]{7010}, - new uint[]{7011}, - new uint[]{7012}, - new uint[]{7013}, - new uint[]{7014}, - new uint[]{7096}, - new uint[]{7097}, - new uint[]{7098}, - new uint[]{7183}, - new uint[]{7105}, - new uint[]{7099}, - Array.Empty(), - new uint[]{7106}, - new uint[]{108}, - new uint[]{108}, - new uint[]{6200}, - new uint[]{6203}, - new uint[]{6997}, - new uint[]{6982}, - new uint[]{6982}, - new uint[]{6982}, - new uint[]{6983}, - new uint[]{6983}, - new uint[]{6983}, - new uint[]{6986}, - new uint[]{6984}, - new uint[]{6985}, - new uint[]{6987}, - new uint[]{6988}, - new uint[]{6989}, - new uint[]{7148}, - new uint[]{7149}, - new uint[]{7150}, - new uint[]{7166}, - new uint[]{7151}, - new uint[]{6990}, - new uint[]{7221}, - new uint[]{6173}, - new uint[]{6174}, - new uint[]{6175}, - new uint[]{6175}, - new uint[]{6176}, - new uint[]{7221}, - new uint[]{6173}, - new uint[]{6174}, - new uint[]{6175}, - new uint[]{6175}, - new uint[]{6176}, - new uint[]{6991}, - new uint[]{5574}, - new uint[]{5239}, - new uint[]{6992}, - new uint[]{108}, - new uint[]{6891}, - new uint[]{5834}, - new uint[]{5834}, - new uint[]{5834}, - new uint[]{7127}, - new uint[]{7126}, - new uint[]{7125}, - new uint[]{7127}, - new uint[]{7126}, - new uint[]{7125}, - new uint[]{7124}, - new uint[]{7122}, - new uint[]{7123}, - Array.Empty(), - new uint[]{7126}, - new uint[]{7126}, - new uint[]{7124}, - new uint[]{7122}, - new uint[]{7123}, - new uint[]{7120}, - new uint[]{7073}, - new uint[]{7127}, - new uint[]{7131}, - new uint[]{7131}, - new uint[]{7130}, - new uint[]{7131}, - new uint[]{7080}, - new uint[]{7081}, - new uint[]{7082}, - new uint[]{7083}, - new uint[]{7084}, - new uint[]{7085}, - new uint[]{7086}, - new uint[]{7087}, - new uint[]{7088}, - new uint[]{7089}, - new uint[]{7090}, - new uint[]{6993}, - new uint[]{7119}, - new uint[]{7093}, - new uint[]{7093}, - new uint[]{7169}, - new uint[]{7170}, - new uint[]{7171}, - new uint[]{7172}, - new uint[]{7149}, - new uint[]{7149}, - new uint[]{7149}, - new uint[]{7177}, - new uint[]{7178}, - new uint[]{7149}, - new uint[]{7149}, - new uint[]{7149}, - new uint[]{7145}, - new uint[]{7146}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{7129}, - new uint[]{7129}, - new uint[]{7091}, - new uint[]{7152}, - new uint[]{7153}, - new uint[]{7154}, - new uint[]{7155}, - Array.Empty(), - new uint[]{7156}, - new uint[]{7158}, - new uint[]{7160}, - new uint[]{7161}, - new uint[]{7157}, - new uint[]{7017}, - new uint[]{7018}, - new uint[]{7019}, - new uint[]{7020}, - new uint[]{7021}, - new uint[]{7022}, - new uint[]{7023}, - new uint[]{7024}, - new uint[]{7025}, - new uint[]{7026}, - new uint[]{7027}, - new uint[]{7028}, - new uint[]{7029}, - new uint[]{7030}, - new uint[]{7031}, - new uint[]{7032}, - new uint[]{7033}, - new uint[]{7034}, - new uint[]{7035}, - new uint[]{7152}, - new uint[]{7173}, - new uint[]{7174}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{7176}, - new uint[]{7150}, - new uint[]{7142}, - new uint[]{7141}, - new uint[]{6057}, - new uint[]{1486}, - new uint[]{3374}, - new uint[]{5625}, - new uint[]{5625}, - new uint[]{7110}, - new uint[]{7140}, - new uint[]{7139}, - Array.Empty(), - new uint[]{7087}, - new uint[]{108}, - new uint[]{7128}, - new uint[]{4130}, - new uint[]{5978}, - new uint[]{6381}, - new uint[]{7036}, - new uint[]{7054}, - new uint[]{4148}, - new uint[]{5579}, - new uint[]{5577}, - new uint[]{5581}, - new uint[]{7137}, - new uint[]{7138}, - new uint[]{6203}, - new uint[]{7036}, - new uint[]{7136}, - new uint[]{7126}, - Array.Empty(), - new uint[]{6984}, - new uint[]{7037}, - new uint[]{7038}, - new uint[]{7039}, - new uint[]{7040}, - new uint[]{6993}, - new uint[]{7041}, - new uint[]{7042}, - new uint[]{6993}, - new uint[]{7043}, - new uint[]{6985}, - new uint[]{7044}, - new uint[]{7045}, - new uint[]{7046}, - new uint[]{7047}, - new uint[]{108}, - new uint[]{108}, - new uint[]{7052}, - new uint[]{7048}, - new uint[]{17}, - new uint[]{7096}, - new uint[]{7097}, - new uint[]{7098}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{7200}, - new uint[]{7201}, - new uint[]{7202}, - new uint[]{7203}, - new uint[]{7204}, - new uint[]{7050}, - new uint[]{7049}, - new uint[]{6993}, - new uint[]{7222}, - new uint[]{7051}, - new uint[]{7222}, - new uint[]{6982}, - new uint[]{7053}, - new uint[]{6983}, - new uint[]{7186}, - new uint[]{6982}, - new uint[]{6983}, - new uint[]{7126}, - new uint[]{7126}, - new uint[]{7053}, - new uint[]{7187}, - new uint[]{6982}, - new uint[]{7162}, - new uint[]{7161}, - new uint[]{7161}, - new uint[]{6983}, - new uint[]{7188}, - new uint[]{7163}, - new uint[]{7164}, - new uint[]{7165}, - new uint[]{7189}, - new uint[]{6982}, - new uint[]{7185}, - new uint[]{7159}, - new uint[]{7190}, - new uint[]{6982}, - new uint[]{7185}, - new uint[]{7191}, - new uint[]{7185}, - new uint[]{7192}, - new uint[]{6988}, - new uint[]{6983}, - new uint[]{6988}, - new uint[]{7193}, - new uint[]{7194}, - new uint[]{7195}, - new uint[]{6993}, - new uint[]{7196}, - new uint[]{7197}, - new uint[]{6983}, - new uint[]{7198}, - new uint[]{7199}, - new uint[]{6982}, - new uint[]{6983}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{7225}, - new uint[]{7225}, - new uint[]{1644}, - new uint[]{1645, 1646}, - new uint[]{1647}, - new uint[]{1648}, - new uint[]{2091}, - new uint[]{1801}, - new uint[]{1803}, - new uint[]{1804}, - new uint[]{1185}, - new uint[]{1186}, - new uint[]{2143}, - new uint[]{5563}, - new uint[]{2137}, - new uint[]{2138}, - new uint[]{2324}, - new uint[]{7206}, - new uint[]{7207}, - new uint[]{7208}, - new uint[]{7209}, - new uint[]{7210}, - new uint[]{7211}, - new uint[]{108}, - new uint[]{7212}, - new uint[]{7213}, - new uint[]{7214}, - new uint[]{7215}, - new uint[]{7216}, - new uint[]{7217}, - new uint[]{7218}, - new uint[]{7219}, - new uint[]{7220}, - Array.Empty(), - new uint[]{7205}, - new uint[]{7229}, - Array.Empty(), - new uint[]{7231}, - new uint[]{7232}, - new uint[]{7227}, - new uint[]{7228}, - new uint[]{7476}, - new uint[]{7537}, - new uint[]{7477}, - new uint[]{7226}, - new uint[]{7233}, - new uint[]{7233}, - new uint[]{7234}, - new uint[]{7234}, - new uint[]{7229}, - new uint[]{7230}, - Array.Empty(), - new uint[]{7227}, - new uint[]{7228}, - new uint[]{7476}, - new uint[]{7537}, - new uint[]{7477}, - new uint[]{7226}, - new uint[]{7233}, - new uint[]{7234}, - new uint[]{7206}, - new uint[]{1185}, - new uint[]{1801}, - new uint[]{1644}, - new uint[]{887}, - new uint[]{7478}, - new uint[]{7479}, - new uint[]{7070}, - new uint[]{7100}, - new uint[]{7235}, - new uint[]{108}, - new uint[]{6945}, - new uint[]{7494}, - new uint[]{7236}, - new uint[]{7245}, - new uint[]{7246}, - new uint[]{7247}, - new uint[]{7237}, - new uint[]{7238}, - new uint[]{7239}, - new uint[]{7244}, - new uint[]{6943}, - new uint[]{7403}, - new uint[]{7404}, - new uint[]{7405}, - new uint[]{7406}, - new uint[]{7407}, - new uint[]{7408}, - new uint[]{7409}, - new uint[]{7410}, - new uint[]{7411}, - new uint[]{7412}, - new uint[]{7413}, - new uint[]{7414}, - new uint[]{7415}, - new uint[]{7413}, - new uint[]{7416}, - new uint[]{7417}, - new uint[]{7418}, - new uint[]{7419}, - new uint[]{7420}, - new uint[]{7421}, - new uint[]{7422}, - new uint[]{7423}, - new uint[]{7231}, - new uint[]{7424}, - new uint[]{7425}, - new uint[]{7426}, - new uint[]{7427}, - new uint[]{7428}, - new uint[]{7429}, - new uint[]{7430}, - new uint[]{7431}, - new uint[]{7432}, - new uint[]{7433}, - new uint[]{7434}, - new uint[]{7435}, - new uint[]{7436}, - new uint[]{7437}, - new uint[]{7438}, - new uint[]{7439}, - new uint[]{7440}, - new uint[]{7441}, - new uint[]{7442}, - new uint[]{7443}, - new uint[]{7444}, - new uint[]{7445}, - new uint[]{7446}, - new uint[]{7447}, - new uint[]{7448}, - new uint[]{7449}, - new uint[]{7450}, - new uint[]{7451}, - new uint[]{7452}, - new uint[]{7453}, - new uint[]{7454}, - new uint[]{7455}, - new uint[]{7456}, - new uint[]{7457}, - new uint[]{7458}, - new uint[]{7459}, - new uint[]{7460}, - new uint[]{7461}, - new uint[]{7462}, - new uint[]{7463}, - new uint[]{7582}, - new uint[]{7244}, - new uint[]{7244}, - new uint[]{7223}, - new uint[]{7224}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{7262}, - new uint[]{7263}, - new uint[]{7264}, - new uint[]{7265}, - new uint[]{7266}, - new uint[]{7267}, - new uint[]{7268}, - new uint[]{7269}, - new uint[]{7270}, - new uint[]{7271}, - new uint[]{7272}, - new uint[]{7273}, - new uint[]{7274}, - new uint[]{7275}, - new uint[]{7276}, - new uint[]{7277}, - new uint[]{7278}, - new uint[]{7279}, - new uint[]{7280}, - new uint[]{7281}, - new uint[]{7282}, - new uint[]{7283}, - new uint[]{7284}, - new uint[]{7285}, - new uint[]{7286}, - new uint[]{7287}, - new uint[]{7288}, - new uint[]{7289}, - new uint[]{7290}, - new uint[]{7291}, - new uint[]{7292}, - new uint[]{7293}, - new uint[]{7294}, - new uint[]{7295}, - new uint[]{7296}, - new uint[]{7297}, - new uint[]{7298}, - new uint[]{7299}, - new uint[]{7300}, - new uint[]{7301}, - new uint[]{7302}, - new uint[]{7303}, - new uint[]{7304}, - new uint[]{7305}, - new uint[]{7306}, - new uint[]{7307}, - new uint[]{7308}, - new uint[]{7309}, - new uint[]{7310}, - new uint[]{7305}, - new uint[]{7312}, - new uint[]{7313}, - new uint[]{7314}, - new uint[]{7315}, - new uint[]{7316}, - new uint[]{7317}, - new uint[]{7318}, - new uint[]{7319}, - new uint[]{7320}, - new uint[]{7321}, - new uint[]{7322}, - new uint[]{7323}, - new uint[]{7324}, - new uint[]{7325}, - new uint[]{7326}, - new uint[]{7327}, - new uint[]{7328}, - new uint[]{7329}, - new uint[]{7330}, - new uint[]{7331}, - new uint[]{7332}, - new uint[]{7333}, - new uint[]{7334}, - new uint[]{7335}, - new uint[]{7336}, - new uint[]{7337}, - new uint[]{7338}, - new uint[]{7339}, - new uint[]{7340}, - new uint[]{7341}, - new uint[]{7265}, - new uint[]{7342}, - new uint[]{7343}, - new uint[]{7344}, - new uint[]{7345}, - new uint[]{7346}, - new uint[]{7347}, - new uint[]{7348}, - new uint[]{7349}, - new uint[]{7350}, - new uint[]{7351}, - new uint[]{7352}, - new uint[]{7353}, - new uint[]{7354}, - new uint[]{7355}, - new uint[]{7356}, - new uint[]{7357}, - new uint[]{7358}, - new uint[]{7359}, - new uint[]{7360}, - new uint[]{7361}, - new uint[]{7362}, - new uint[]{7363}, - new uint[]{7364}, - new uint[]{7365}, - new uint[]{7366}, - new uint[]{7367}, - new uint[]{7368}, - new uint[]{7369}, - new uint[]{7370}, - new uint[]{7371}, - new uint[]{7372}, - new uint[]{7373}, - new uint[]{7374}, - new uint[]{7375}, - new uint[]{7376}, - new uint[]{7377}, - new uint[]{7378}, - new uint[]{7379}, - new uint[]{7380}, - new uint[]{7381}, - new uint[]{7382}, - new uint[]{7584}, - new uint[]{7384}, - new uint[]{7385}, - new uint[]{7386}, - new uint[]{7387}, - new uint[]{7388}, - new uint[]{7389}, - new uint[]{7390}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{7258}, - new uint[]{7259}, - new uint[]{7260}, - new uint[]{7260}, - new uint[]{7261}, - Array.Empty(), - new uint[]{7240}, - new uint[]{6996}, - new uint[]{7241}, - new uint[]{101, 108, 510, 548, 557, 718, 1279, 1680, 2116, 2118, 2134, 2135, 2136, 2137, 2143, 2160, 3040, 3042, 3044, 3046, 3047, 3330, 3374, 3455, 3458, 3642, 4739, 6039, 6148, 6153, 6649, 6650, 6651, 6652, 6853, 7570, 7585, 7586, 7587, 7588, 7589, 7590, 7591, 7593, 7594, 7595, 7597, 7599, 7600, 7601, 7627, 7628, 7629, 7641, 7657, 7659, 7660, 7662, 7667, 7672, 7691, 7695, 7699, 7702, 7855, 7856, 7857, 7858, 7885, 7886, 7888, 7899, 7900, 7906, 7911, 7912, 7914, 7919, 7922, 7931, 7939, 7947, 7950, 8084, 8087, 8099, 8102, 8107, 8109, 8113, 8117, 8121, 8123, 8124, 8125, 8128, 8129, 8141, 8146, 8162, 8165, 8167, 8201, 8202, 8210, 8211, 8231, 8232, 8233, 8235, 8236, 8250, 8252, 8258, 8260, 8261, 8262, 8267, 8270, 8272, 8273, 8300, 8301, 8338, 8339, 8345, 8350, 8352, 8353, 8361, 8363, 8374, 8379, 8381, 8382, 8393, 8397, 8486, 8826, 8953, 8955, 9029, 9041, 9044, 9046, 9063, 9138, 9140, 9141, 9142, 9143, 9147, 9152, 9153, 9155, 9161, 9162, 9189, 9208, 9220, 9230, 9231, 9233, 9239, 9241, 9245, 9250, 9260, 9261, 9263, 9264, 9265, 9270, 9281, 9287, 9288, 9289, 9296, 9298, 9300, 9331, 9340, 9341, 9353, 9355, 9364, 9384, 9390, 9391, 9394, 9396, 9398, 9400, 9405, 9407, 9408, 9409, 9411, 9416, 9417, 9419, 9422, 9424, 9426, 9427, 9436, 9439, 9442, 9458, 9461, 9462, 9505, 9508, 9511, 9617, 9618, 9642, 9644, 9646, 9648, 9650, 9652, 9678, 9693, 9694, 9695, 9696, 9707, 9709, 9735, 9738, 9741, 9751, 9755, 9759, 9764, 9768, 9769, 9776, 9778, 9780, 9782, 9784, 9786, 9788, 9790, 9793, 9795, 9797, 9806, 9807, 9808, 9811, 9812, 9813, 9834, 9838, 9853, 9854, 9855, 9856, 9857, 9858, 9859, 9860, 9861, 9862, 9863, 9881, 9902, 9908, 9909, 9918, 9921, 9922, 9925, 9929, 9930, 9931, 9935, 9937, 9941, 9942, 9945, 9946, 9948, 9949, 9950, 9953, 9955, 9958, 9961, 9964, 9965, 9966, 9969, 9973, 9988, 9989, 9992, 10004, 10006, 10007, 10013, 10037, 10041, 10059, 10064, 10067, 10075, 10077, 10095, 10189, 10192, 10205, 10207, 10212, 10246, 10247, 10256, 10259, 10279, 10282, 10285, 10288, 10290, 10292, 10293, 10298, 10313, 10314, 10315, 10316, 10317, 10331, 10333, 10336, 10337, 10341, 10345, 10348, 10393, 10394, 10395, 10396, 10399, 10401, 10403, 10404, 10438, 10445, 10446, 10448, 10453, 10456, 10489, 10559, 10572, 10581, 10586, 10647, 10717, 10718, 10719, 10720, 10730, 10731, 10732, 10733, 10742, 10744, 10831, 10832, 10905, 10932, 10933, 10935, 11070, 11195, 11218, 11227, 11238, 11239, 11241, 11253, 11254, 11274, 11277, 11278, 11280, 11281, 11286, 11288, 11289, 11292, 11293, 11302, 11322, 11352, 11369, 11372, 11374, 11378, 11381, 11384, 11387, 11393, 11399, 11402, 11404, 11405, 11407, 11413, 11419, 11440, 11442, 11517}, - new uint[]{7396}, - new uint[]{7397}, - new uint[]{7398}, - new uint[]{7250}, - new uint[]{7251}, - new uint[]{7252}, - new uint[]{5978}, - new uint[]{7253}, - new uint[]{7254}, - new uint[]{7254}, - new uint[]{7255}, - new uint[]{7256}, - new uint[]{7402}, - new uint[]{7402}, - new uint[]{7257}, - new uint[]{7401}, - new uint[]{7248}, - new uint[]{7250}, - new uint[]{7242}, - new uint[]{7243}, - new uint[]{7240}, - new uint[]{7392}, - new uint[]{7392}, - new uint[]{7392}, - new uint[]{7393}, - new uint[]{7393}, - new uint[]{7393}, - new uint[]{7394}, - new uint[]{7394}, - new uint[]{7394}, - new uint[]{7394}, - new uint[]{7610}, - new uint[]{7610}, - new uint[]{7610}, - new uint[]{7610}, - new uint[]{7610}, - new uint[]{7610}, - new uint[]{7610}, - new uint[]{7610}, - new uint[]{7610}, - new uint[]{7610}, - Array.Empty(), - new uint[]{7526}, - new uint[]{7527}, - new uint[]{7528}, - new uint[]{7512}, - new uint[]{7513}, - new uint[]{7512}, - new uint[]{7464}, - new uint[]{7464}, - new uint[]{7464}, - new uint[]{7464}, - new uint[]{7465}, - new uint[]{7465}, - new uint[]{7465}, - new uint[]{7465}, - new uint[]{7466}, - new uint[]{7466}, - new uint[]{7466}, - new uint[]{7466}, - new uint[]{7467}, - new uint[]{7467}, - new uint[]{7467}, - new uint[]{7467}, - new uint[]{7468}, - new uint[]{7468}, - new uint[]{7468}, - new uint[]{7468}, - new uint[]{7468}, - new uint[]{7469}, - new uint[]{7470}, - new uint[]{7471}, - new uint[]{7472}, - new uint[]{7469}, - new uint[]{7470}, - new uint[]{7471}, - new uint[]{7472}, - new uint[]{7469}, - new uint[]{7470}, - new uint[]{7471}, - new uint[]{7472}, - new uint[]{7469}, - new uint[]{7470}, - new uint[]{7471}, - new uint[]{7472}, - new uint[]{7469}, - new uint[]{7470}, - new uint[]{7471}, - new uint[]{7472}, - new uint[]{7469}, - new uint[]{7520}, - new uint[]{7521}, - new uint[]{7391}, - new uint[]{7516}, - new uint[]{7517}, - new uint[]{7517}, - new uint[]{7399}, - new uint[]{7497}, - new uint[]{7498}, - new uint[]{7514}, - new uint[]{7515}, - new uint[]{7473}, - new uint[]{7508}, - new uint[]{7509}, - new uint[]{7510}, - new uint[]{7511}, - new uint[]{7508}, - new uint[]{7508}, - new uint[]{7495}, - new uint[]{7669}, - new uint[]{7670}, - new uint[]{7671}, - new uint[]{7701}, - new uint[]{7496}, - new uint[]{7495}, - new uint[]{7524}, - new uint[]{7525}, - new uint[]{7524}, - new uint[]{7518}, - new uint[]{7519}, - new uint[]{7518}, - new uint[]{7518}, - new uint[]{7518}, - new uint[]{7503}, - new uint[]{7504}, - new uint[]{7503}, - new uint[]{7523}, - Array.Empty(), - new uint[]{7523}, - new uint[]{7523}, - new uint[]{7524}, - new uint[]{7475}, - new uint[]{7522}, - new uint[]{7249}, - new uint[]{7499}, - new uint[]{7501}, - new uint[]{7502}, - new uint[]{7499}, - new uint[]{7505}, - new uint[]{7505}, - new uint[]{7505}, - new uint[]{7505}, - new uint[]{7533}, - new uint[]{7647}, - new uint[]{7648}, - new uint[]{7649}, - new uint[]{7650}, - new uint[]{7651}, - new uint[]{7652}, - new uint[]{7653}, - new uint[]{7654}, - new uint[]{7655}, - new uint[]{7656}, - new uint[]{7658}, - new uint[]{7506}, - new uint[]{7507}, - new uint[]{7475}, - new uint[]{7567}, - new uint[]{7248}, - new uint[]{7534}, - new uint[]{7248}, - new uint[]{7532}, - new uint[]{7531}, - new uint[]{7536}, - new uint[]{7480}, - new uint[]{7483}, - new uint[]{7484}, - new uint[]{7487}, - new uint[]{7488}, - new uint[]{7474}, - new uint[]{7481}, - new uint[]{7482}, - new uint[]{7485}, - new uint[]{7486}, - new uint[]{7489}, - new uint[]{7490}, - new uint[]{7491}, - new uint[]{7492}, - new uint[]{7493}, - new uint[]{7535}, - new uint[]{7529}, - new uint[]{7530}, - new uint[]{7568}, - new uint[]{7569}, - new uint[]{3045}, - new uint[]{7529}, - new uint[]{7529}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108}, - new uint[]{7583}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{7667}, - new uint[]{7668}, - new uint[]{7675}, - new uint[]{7676}, - new uint[]{7677}, - new uint[]{7678}, - new uint[]{7679}, - new uint[]{7680}, - new uint[]{7681}, - new uint[]{7682}, - new uint[]{7683}, - new uint[]{7684}, - new uint[]{7685}, - new uint[]{7686}, - new uint[]{7687}, - new uint[]{7688}, - new uint[]{7660}, - new uint[]{7661}, - new uint[]{7662}, - new uint[]{7665}, - new uint[]{8099}, - new uint[]{7663}, - new uint[]{7659}, - new uint[]{7650}, - new uint[]{7672}, - new uint[]{7673}, - new uint[]{7674}, - new uint[]{7672}, - new uint[]{7691}, - new uint[]{7694}, - new uint[]{7692}, - new uint[]{7693}, - new uint[]{7691}, - new uint[]{7694}, - new uint[]{7692}, - new uint[]{7693}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{7889}, - new uint[]{7890}, - Array.Empty(), - new uint[]{7641}, - new uint[]{7641}, - new uint[]{7643}, - Array.Empty(), - new uint[]{7645}, - new uint[]{7646}, - new uint[]{7641}, - new uint[]{7641}, - new uint[]{7643}, - Array.Empty(), - new uint[]{7645}, - new uint[]{7646}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{7702}, - new uint[]{7725}, - new uint[]{7703}, - new uint[]{7705}, - Array.Empty(), - Array.Empty(), - new uint[]{7702}, - new uint[]{7707}, - new uint[]{7708}, - new uint[]{7709}, - new uint[]{7710}, - new uint[]{7702}, - new uint[]{7725}, - new uint[]{7703}, - new uint[]{7704}, - new uint[]{7705}, - Array.Empty(), - Array.Empty(), - new uint[]{7702}, - new uint[]{7711}, - new uint[]{7714}, - new uint[]{7713}, - new uint[]{7712}, - Array.Empty(), - new uint[]{7695}, - new uint[]{7696}, - new uint[]{7697}, - new uint[]{7698}, - Array.Empty(), - new uint[]{7700}, - new uint[]{7695}, - Array.Empty(), - new uint[]{7699}, - Array.Empty(), - new uint[]{7633}, - new uint[]{7635}, - new uint[]{7633}, - new uint[]{7635}, - new uint[]{7636}, - new uint[]{7637}, - new uint[]{7638}, - new uint[]{7639}, - new uint[]{7726}, - new uint[]{7727}, - new uint[]{7729}, - new uint[]{7731}, - new uint[]{7736}, - new uint[]{7739}, - new uint[]{7740}, - new uint[]{7742}, - new uint[]{7746}, - new uint[]{7748}, - new uint[]{7750}, - new uint[]{7753}, - new uint[]{7754}, - new uint[]{7756}, - new uint[]{7759}, - new uint[]{7760}, - new uint[]{7763}, - Array.Empty(), - new uint[]{8345}, - new uint[]{8344}, - new uint[]{8343}, - new uint[]{8342}, - new uint[]{8345}, - new uint[]{8344}, - new uint[]{8343}, - new uint[]{8341}, - new uint[]{8341}, - new uint[]{8272}, - new uint[]{7718}, - new uint[]{6152}, - new uint[]{6153}, - new uint[]{7716}, - new uint[]{6148}, - new uint[]{7771}, - new uint[]{7772}, - new uint[]{7772}, - new uint[]{7773}, - new uint[]{7773}, - new uint[]{7771}, - new uint[]{7772}, - new uint[]{7771}, - new uint[]{7773}, - new uint[]{7773}, - new uint[]{7771}, - new uint[]{7772}, - new uint[]{7774}, - new uint[]{7771}, - new uint[]{7771}, - new uint[]{7774}, - new uint[]{7772}, - new uint[]{7774}, - new uint[]{7773}, - new uint[]{7772}, - new uint[]{7771}, - new uint[]{7775}, - new uint[]{7775}, - new uint[]{7775}, - new uint[]{7776}, - new uint[]{7776}, - new uint[]{7776}, - new uint[]{7777}, - new uint[]{7778}, - new uint[]{7777}, - new uint[]{7779}, - new uint[]{7779}, - new uint[]{7779}, - new uint[]{7780}, - new uint[]{7780}, - new uint[]{7781}, - new uint[]{7783}, - new uint[]{7782}, - new uint[]{7782}, - new uint[]{7785}, - new uint[]{7784}, - new uint[]{7784}, - new uint[]{7786}, - new uint[]{7787}, - new uint[]{7788}, - new uint[]{7789}, - new uint[]{7790}, - new uint[]{7791}, - new uint[]{7792}, - new uint[]{7793}, - new uint[]{7794}, - new uint[]{7795}, - new uint[]{7796}, - new uint[]{7797}, - new uint[]{7798}, - new uint[]{7799}, - new uint[]{7800}, - new uint[]{7801}, - new uint[]{7802}, - new uint[]{7803}, - new uint[]{7804}, - new uint[]{7805}, - new uint[]{7806}, - new uint[]{7807}, - new uint[]{7808}, - new uint[]{7809}, - new uint[]{7810}, - new uint[]{7811}, - new uint[]{7812}, - new uint[]{7813}, - new uint[]{7814}, - new uint[]{7815}, - new uint[]{7816}, - new uint[]{7817}, - new uint[]{7818}, - new uint[]{7819}, - new uint[]{7820}, - new uint[]{7821}, - new uint[]{7822}, - new uint[]{7823}, - new uint[]{7824}, - new uint[]{7825}, - new uint[]{7826}, - new uint[]{7827}, - new uint[]{7828}, - new uint[]{7829}, - new uint[]{7830}, - new uint[]{7831}, - new uint[]{7832}, - new uint[]{7833}, - new uint[]{7834}, - new uint[]{7835}, - new uint[]{7836}, - new uint[]{7837}, - new uint[]{7838}, - new uint[]{7839}, - new uint[]{7840}, - new uint[]{7841}, - new uint[]{7842}, - new uint[]{7843}, - new uint[]{7844}, - new uint[]{7845}, - new uint[]{7846}, - new uint[]{7847}, - new uint[]{7848}, - new uint[]{7849}, - new uint[]{7658}, - new uint[]{7578}, - new uint[]{7579}, - new uint[]{7580}, - new uint[]{7581}, - new uint[]{7939}, - Array.Empty(), - new uint[]{7856}, - new uint[]{108}, - new uint[]{7871}, - new uint[]{7872}, - new uint[]{7873}, - new uint[]{7874}, - new uint[]{8264}, - new uint[]{7876}, - new uint[]{7877}, - new uint[]{7878}, - new uint[]{7879}, - new uint[]{7880}, - new uint[]{7881}, - new uint[]{7882}, - Array.Empty(), - new uint[]{7884}, - new uint[]{7885}, - new uint[]{7886}, - new uint[]{7887}, - new uint[]{7888}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{6154}, - new uint[]{7715}, - new uint[]{6196}, - new uint[]{6336}, - new uint[]{2823}, - new uint[]{7718}, - new uint[]{7585}, - new uint[]{7586}, - new uint[]{7587}, - new uint[]{7588}, - new uint[]{7589}, - new uint[]{7590}, - new uint[]{7591}, - new uint[]{7627}, - new uint[]{7593}, - new uint[]{7622}, - new uint[]{7595}, - new uint[]{7596}, - new uint[]{7597}, - new uint[]{7598}, - new uint[]{7599}, - new uint[]{7600}, - new uint[]{7601}, - new uint[]{7602}, - new uint[]{7603}, - new uint[]{7604}, - new uint[]{7605}, - new uint[]{7606}, - new uint[]{7607}, - new uint[]{7608}, - new uint[]{7609}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{7759}, - new uint[]{8265}, - new uint[]{7732}, - new uint[]{7733}, - Array.Empty(), - Array.Empty(), - new uint[]{7731}, - new uint[]{7731}, - new uint[]{9147}, - new uint[]{7628}, - new uint[]{7727}, - new uint[]{7728}, - new uint[]{7620}, - new uint[]{7592}, - new uint[]{7594}, - new uint[]{7621}, - new uint[]{7743}, - new uint[]{7744}, - new uint[]{7629}, - new uint[]{7742}, - new uint[]{7630}, - new uint[]{7747}, - new uint[]{7623}, - new uint[]{7631}, - new uint[]{7719}, - new uint[]{7745}, - new uint[]{7720}, - new uint[]{7721}, - new uint[]{7730}, - new uint[]{7756}, - new uint[]{7757}, - new uint[]{7758}, - new uint[]{7722}, - new uint[]{7702}, - new uint[]{7723}, - new uint[]{7598}, - new uint[]{7598}, - new uint[]{7598}, - new uint[]{7764}, - new uint[]{7724}, - new uint[]{7248}, - new uint[]{7765}, - new uint[]{7766}, - Array.Empty(), - new uint[]{7751}, - new uint[]{7752}, - new uint[]{7248}, - new uint[]{7768}, - new uint[]{7769}, - new uint[]{7770}, - new uint[]{7767}, - Array.Empty(), - new uint[]{7750}, - new uint[]{7750}, - new uint[]{7750}, - new uint[]{7748}, - new uint[]{7749}, - Array.Empty(), - Array.Empty(), - new uint[]{7248}, - Array.Empty(), - new uint[]{7737}, - new uint[]{7738}, - Array.Empty(), - new uint[]{7761}, - new uint[]{7762}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108}, - new uint[]{7741}, - new uint[]{7696}, - new uint[]{7696}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{7755}, - new uint[]{7718}, - new uint[]{7642}, - new uint[]{7642}, - new uint[]{7726}, - Array.Empty(), - new uint[]{7850}, - new uint[]{7851}, - new uint[]{7739}, - new uint[]{7739}, - new uint[]{7852}, - new uint[]{7739}, - new uint[]{7769}, - new uint[]{7909}, - new uint[]{7853}, - new uint[]{9066}, - new uint[]{108}, - new uint[]{108}, - new uint[]{7664}, - new uint[]{7857}, - new uint[]{7858}, - new uint[]{7861}, - new uint[]{7862}, - Array.Empty(), - Array.Empty(), - new uint[]{7861}, - new uint[]{7664}, - new uint[]{7919}, - new uint[]{7920}, - new uint[]{7921}, - Array.Empty(), - new uint[]{8336}, - new uint[]{7919}, - new uint[]{8076}, - new uint[]{8077}, - Array.Empty(), - new uint[]{8078}, - new uint[]{8079}, - new uint[]{8080}, - new uint[]{8081}, - new uint[]{8082}, - new uint[]{8083}, - Array.Empty(), - Array.Empty(), - new uint[]{8086}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{8089}, - new uint[]{8090}, - new uint[]{8092}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{8085}, - Array.Empty(), - new uint[]{8084}, - new uint[]{8087}, - new uint[]{8088}, - new uint[]{7899}, - new uint[]{7900}, - new uint[]{7901}, - new uint[]{7855}, - new uint[]{7946}, - new uint[]{7976}, - new uint[]{7977}, - new uint[]{7978}, - new uint[]{7979}, - new uint[]{7980}, - new uint[]{7947}, - new uint[]{7948}, - new uint[]{7950}, - new uint[]{7949}, - new uint[]{7951}, - new uint[]{7952}, - new uint[]{7953}, - new uint[]{7981}, - new uint[]{7982}, - new uint[]{7983}, - new uint[]{7984}, - new uint[]{7922}, - new uint[]{7930}, - new uint[]{7923}, - new uint[]{7924}, - new uint[]{7925}, - new uint[]{7927}, - new uint[]{7928}, - new uint[]{7929}, - new uint[]{7922}, - new uint[]{7930}, - new uint[]{7927}, - new uint[]{7928}, - new uint[]{7926}, - new uint[]{7929}, - new uint[]{7906}, - new uint[]{7891}, - new uint[]{7892}, - new uint[]{7570}, - new uint[]{7571}, - new uint[]{7572}, - new uint[]{7573}, - new uint[]{7574}, - new uint[]{7575}, - new uint[]{7576}, - new uint[]{7657}, - new uint[]{7973}, - new uint[]{7974}, - new uint[]{7975}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{7879}, - new uint[]{108}, - Array.Empty(), - new uint[]{108}, - new uint[]{7875}, - new uint[]{8922}, - new uint[]{7871}, - new uint[]{7872}, - Array.Empty(), - new uint[]{7874}, - new uint[]{7875}, - new uint[]{7879}, - new uint[]{7880}, - new uint[]{108}, - new uint[]{7973}, - new uint[]{10216}, - new uint[]{8922}, - new uint[]{750}, - new uint[]{7931}, - new uint[]{7932}, - new uint[]{7933}, - new uint[]{7934}, - new uint[]{7935}, - new uint[]{7936}, - new uint[]{7937}, - new uint[]{8133}, - Array.Empty(), - new uint[]{7976}, - new uint[]{7981, 7982}, - new uint[]{7915, 7919}, - new uint[]{108, 7916}, - new uint[]{108, 7917}, - new uint[]{7865}, - new uint[]{7866}, - new uint[]{7867}, - new uint[]{7868}, - new uint[]{7869}, - new uint[]{7870}, - new uint[]{8922}, - new uint[]{7912}, - new uint[]{7913}, - new uint[]{7914}, - new uint[]{7911}, - new uint[]{7918}, - new uint[]{7910}, - new uint[]{7908}, - new uint[]{7985}, - new uint[]{7986}, - new uint[]{7987}, - new uint[]{7988}, - new uint[]{7989}, - new uint[]{7990}, - new uint[]{7991}, - new uint[]{8922}, - new uint[]{7992}, - new uint[]{7993}, - new uint[]{7994}, - new uint[]{7995}, - new uint[]{7996}, - new uint[]{7997}, - new uint[]{7998}, - new uint[]{7999}, - new uint[]{8000}, - new uint[]{8001}, - new uint[]{8002}, - new uint[]{8003}, - new uint[]{8004}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{8922}, - new uint[]{7930}, - new uint[]{7930}, - new uint[]{7930}, - new uint[]{7930}, - new uint[]{7968}, - new uint[]{7969}, - new uint[]{7968}, - new uint[]{7970}, - new uint[]{7971}, - new uint[]{7970}, - new uint[]{7970}, - new uint[]{7968}, - new uint[]{7970}, - new uint[]{7871}, - new uint[]{7872}, - new uint[]{7873}, - new uint[]{7874}, - new uint[]{7875}, - new uint[]{7879}, - new uint[]{8922}, - new uint[]{8922}, - new uint[]{7972}, - new uint[]{7902}, - new uint[]{7903}, - new uint[]{5915}, - new uint[]{5915}, - new uint[]{7904}, - new uint[]{7970}, - new uint[]{7930}, - Array.Empty(), - Array.Empty(), - new uint[]{7985}, - new uint[]{7986}, - new uint[]{7991}, - new uint[]{8129}, - new uint[]{8252}, - new uint[]{8250}, - new uint[]{8249}, - new uint[]{8248}, - new uint[]{7915, 7916, 7917}, - new uint[]{8251}, - new uint[]{8129}, - new uint[]{8129}, - new uint[]{8132}, - new uint[]{8130}, - new uint[]{9040}, - Array.Empty(), - new uint[]{8060}, - new uint[]{8061}, - new uint[]{8061}, - new uint[]{8063}, - new uint[]{7664}, - new uint[]{6039}, - new uint[]{7537}, - new uint[]{6039}, - new uint[]{7537}, - Array.Empty(), - new uint[]{6042}, - new uint[]{6040}, - Array.Empty(), - new uint[]{6040}, - new uint[]{3293}, - new uint[]{3211}, - new uint[]{5574}, - new uint[]{7036}, - new uint[]{7867}, - new uint[]{6094}, - new uint[]{6094}, - new uint[]{7941}, - new uint[]{8015}, - new uint[]{8011}, - new uint[]{8014}, - new uint[]{8008}, - new uint[]{8012}, - new uint[]{8013}, - new uint[]{8009}, - new uint[]{8010}, - new uint[]{8016}, - new uint[]{8017}, - new uint[]{8018}, - new uint[]{8019}, - new uint[]{8020}, - new uint[]{8021}, - new uint[]{8022}, - new uint[]{8023}, - new uint[]{8024}, - new uint[]{8025}, - new uint[]{8026}, - new uint[]{8027}, - new uint[]{8028}, - new uint[]{8029}, - new uint[]{8030}, - new uint[]{8031}, - new uint[]{8032}, - new uint[]{8033}, - new uint[]{8034}, - new uint[]{8035}, - new uint[]{8036}, - new uint[]{8037}, - new uint[]{8038}, - new uint[]{8039}, - new uint[]{8040}, - new uint[]{8041}, - new uint[]{8042}, - new uint[]{8043}, - new uint[]{8044}, - new uint[]{8045}, - new uint[]{8046}, - new uint[]{8047}, - new uint[]{8048}, - new uint[]{8049}, - new uint[]{8050}, - new uint[]{8051}, - new uint[]{5945}, - new uint[]{8052}, - new uint[]{8053}, - new uint[]{8054}, - new uint[]{7176}, - new uint[]{7471}, - new uint[]{7469}, - new uint[]{7470}, - new uint[]{7176}, - new uint[]{7471}, - new uint[]{7469}, - new uint[]{7470}, - new uint[]{7176}, - new uint[]{7471}, - new uint[]{7469}, - new uint[]{7470}, - new uint[]{7176}, - new uint[]{7471}, - new uint[]{7469}, - new uint[]{7470}, - new uint[]{8055}, - new uint[]{8055}, - new uint[]{8055}, - new uint[]{8056}, - new uint[]{8056}, - new uint[]{8056}, - new uint[]{8057}, - new uint[]{8057}, - new uint[]{8057}, - new uint[]{8058}, - new uint[]{8058}, - new uint[]{8058}, - new uint[]{8059}, - new uint[]{8059}, - new uint[]{8059}, - new uint[]{8059}, - new uint[]{7871}, - new uint[]{7872}, - new uint[]{7873}, - new uint[]{7874}, - new uint[]{8487}, - new uint[]{8064}, - new uint[]{8065}, - new uint[]{8112}, - new uint[]{8112}, - new uint[]{8113}, - new uint[]{8104}, - new uint[]{8105}, - new uint[]{8106}, - new uint[]{8107}, - new uint[]{8109}, - new uint[]{8110}, - new uint[]{8111}, - new uint[]{8122}, - new uint[]{8101}, - new uint[]{8123}, - new uint[]{8090}, - new uint[]{8091}, - new uint[]{8091}, - new uint[]{8093}, - new uint[]{8094}, - new uint[]{8093}, - new uint[]{8094}, - new uint[]{8095}, - new uint[]{8094}, - new uint[]{8140}, - new uint[]{8096}, - new uint[]{8097}, - new uint[]{8098}, - new uint[]{8140}, - new uint[]{8097}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{8078}, - new uint[]{8079}, - new uint[]{8080}, - new uint[]{8081}, - new uint[]{8082}, - new uint[]{8083}, - new uint[]{8100}, - new uint[]{8101}, - new uint[]{8101}, - new uint[]{8103}, - new uint[]{8102}, - new uint[]{8103}, - new uint[]{8108}, - new uint[]{8108}, - new uint[]{8114}, - new uint[]{8115}, - new uint[]{8087}, - new uint[]{8114}, - new uint[]{8115}, - new uint[]{8116}, - new uint[]{8116}, - new uint[]{4916}, - new uint[]{8117}, - new uint[]{8117}, - new uint[]{8118}, - new uint[]{3046}, - new uint[]{3047}, - new uint[]{3046}, - new uint[]{3047}, - new uint[]{8119}, - new uint[]{8120}, - new uint[]{8121}, - new uint[]{8120}, - new uint[]{8124}, - new uint[]{8132}, - new uint[]{8126}, - new uint[]{8127}, - new uint[]{8128}, - new uint[]{8126}, - new uint[]{8127}, - new uint[]{8125}, - new uint[]{8127}, - new uint[]{7155}, - new uint[]{8068}, - Array.Empty(), - new uint[]{7954}, - new uint[]{108}, - new uint[]{8066}, - new uint[]{8067}, - new uint[]{8069}, - new uint[]{8069}, - new uint[]{7967}, - new uint[]{7966}, - new uint[]{7965}, - new uint[]{7248}, - new uint[]{8005}, - new uint[]{8005}, - new uint[]{8006}, - new uint[]{8007}, - new uint[]{7248}, - Array.Empty(), - Array.Empty(), - new uint[]{8778}, - new uint[]{7248}, - new uint[]{7248}, - new uint[]{4130, 11264}, - new uint[]{5239, 11265}, - new uint[]{713, 11266}, - new uint[]{8917}, - new uint[]{1492, 11267}, - new uint[]{8378, 11268}, - new uint[]{8889, 11269}, - new uint[]{8919}, - new uint[]{8650}, - new uint[]{8650}, - new uint[]{8650}, - new uint[]{8070}, - new uint[]{8071}, - new uint[]{6041}, - new uint[]{6042}, - new uint[]{8072}, - new uint[]{8073}, - new uint[]{8074}, - new uint[]{8075}, - new uint[]{7955}, - new uint[]{7956}, - new uint[]{7957}, - new uint[]{8061}, - new uint[]{8062}, - new uint[]{7967}, - new uint[]{7967}, - new uint[]{7964}, - new uint[]{7964}, - new uint[]{7964}, - new uint[]{7966}, - new uint[]{7961}, - new uint[]{7962}, - new uint[]{7963}, - new uint[]{7965}, - new uint[]{7960}, - new uint[]{7959}, - new uint[]{7965}, - new uint[]{7926}, - new uint[]{108}, - new uint[]{8925}, - Array.Empty(), - new uint[]{8061}, - new uint[]{8131}, - Array.Empty(), - new uint[]{8061}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{7956}, - new uint[]{7956}, - new uint[]{7923}, - new uint[]{7924}, - new uint[]{7925}, - new uint[]{7965}, - new uint[]{8299}, - new uint[]{8300}, - new uint[]{8301}, - new uint[]{7176}, - new uint[]{7471}, - new uint[]{7469}, - new uint[]{8135}, - new uint[]{8134}, - new uint[]{8136}, - new uint[]{8137}, - new uint[]{8139}, - new uint[]{8138}, - new uint[]{8183}, - new uint[]{8184}, - new uint[]{8185}, - new uint[]{8186}, - new uint[]{8187}, - new uint[]{8188}, - new uint[]{8189}, - new uint[]{8190}, - new uint[]{8191}, - new uint[]{8192}, - new uint[]{8193}, - new uint[]{8194}, - new uint[]{8195}, - new uint[]{8196}, - new uint[]{8197}, - new uint[]{8198}, - new uint[]{8199}, - new uint[]{8200}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108, 8210}, - new uint[]{8235}, - new uint[]{8236}, - new uint[]{8234}, - new uint[]{8826}, - new uint[]{8231}, - new uint[]{8232}, - new uint[]{8233}, - new uint[]{8935}, - new uint[]{8981}, - new uint[]{8455}, - Array.Empty(), - new uint[]{8201}, - new uint[]{8826}, - new uint[]{8202}, - new uint[]{8203}, - new uint[]{8204}, - new uint[]{8205}, - new uint[]{8206}, - new uint[]{8207}, - new uint[]{8208}, - new uint[]{8209}, - new uint[]{8456}, - new uint[]{8210}, - new uint[]{8479, 8480, 8483}, - new uint[]{8211}, - new uint[]{8484}, - new uint[]{8325}, - new uint[]{8469}, - new uint[]{541}, - new uint[]{5978}, - new uint[]{8141}, - new uint[]{8260}, - new uint[]{108}, - new uint[]{8261}, - new uint[]{7864}, - new uint[]{8262}, - new uint[]{8262}, - new uint[]{108}, - new uint[]{8162}, - new uint[]{8163}, - new uint[]{8164}, - new uint[]{8147}, - new uint[]{8148}, - new uint[]{8149}, - new uint[]{8150}, - new uint[]{8151}, - new uint[]{8152}, - new uint[]{8153}, - new uint[]{8154}, - new uint[]{8856}, - new uint[]{8156}, - new uint[]{8157}, - new uint[]{8158}, - new uint[]{8159}, - new uint[]{8160}, - new uint[]{8161}, - new uint[]{8361}, - new uint[]{8357}, - new uint[]{8356}, - new uint[]{8355}, - new uint[]{8359}, - new uint[]{8358}, - new uint[]{8357}, - new uint[]{8356}, - new uint[]{8360}, - new uint[]{8354}, - new uint[]{8361}, - new uint[]{8357}, - new uint[]{8356}, - new uint[]{8360}, - new uint[]{8359}, - new uint[]{8357}, - new uint[]{8356}, - new uint[]{8360}, - new uint[]{8169}, - new uint[]{8170}, - new uint[]{7062}, - new uint[]{8172}, - new uint[]{8173}, - new uint[]{8174}, - new uint[]{8175}, - new uint[]{8176}, - new uint[]{8177}, - new uint[]{8178}, - new uint[]{8179}, - new uint[]{8180}, - new uint[]{8181}, - new uint[]{8182}, - new uint[]{8165}, - new uint[]{8166}, - new uint[]{8167}, - new uint[]{8569}, - new uint[]{8155}, - new uint[]{8571}, - new uint[]{8572}, - new uint[]{8573}, - new uint[]{8574}, - new uint[]{8575}, - new uint[]{8576}, - new uint[]{8577}, - new uint[]{8578}, - new uint[]{8579}, - new uint[]{8788}, - new uint[]{8581}, - new uint[]{8582}, - new uint[]{8583}, - new uint[]{8584}, - new uint[]{8585}, - new uint[]{8586}, - new uint[]{8587}, - new uint[]{8588}, - new uint[]{8589}, - new uint[]{8590}, - new uint[]{8459}, - new uint[]{8592}, - new uint[]{8653}, - new uint[]{8654}, - new uint[]{8655}, - new uint[]{8656}, - new uint[]{8596}, - new uint[]{8597}, - new uint[]{8598}, - new uint[]{8599}, - new uint[]{8600}, - new uint[]{8601}, - new uint[]{8789}, - new uint[]{8603}, - new uint[]{8604}, - new uint[]{8605}, - new uint[]{8606}, - new uint[]{8607}, - new uint[]{8608}, - new uint[]{8609}, - new uint[]{8610}, - new uint[]{8611}, - new uint[]{8612}, - new uint[]{8613}, - new uint[]{8614}, - new uint[]{8615}, - new uint[]{8616}, - new uint[]{8591}, - new uint[]{8890}, - new uint[]{8891}, - new uint[]{8892}, - new uint[]{8893}, - new uint[]{8894}, - new uint[]{8618}, - new uint[]{8619}, - new uint[]{8620}, - new uint[]{8621}, - new uint[]{8622}, - new uint[]{8638}, - new uint[]{8623}, - new uint[]{8624}, - new uint[]{8625}, - new uint[]{8626}, - new uint[]{8627}, - new uint[]{8628}, - new uint[]{8629}, - Array.Empty(), - new uint[]{8630}, - new uint[]{8631}, - new uint[]{8632}, - new uint[]{8633}, - new uint[]{8634}, - new uint[]{8635}, - Array.Empty(), - new uint[]{8895}, - new uint[]{8896}, - new uint[]{8897}, - new uint[]{8898}, - new uint[]{8899}, - new uint[]{8657}, - new uint[]{8543}, - new uint[]{8544}, - Array.Empty(), - new uint[]{8545}, - new uint[]{8546}, - new uint[]{8547}, - new uint[]{8548}, - new uint[]{8549}, - new uint[]{8550}, - new uint[]{8551}, - new uint[]{8552}, - new uint[]{8553}, - new uint[]{8554}, - new uint[]{8555}, - new uint[]{8556}, - new uint[]{8557}, - new uint[]{8558}, - new uint[]{8559}, - new uint[]{8560}, - new uint[]{8561}, - new uint[]{8562}, - new uint[]{8563}, - new uint[]{8564}, - new uint[]{8565}, - new uint[]{8566}, - new uint[]{8567}, - new uint[]{8568}, - new uint[]{8900}, - new uint[]{8901}, - new uint[]{8902}, - new uint[]{8903}, - new uint[]{8904}, - new uint[]{8358}, - new uint[]{8213}, - new uint[]{8498}, - new uint[]{8499}, - new uint[]{8500}, - new uint[]{8501}, - Array.Empty(), - new uint[]{8502}, - new uint[]{8503}, - new uint[]{8504}, - new uint[]{8505}, - new uint[]{8506}, - new uint[]{8507}, - new uint[]{8508}, - new uint[]{8509}, - new uint[]{8786}, - new uint[]{8511}, - new uint[]{8512}, - new uint[]{8513}, - new uint[]{8514}, - new uint[]{8515}, - new uint[]{8516}, - new uint[]{8905}, - new uint[]{8906}, - new uint[]{8907}, - new uint[]{8908}, - new uint[]{8909}, - Array.Empty(), - Array.Empty(), - new uint[]{8570}, - new uint[]{8299}, - new uint[]{8517}, - new uint[]{8518}, - new uint[]{8519}, - new uint[]{8520}, - new uint[]{8521}, - new uint[]{8522}, - new uint[]{8523}, - new uint[]{8524}, - new uint[]{8525}, - new uint[]{8791}, - new uint[]{8526}, - new uint[]{8527}, - new uint[]{8528}, - new uint[]{8529}, - new uint[]{8787}, - new uint[]{8531}, - new uint[]{8532}, - new uint[]{8533}, - new uint[]{8534}, - new uint[]{8535}, - new uint[]{8536}, - new uint[]{8537}, - new uint[]{8538}, - new uint[]{8539}, - new uint[]{8540}, - new uint[]{8541}, - new uint[]{8542}, - new uint[]{8913}, - new uint[]{8914}, - new uint[]{8911}, - new uint[]{8912}, - new uint[]{8915}, - new uint[]{8310}, - new uint[]{8264}, - new uint[]{8388}, - new uint[]{8308}, - new uint[]{8303}, - new uint[]{8302}, - new uint[]{8306}, - new uint[]{4130}, - new uint[]{5978}, - new uint[]{5239}, - new uint[]{729}, - new uint[]{1492}, - new uint[]{713}, - new uint[]{8917}, - new uint[]{8918}, - new uint[]{8279}, - new uint[]{8275}, - new uint[]{8278}, - new uint[]{8274}, - new uint[]{8276}, - new uint[]{8277}, - new uint[]{8288}, - new uint[]{8280}, - new uint[]{8281}, - new uint[]{8287}, - new uint[]{8285}, - new uint[]{8283}, - new uint[]{8284}, - new uint[]{8282}, - new uint[]{8286}, - new uint[]{8292}, - new uint[]{8291}, - new uint[]{8289}, - new uint[]{8293}, - new uint[]{8290}, - new uint[]{8273}, - new uint[]{108}, - new uint[]{8214}, - new uint[]{8215}, - new uint[]{8216}, - new uint[]{8217}, - new uint[]{8218}, - new uint[]{8219}, - Array.Empty(), - new uint[]{8221}, - new uint[]{8222}, - new uint[]{8223}, - new uint[]{8224}, - new uint[]{8225}, - new uint[]{8226}, - new uint[]{8154}, - new uint[]{8263}, - new uint[]{8264}, - new uint[]{8265}, - new uint[]{8262}, - new uint[]{8271}, - new uint[]{8266}, - new uint[]{8267}, - new uint[]{8268}, - new uint[]{8269}, - new uint[]{8270}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{8227}, - new uint[]{8228}, - new uint[]{8229}, - new uint[]{8230}, - new uint[]{8353}, - new uint[]{8394}, - new uint[]{8268}, - new uint[]{8353}, - Array.Empty(), - new uint[]{8391}, - new uint[]{8390}, - new uint[]{8389}, - new uint[]{8353}, - Array.Empty(), - new uint[]{8391}, - new uint[]{8389}, - new uint[]{8389}, - new uint[]{8394}, - new uint[]{8268}, - new uint[]{8353}, - new uint[]{8379}, - new uint[]{8382}, - new uint[]{8381}, - new uint[]{8380}, - new uint[]{8382}, - new uint[]{8381}, - new uint[]{8380}, - new uint[]{8382}, - new uint[]{8382}, - new uint[]{8258}, - new uint[]{8256}, - new uint[]{8255}, - new uint[]{8254}, - new uint[]{8253}, - new uint[]{8339}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8338}, - new uint[]{8337}, - new uint[]{8922}, - new uint[]{8923}, - new uint[]{8924}, - Array.Empty(), - new uint[]{8238}, - new uint[]{8239}, - Array.Empty(), - new uint[]{8241}, - Array.Empty(), - new uint[]{8243}, - new uint[]{8244}, - new uint[]{8245}, - new uint[]{8246}, - new uint[]{8247}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{8302}, - new uint[]{8303}, - new uint[]{8304}, - Array.Empty(), - new uint[]{8306}, - new uint[]{8307}, - new uint[]{8308}, - new uint[]{8309}, - new uint[]{8310}, - new uint[]{8311}, - new uint[]{108}, - new uint[]{7864}, - new uint[]{8304}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8351}, - new uint[]{8352}, - new uint[]{8822}, - new uint[]{8378}, - new uint[]{8377}, - new uint[]{8376}, - new uint[]{8375}, - new uint[]{8374}, - new uint[]{8373}, - new uint[]{8372}, - new uint[]{8371}, - new uint[]{8645}, - new uint[]{8154}, - new uint[]{8649}, - new uint[]{8648}, - new uint[]{8374}, - new uint[]{8647}, - new uint[]{8374}, - new uint[]{8374}, - new uint[]{8399}, - new uint[]{8398}, - new uint[]{729}, - new uint[]{713}, - new uint[]{8889}, - new uint[]{1492}, - new uint[]{4130}, - new uint[]{5239}, - new uint[]{8645}, - new uint[]{8645}, - new uint[]{8925}, - new uint[]{8778}, - new uint[]{8778}, - new uint[]{8486}, - new uint[]{8486}, - new uint[]{8264}, - new uint[]{8258}, - new uint[]{8312}, - new uint[]{8254}, - new uint[]{8369}, - new uint[]{8368}, - Array.Empty(), - Array.Empty(), - new uint[]{8365}, - new uint[]{8364}, - new uint[]{8363}, - new uint[]{8362}, - new uint[]{8643}, - new uint[]{8644}, - new uint[]{8643}, - new uint[]{8644}, - new uint[]{8643}, - new uint[]{8644}, - new uint[]{8318}, - new uint[]{8314}, - new uint[]{8330}, - new uint[]{8316}, - new uint[]{8329}, - new uint[]{8315}, - new uint[]{8328}, - new uint[]{8317}, - new uint[]{8331}, - new uint[]{8332}, - new uint[]{8333}, - new uint[]{8910}, - new uint[]{8370}, - new uint[]{8350}, - new uint[]{8348}, - new uint[]{8347}, - new uint[]{8350}, - new uint[]{8349}, - new uint[]{8348}, - new uint[]{8347}, - new uint[]{8346}, - new uint[]{8379}, - new uint[]{8234}, - new uint[]{8778}, - new uint[]{8374}, - new uint[]{108}, - new uint[]{8919}, - new uint[]{4130}, - new uint[]{5239}, - new uint[]{8917}, - new uint[]{8374}, - new uint[]{8399}, - new uint[]{5978}, - new uint[]{5978}, - new uint[]{8651}, - new uint[]{8650}, - new uint[]{8308}, - new uint[]{8264}, - new uint[]{8310}, - new uint[]{8219}, - new uint[]{8269}, - new uint[]{8311}, - new uint[]{8396}, - new uint[]{8395}, - new uint[]{8394}, - new uint[]{8307}, - new uint[]{8258}, - new uint[]{8255}, - new uint[]{8312}, - new uint[]{8393}, - new uint[]{8214}, - new uint[]{8476, 8478, 8593, 8959}, - new uint[]{8594, 8960}, - new uint[]{8595, 8961}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8918}, - Array.Empty(), - new uint[]{8645}, - new uint[]{8921}, - new uint[]{8645}, - new uint[]{8645}, - new uint[]{8920}, - new uint[]{8921}, - new uint[]{8645, 8920, 8921}, - new uint[]{8646}, - new uint[]{8929}, - new uint[]{8930}, - new uint[]{8931}, - new uint[]{8932}, - Array.Empty(), - new uint[]{8933}, - new uint[]{8486}, - new uint[]{8486}, - new uint[]{8486}, - new uint[]{8486}, - new uint[]{8776}, - new uint[]{8777}, - new uint[]{8778}, - new uint[]{8777}, - new uint[]{8488}, - new uint[]{8489}, - new uint[]{8490}, - new uint[]{8491}, - new uint[]{8492}, - new uint[]{8489}, - new uint[]{8776}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8748}, - new uint[]{8781, 8782, 8784}, - new uint[]{8780}, - new uint[]{8780}, - new uint[]{8781}, - new uint[]{8782}, - new uint[]{8783}, - new uint[]{8784}, - new uint[]{8785}, - new uint[]{108}, - new uint[]{8374}, - new uint[]{8931}, - new uint[]{8652}, - new uint[]{8258}, - new uint[]{8257}, - new uint[]{8256}, - new uint[]{8254}, - new uint[]{8312}, - new uint[]{8397}, - new uint[]{8636}, - new uint[]{8637}, - new uint[]{8858}, - new uint[]{8859}, - new uint[]{8860}, - new uint[]{8861}, - new uint[]{8862}, - new uint[]{8863}, - new uint[]{8864}, - new uint[]{8865}, - new uint[]{8866}, - new uint[]{8867}, - new uint[]{8374}, - new uint[]{8374}, - new uint[]{8374}, - new uint[]{8374}, - new uint[]{8374}, - new uint[]{8374}, - new uint[]{8374}, - new uint[]{8374}, - new uint[]{8916}, - new uint[]{8682}, - new uint[]{8683}, - new uint[]{8684}, - new uint[]{8685}, - new uint[]{8686}, - new uint[]{8687}, - new uint[]{8688}, - new uint[]{8489}, - new uint[]{8395, 8777}, - Array.Empty(), - new uint[]{108}, - new uint[]{8803}, - new uint[]{8868}, - new uint[]{108}, - new uint[]{108}, - new uint[]{8310}, - new uint[]{8308}, - new uint[]{8306}, - new uint[]{8869}, - new uint[]{8870}, - new uint[]{8871}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{8640}, - new uint[]{8641}, - new uint[]{8642}, - new uint[]{8689}, - new uint[]{8690}, - new uint[]{8691}, - new uint[]{8692}, - new uint[]{8693}, - new uint[]{8694}, - new uint[]{8695}, - new uint[]{8696}, - new uint[]{8697}, - new uint[]{8698}, - new uint[]{8699}, - new uint[]{8700}, - new uint[]{8701}, - new uint[]{8702}, - new uint[]{8703}, - new uint[]{8704}, - new uint[]{8705}, - new uint[]{8706}, - new uint[]{8707}, - new uint[]{8708}, - new uint[]{8709}, - new uint[]{8710}, - new uint[]{8711}, - new uint[]{8712}, - Array.Empty(), - new uint[]{8713}, - new uint[]{8714}, - new uint[]{8715}, - new uint[]{8785}, - new uint[]{8639}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{8872}, - new uint[]{8872}, - new uint[]{8874}, - new uint[]{8875}, - new uint[]{8864}, - new uint[]{8876}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{8858}, - new uint[]{8346}, - new uint[]{8400}, - new uint[]{8401}, - new uint[]{8402}, - new uint[]{8403}, - new uint[]{8404}, - new uint[]{8405}, - new uint[]{8406}, - new uint[]{8407}, - new uint[]{8408}, - new uint[]{8409}, - new uint[]{8410}, - new uint[]{8411}, - new uint[]{8412}, - new uint[]{8413}, - new uint[]{8414}, - new uint[]{8414}, - new uint[]{8414}, - new uint[]{8417}, - new uint[]{8418}, - new uint[]{8419}, - new uint[]{8420}, - new uint[]{8421}, - new uint[]{8422}, - new uint[]{8423}, - new uint[]{8424}, - new uint[]{8425}, - new uint[]{8426}, - new uint[]{8427}, - new uint[]{8428}, - new uint[]{8429}, - new uint[]{8430}, - new uint[]{8431}, - new uint[]{8432}, - new uint[]{8433}, - new uint[]{8434}, - new uint[]{8435}, - new uint[]{8823}, - new uint[]{8436}, - new uint[]{8437}, - new uint[]{8438}, - new uint[]{8439}, - new uint[]{8440}, - new uint[]{8441}, - new uint[]{8442}, - new uint[]{8443}, - new uint[]{8444}, - new uint[]{8445}, - new uint[]{8446}, - new uint[]{8447}, - new uint[]{8448}, - new uint[]{8449}, - new uint[]{8450}, - new uint[]{8451}, - new uint[]{8452}, - new uint[]{8323}, - new uint[]{8324}, - new uint[]{8485}, - new uint[]{8319}, - new uint[]{8817}, - new uint[]{8818}, - new uint[]{8816}, - new uint[]{8320}, - new uint[]{8934}, - new uint[]{8322}, - new uint[]{108}, - new uint[]{8313}, - new uint[]{8815}, - new uint[]{8814}, - new uint[]{8813}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8302}, - new uint[]{8821}, - new uint[]{8819}, - new uint[]{108}, - Array.Empty(), - new uint[]{108}, - new uint[]{8234}, - Array.Empty(), - new uint[]{8352}, - new uint[]{8453}, - new uint[]{8454}, - new uint[]{8457}, - new uint[]{8458}, - new uint[]{8463}, - new uint[]{8467}, - new uint[]{8662, 8663, 8664}, - new uint[]{8662}, - new uint[]{8663}, - new uint[]{9029}, - new uint[]{9029}, - new uint[]{8670}, - new uint[]{8673}, - new uint[]{8680}, - new uint[]{8234}, - new uint[]{8922}, - new uint[]{8922}, - new uint[]{8327}, - new uint[]{8334}, - new uint[]{8335}, - new uint[]{8842, 8843, 8844, 8845}, - new uint[]{8842, 8843, 8845}, - new uint[]{8842, 8843, 8844, 8845}, - new uint[]{8842, 8843, 8844, 8845}, - new uint[]{8842, 8843, 8845}, - new uint[]{8842, 8845}, - new uint[]{8848}, - new uint[]{8849}, - new uint[]{8850}, - new uint[]{8851}, - new uint[]{8854}, - new uint[]{8852}, - new uint[]{8853}, - new uint[]{8855}, - new uint[]{108}, - new uint[]{8434}, - new uint[]{8493}, - new uint[]{8494}, - new uint[]{8495}, - new uint[]{8496}, - new uint[]{8497}, - new uint[]{8488}, - new uint[]{8489}, - new uint[]{108, 8493}, - new uint[]{8493}, - new uint[]{8795}, - new uint[]{8782}, - Array.Empty(), - new uint[]{8872}, - new uint[]{8872}, - new uint[]{8872}, - new uint[]{8872}, - new uint[]{8872}, - new uint[]{8872}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{8795}, - new uint[]{108}, - new uint[]{8796}, - new uint[]{108, 8796}, - new uint[]{8825}, - new uint[]{8824}, - new uint[]{108, 2186}, - new uint[]{8488}, - new uint[]{8846}, - new uint[]{8838}, - new uint[]{8839}, - new uint[]{8840}, - new uint[]{8841}, - new uint[]{8305}, - new uint[]{8847}, - new uint[]{8493}, - new uint[]{8485}, - new uint[]{8799}, - new uint[]{8798, 8823}, - new uint[]{108}, - new uint[]{8374}, - new uint[]{8779}, - new uint[]{8796}, - new uint[]{8797}, - new uint[]{8951}, - new uint[]{8952}, - new uint[]{8964}, - new uint[]{8830}, - new uint[]{8834}, - new uint[]{8835}, - new uint[]{108}, - new uint[]{8323}, - new uint[]{8812}, - new uint[]{8810}, - new uint[]{8809}, - new uint[]{8808}, - new uint[]{8807}, - new uint[]{8806}, - new uint[]{8800}, - new uint[]{8805}, - new uint[]{108, 8395}, - new uint[]{8927}, - new uint[]{8926}, - new uint[]{8716}, - new uint[]{8717}, - new uint[]{8718}, - new uint[]{8719}, - new uint[]{8720}, - new uint[]{8721}, - new uint[]{8722}, - new uint[]{8723}, - new uint[]{8724}, - new uint[]{8725}, - new uint[]{8726}, - new uint[]{8727}, - new uint[]{8728}, - new uint[]{8729}, - new uint[]{8730}, - new uint[]{8731}, - new uint[]{8732}, - new uint[]{8733}, - new uint[]{8734}, - new uint[]{8735}, - new uint[]{8736}, - new uint[]{8737}, - new uint[]{8738}, - new uint[]{8739}, - new uint[]{8740}, - new uint[]{8741}, - new uint[]{8742}, - new uint[]{8743}, - new uint[]{8744}, - new uint[]{8745}, - new uint[]{8746}, - new uint[]{8747}, - new uint[]{8965}, - new uint[]{8749}, - new uint[]{8750}, - new uint[]{8751}, - new uint[]{8752}, - new uint[]{8753}, - new uint[]{8754}, - new uint[]{8755}, - new uint[]{8756}, - new uint[]{8757}, - new uint[]{8758}, - new uint[]{8759}, - new uint[]{8760}, - new uint[]{8761}, - new uint[]{8762}, - new uint[]{8763}, - new uint[]{8764}, - new uint[]{8765}, - new uint[]{8766}, - new uint[]{8767}, - new uint[]{8768}, - new uint[]{8769}, - new uint[]{8770}, - new uint[]{8771}, - new uint[]{8772}, - new uint[]{8773}, - new uint[]{8774}, - new uint[]{8775}, - new uint[]{8228}, - new uint[]{8227}, - new uint[]{8827}, - new uint[]{8828}, - new uint[]{8829}, - new uint[]{8831}, - new uint[]{8832}, - new uint[]{8833}, - new uint[]{8836}, - new uint[]{8837}, - new uint[]{8826}, - new uint[]{8224}, - new uint[]{8966}, - new uint[]{8967}, - new uint[]{8968}, - new uint[]{9034}, - new uint[]{9033}, - new uint[]{9035}, - new uint[]{8969}, - new uint[]{8970}, - new uint[]{8971}, - new uint[]{8972}, - new uint[]{8973}, - new uint[]{8974}, - new uint[]{8975}, - new uint[]{8976}, - new uint[]{8977, 9026}, - new uint[]{8978}, - new uint[]{8979}, - new uint[]{8980}, - new uint[]{8460}, - new uint[]{8982}, - new uint[]{8983}, - new uint[]{8984}, - new uint[]{8985}, - new uint[]{8986}, - new uint[]{8987, 9025}, - new uint[]{8988}, - new uint[]{9039}, - new uint[]{8990}, - new uint[]{8991}, - new uint[]{8992}, - new uint[]{8993}, - new uint[]{8994}, - new uint[]{8995}, - new uint[]{8996}, - new uint[]{8997}, - new uint[]{9036}, - new uint[]{8998}, - new uint[]{8999}, - new uint[]{8877}, - new uint[]{8878}, - new uint[]{8879}, - new uint[]{8880}, - new uint[]{8881}, - new uint[]{8882}, - new uint[]{8883}, - new uint[]{8884}, - new uint[]{8885}, - new uint[]{8886}, - new uint[]{8887}, - new uint[]{8888}, - new uint[]{8947}, - new uint[]{8948}, - new uint[]{9000}, - new uint[]{9001}, - new uint[]{9002}, - new uint[]{9003, 9012}, - new uint[]{9004}, - new uint[]{9005}, - new uint[]{9006}, - new uint[]{9007}, - new uint[]{9008}, - new uint[]{8427}, - new uint[]{9027}, - new uint[]{9010}, - new uint[]{9011}, - new uint[]{9013}, - new uint[]{9037}, - new uint[]{9014}, - new uint[]{9015}, - new uint[]{8936, 8937, 8940, 8943, 8946}, - new uint[]{8937, 8938, 8944}, - new uint[]{8939, 8941, 8942, 8945}, - new uint[]{9016}, - new uint[]{9017}, - new uint[]{9018}, - new uint[]{9019}, - new uint[]{9020}, - new uint[]{9021}, - new uint[]{9022}, - new uint[]{9023}, - new uint[]{9024}, - new uint[]{9027}, - new uint[]{9027}, - new uint[]{9027}, - new uint[]{9038}, - new uint[]{9028}, - new uint[]{8953}, - new uint[]{8954}, - new uint[]{8955}, - new uint[]{8956}, - new uint[]{8957}, - new uint[]{2201}, - new uint[]{108}, - new uint[]{108}, - new uint[]{8822}, - new uint[]{8822}, - new uint[]{8154}, - Array.Empty(), - new uint[]{8470, 8474}, - new uint[]{8461}, - new uint[]{8462}, - new uint[]{8464}, - new uint[]{8465}, - new uint[]{8466}, - new uint[]{8468}, - new uint[]{8666}, - new uint[]{8669}, - new uint[]{8671}, - new uint[]{8672}, - new uint[]{8674}, - new uint[]{8677}, - new uint[]{8678}, - new uint[]{8679}, - Array.Empty(), - new uint[]{8659, 8660, 8661}, - new uint[]{8662}, - new uint[]{8663}, - new uint[]{8665}, - new uint[]{8667}, - new uint[]{8668}, - new uint[]{8668}, - new uint[]{108}, - new uint[]{8848}, - new uint[]{8645}, - new uint[]{8918}, - new uint[]{8645, 8921}, - new uint[]{8313}, - new uint[]{8872}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8918}, - new uint[]{8921}, - new uint[]{8645}, - new uint[]{8645}, - new uint[]{8820}, - new uint[]{108}, - new uint[]{8323}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{8819}, - new uint[]{8485}, - new uint[]{8294}, - new uint[]{8295}, - new uint[]{8294}, - new uint[]{8295}, - new uint[]{8296}, - new uint[]{8296}, - new uint[]{8949}, - new uint[]{8950}, - new uint[]{8646}, - new uint[]{8962}, - new uint[]{8962}, - new uint[]{8962}, - new uint[]{8962}, - new uint[]{8962}, - new uint[]{8963}, - new uint[]{8353}, - new uint[]{8394}, - new uint[]{8268}, - new uint[]{8952}, - new uint[]{8838}, - new uint[]{8918}, - new uint[]{8790}, - new uint[]{8234}, - new uint[]{8485}, - new uint[]{8485}, - new uint[]{8485}, - new uint[]{8324}, - new uint[]{8811}, - new uint[]{8804}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9044}, - new uint[]{9045}, - new uint[]{9064}, - new uint[]{9148}, - new uint[]{9149}, - new uint[]{9150}, - new uint[]{9151}, - new uint[]{9152}, - new uint[]{9152}, - new uint[]{9041}, - new uint[]{9049}, - new uint[]{9047}, - new uint[]{9048}, - new uint[]{9050}, - new uint[]{9065}, - new uint[]{9046}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9041}, - new uint[]{9063}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8352}, - new uint[]{8826}, - new uint[]{9180}, - new uint[]{9181}, - new uint[]{9182}, - new uint[]{9183}, - new uint[]{8351}, - new uint[]{9184}, - new uint[]{9185}, - new uint[]{9143}, - new uint[]{9143}, - new uint[]{9143}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9051}, - new uint[]{9051}, - new uint[]{9051}, - new uint[]{9052}, - new uint[]{9063}, - new uint[]{9053}, - new uint[]{9053}, - new uint[]{9053}, - new uint[]{9054}, - new uint[]{9055}, - new uint[]{9056}, - new uint[]{9062}, - new uint[]{9057}, - new uint[]{9179}, - new uint[]{9058}, - new uint[]{9059}, - new uint[]{9127}, - new uint[]{9128}, - new uint[]{9129}, - new uint[]{9060}, - new uint[]{9130}, - new uint[]{9061}, - new uint[]{9211}, - new uint[]{9212}, - new uint[]{9213}, - new uint[]{9214}, - new uint[]{9215}, - new uint[]{9216}, - new uint[]{9217}, - new uint[]{9218}, - new uint[]{8658}, - new uint[]{9221}, - new uint[]{9222}, - new uint[]{9223}, - new uint[]{9220}, - new uint[]{9224}, - new uint[]{9042}, - new uint[]{108}, - new uint[]{9186}, - new uint[]{9231}, - new uint[]{9232}, - Array.Empty(), - new uint[]{9239}, - new uint[]{9240}, - new uint[]{9241}, - new uint[]{9242}, - new uint[]{9243}, - new uint[]{9244}, - new uint[]{9141}, - new uint[]{9146}, - new uint[]{9142}, - Array.Empty(), - new uint[]{9142}, - new uint[]{9131}, - new uint[]{9245}, - new uint[]{2667}, - Array.Empty(), - new uint[]{9245}, - Array.Empty(), - new uint[]{9245}, - new uint[]{9245}, - new uint[]{9245}, - new uint[]{9245}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9143}, - new uint[]{9153}, - new uint[]{9154}, - new uint[]{9155}, - new uint[]{9156}, - new uint[]{9157}, - new uint[]{9136}, - new uint[]{9134}, - new uint[]{9135}, - new uint[]{9136}, - new uint[]{9137}, - new uint[]{9138}, - new uint[]{9139}, - new uint[]{9140}, - new uint[]{9219}, - new uint[]{9132}, - new uint[]{9133}, - new uint[]{9230}, - new uint[]{9189}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9190}, - new uint[]{9190}, - new uint[]{9191}, - new uint[]{9192}, - new uint[]{9193}, - new uint[]{9194}, - new uint[]{9195}, - new uint[]{9196}, - new uint[]{9197}, - Array.Empty(), - new uint[]{9199}, - new uint[]{9200}, - new uint[]{9201}, - new uint[]{7857}, - new uint[]{7860}, - new uint[]{7857, 9189}, - new uint[]{9202}, - new uint[]{9203}, - new uint[]{9204}, - new uint[]{9205}, - new uint[]{9218}, - new uint[]{9220}, - new uint[]{9042}, - new uint[]{9178}, - new uint[]{9177}, - new uint[]{9176}, - new uint[]{9160}, - new uint[]{9159}, - new uint[]{9162}, - new uint[]{9161}, - new uint[]{9207}, - new uint[]{9208}, - new uint[]{9209}, - new uint[]{9210}, - new uint[]{9158}, - new uint[]{9158}, - new uint[]{9159}, - new uint[]{9160}, - new uint[]{9161}, - new uint[]{9162}, - new uint[]{8126}, - new uint[]{8105}, - new uint[]{9163}, - new uint[]{9164}, - new uint[]{9165}, - new uint[]{9166}, - new uint[]{9167}, - new uint[]{9168}, - new uint[]{9169}, - new uint[]{9170}, - new uint[]{9171}, - new uint[]{9172}, - new uint[]{9172}, - new uint[]{9172}, - new uint[]{9173}, - new uint[]{9173}, - new uint[]{9174}, - new uint[]{9175}, - Array.Empty(), - new uint[]{9131}, - new uint[]{9229}, - new uint[]{9247}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{8845}, - new uint[]{8845}, - new uint[]{8845}, - new uint[]{9131}, - new uint[]{108, 9147}, - Array.Empty(), - Array.Empty(), - new uint[]{9233}, - new uint[]{9234}, - new uint[]{9235}, - new uint[]{9236}, - new uint[]{9237}, - new uint[]{9238}, - Array.Empty(), - new uint[]{9260}, - new uint[]{9261}, - new uint[]{9262}, - new uint[]{9250}, - Array.Empty(), - new uint[]{731}, - new uint[]{9250}, - new uint[]{9254}, - new uint[]{9254}, - new uint[]{9250}, - new uint[]{9259}, - new uint[]{9253}, - new uint[]{731}, - new uint[]{9250}, - new uint[]{9254}, - new uint[]{9254}, - new uint[]{9255}, - new uint[]{9256}, - Array.Empty(), - new uint[]{9246}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{9829}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{3046}, - new uint[]{2667}, - Array.Empty(), - new uint[]{9248}, - new uint[]{9249}, - Array.Empty(), - new uint[]{9263}, - new uint[]{9264}, - new uint[]{9265}, - new uint[]{9266}, - new uint[]{9281}, - new uint[]{9282}, - new uint[]{9283}, - new uint[]{9284}, - new uint[]{9285}, - Array.Empty(), - new uint[]{9281}, - new uint[]{9282}, - new uint[]{9283}, - new uint[]{9284}, - new uint[]{9285}, - new uint[]{9286}, - new uint[]{9287}, - new uint[]{9288}, - new uint[]{9289}, - new uint[]{9290}, - new uint[]{9291}, - new uint[]{9287}, - new uint[]{9288}, - new uint[]{9289}, - new uint[]{9290}, - new uint[]{9291}, - new uint[]{9292}, - new uint[]{9267}, - new uint[]{9268}, - new uint[]{9269}, - new uint[]{9271}, - new uint[]{108}, - new uint[]{9272}, - new uint[]{9273}, - new uint[]{9274}, - new uint[]{9275}, - new uint[]{9276}, - new uint[]{9277}, - new uint[]{9278}, - new uint[]{9316}, - new uint[]{9830}, - new uint[]{9288}, - new uint[]{9289}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9279}, - new uint[]{9280}, - new uint[]{9298}, - new uint[]{9299}, - Array.Empty(), - new uint[]{9301}, - new uint[]{9301}, - new uint[]{9298}, - new uint[]{9299}, - new uint[]{9300}, - new uint[]{9301}, - new uint[]{9301}, - Array.Empty(), - new uint[]{9302}, - new uint[]{9303}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9296}, - new uint[]{8378}, - new uint[]{8377}, - new uint[]{8376}, - new uint[]{8375}, - new uint[]{9293}, - new uint[]{9294}, - new uint[]{9295}, - new uint[]{9297}, - new uint[]{9341}, - new uint[]{9365}, - Array.Empty(), - new uint[]{9360}, - new uint[]{9361}, - new uint[]{9362}, - new uint[]{9355}, - new uint[]{3819}, - new uint[]{3820}, - new uint[]{9342}, - new uint[]{9356}, - new uint[]{9331}, - new uint[]{9331}, - Array.Empty(), - new uint[]{9329}, - new uint[]{9328}, - new uint[]{9332}, - new uint[]{9332}, - new uint[]{9332}, - new uint[]{9332}, - new uint[]{9332}, - new uint[]{9333}, - new uint[]{9333}, - new uint[]{9333}, - new uint[]{9334}, - new uint[]{9335}, - new uint[]{9336}, - new uint[]{9337}, - new uint[]{9338}, - new uint[]{108, 9339}, - new uint[]{9340}, - new uint[]{9341}, - new uint[]{9365}, - new uint[]{9360}, - new uint[]{9361}, - new uint[]{9362}, - new uint[]{9355}, - new uint[]{9342}, - new uint[]{9353}, - Array.Empty(), - new uint[]{9318}, - new uint[]{9319}, - new uint[]{9320}, - new uint[]{9321}, - new uint[]{9322}, - new uint[]{9323}, - new uint[]{9353}, - Array.Empty(), - Array.Empty(), - new uint[]{9319}, - new uint[]{9320}, - new uint[]{9321}, - new uint[]{9324}, - new uint[]{9346}, - new uint[]{5239}, - new uint[]{9348}, - new uint[]{9347}, - new uint[]{9349}, - new uint[]{8378}, - Array.Empty(), - new uint[]{9333}, - Array.Empty(), - new uint[]{9358}, - new uint[]{9357}, - new uint[]{9278}, - new uint[]{9325}, - new uint[]{9491}, - new uint[]{9490}, - new uint[]{9502}, - new uint[]{9503}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9326}, - new uint[]{9299}, - new uint[]{9299}, - Array.Empty(), - new uint[]{731}, - Array.Empty(), - Array.Empty(), - new uint[]{10119}, - Array.Empty(), - new uint[]{9317}, - new uint[]{9317}, - new uint[]{9288}, - new uint[]{9289}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9400}, - new uint[]{9513}, - new uint[]{9390}, - new uint[]{9402}, - new uint[]{9350}, - new uint[]{9359}, - new uint[]{9254}, - new uint[]{9254}, - new uint[]{9329}, - new uint[]{9327}, - new uint[]{9278}, - new uint[]{9333}, - new uint[]{9334}, - new uint[]{9339}, - new uint[]{9424}, - new uint[]{9425}, - new uint[]{9398}, - new uint[]{9399}, - new uint[]{9403}, - new uint[]{9404}, - new uint[]{9405}, - new uint[]{9406}, - new uint[]{9396}, - new uint[]{9475}, - new uint[]{9475}, - new uint[]{9476, 9501}, - new uint[]{9477}, - new uint[]{9477}, - new uint[]{9478, 9641}, - new uint[]{9478, 9641}, - new uint[]{9479}, - new uint[]{9480}, - new uint[]{9481}, - new uint[]{9482}, - new uint[]{9482}, - new uint[]{108}, - new uint[]{9427}, - new uint[]{9428}, - new uint[]{9462}, - new uint[]{9829}, - new uint[]{9830}, - new uint[]{9702}, - new uint[]{9702}, - new uint[]{9693}, - Array.Empty(), - new uint[]{9465}, - new uint[]{9466}, - new uint[]{9467}, - new uint[]{9468}, - new uint[]{9469}, - new uint[]{9470}, - new uint[]{9471}, - new uint[]{9472}, - new uint[]{9473}, - new uint[]{9462}, - new uint[]{9462}, - new uint[]{9822, 9823, 9824}, - new uint[]{541}, - Array.Empty(), - Array.Empty(), - new uint[]{9465}, - new uint[]{9466}, - new uint[]{9467}, - new uint[]{9468}, - new uint[]{9469}, - new uint[]{9470}, - new uint[]{9471}, - new uint[]{9472}, - new uint[]{9473}, - new uint[]{9505}, - new uint[]{9506}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{9508}, - new uint[]{9510}, - new uint[]{9510}, - new uint[]{9510}, - new uint[]{9510}, - new uint[]{9509}, - new uint[]{9509}, - new uint[]{9509}, - new uint[]{9509}, - new uint[]{9458}, - new uint[]{9459}, - new uint[]{9460}, - new uint[]{5045}, - new uint[]{9461}, - new uint[]{9461}, - new uint[]{9461}, - new uint[]{9442}, - new uint[]{9443}, - new uint[]{9444}, - new uint[]{9445}, - new uint[]{9446}, - new uint[]{9447}, - new uint[]{9448}, - new uint[]{9449}, - new uint[]{9450}, - new uint[]{9299}, - new uint[]{9299}, - Array.Empty(), - Array.Empty(), - new uint[]{9451}, - new uint[]{108}, - new uint[]{9364}, - new uint[]{9617}, - new uint[]{9618}, - new uint[]{9322}, - new uint[]{9417}, - new uint[]{9515}, - new uint[]{9516}, - new uint[]{9517}, - new uint[]{9518}, - new uint[]{9519}, - new uint[]{9520}, - new uint[]{9521}, - new uint[]{9522}, - new uint[]{9523}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{11320}, - Array.Empty(), - new uint[]{9530}, - new uint[]{9531}, - new uint[]{9532}, - new uint[]{9533}, - new uint[]{9534}, - new uint[]{9535}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{10015}, - new uint[]{9391}, - new uint[]{9392}, - new uint[]{9393}, - new uint[]{9536}, - new uint[]{9537}, - new uint[]{9538}, - new uint[]{9931}, - new uint[]{9539}, - new uint[]{9540}, - new uint[]{9541}, - new uint[]{9542}, - new uint[]{9408}, - new uint[]{9544}, - new uint[]{9533}, - new uint[]{9545}, - new uint[]{9546}, - new uint[]{9547}, - new uint[]{9536}, - new uint[]{9548}, - new uint[]{9549}, - new uint[]{9550}, - new uint[]{9551}, - new uint[]{9537}, - new uint[]{10107}, - new uint[]{10116}, - new uint[]{108}, - new uint[]{9538}, - new uint[]{9555}, - new uint[]{9556}, - new uint[]{9557}, - new uint[]{9558}, - new uint[]{9559}, - new uint[]{9560}, - new uint[]{9561}, - new uint[]{9562}, - new uint[]{9563}, - new uint[]{9564}, - new uint[]{9536}, - new uint[]{9565}, - new uint[]{9430}, - new uint[]{9567}, - new uint[]{9533}, - new uint[]{9568}, - new uint[]{9569}, - new uint[]{9570}, - new uint[]{9571}, - new uint[]{9538}, - new uint[]{9572}, - new uint[]{9573}, - new uint[]{9679}, - new uint[]{9537}, - new uint[]{9575}, - new uint[]{9576}, - new uint[]{9577}, - new uint[]{9578}, - new uint[]{9394}, - new uint[]{9395}, - new uint[]{9407}, - new uint[]{9408}, - new uint[]{9650}, - Array.Empty(), - new uint[]{9664}, - new uint[]{9651}, - new uint[]{9384}, - new uint[]{9422}, - new uint[]{9423}, - new uint[]{9507}, - new uint[]{9411}, - new uint[]{9411}, - new uint[]{9412}, - new uint[]{9413}, - new uint[]{9414}, - new uint[]{9415}, - new uint[]{9416}, - new uint[]{108, 9489}, - new uint[]{9492}, - new uint[]{9493}, - new uint[]{9494}, - new uint[]{9495}, - new uint[]{9496}, - new uint[]{9497}, - new uint[]{9498}, - new uint[]{9499}, - new uint[]{9500}, - new uint[]{9656}, - new uint[]{9664}, - new uint[]{9657}, - new uint[]{9366}, - new uint[]{9367}, - new uint[]{9369}, - new uint[]{9371}, - new uint[]{9372}, - new uint[]{9373}, - new uint[]{9426}, - new uint[]{9409}, - new uint[]{9390}, - new uint[]{9410}, - new uint[]{9375}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9389}, - new uint[]{9386}, - new uint[]{9386}, - new uint[]{9386}, - new uint[]{9387}, - new uint[]{9387}, - new uint[]{9388}, - new uint[]{9388}, - new uint[]{9384}, - new uint[]{108, 9384}, - new uint[]{9642}, - new uint[]{9381}, - new uint[]{9588}, - new uint[]{9382}, - new uint[]{9383}, - new uint[]{9390}, - new uint[]{9390}, - Array.Empty(), - new uint[]{9390}, - new uint[]{9390}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{9403}, - new uint[]{9404}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9409}, - Array.Empty(), - new uint[]{9452}, - new uint[]{9453}, - new uint[]{9454}, - new uint[]{9455}, - new uint[]{9456}, - new uint[]{9457}, - new uint[]{9513}, - new uint[]{9646}, - new uint[]{9647}, - new uint[]{9644}, - new uint[]{9645}, - new uint[]{9648}, - new uint[]{9368}, - new uint[]{9370}, - new uint[]{9140}, - new uint[]{9436}, - new uint[]{9437}, - new uint[]{9438}, - new uint[]{9419}, - new uint[]{9420}, - new uint[]{9421}, - new uint[]{108}, - new uint[]{9439}, - new uint[]{9439}, - new uint[]{9439}, - new uint[]{9436}, - new uint[]{9440}, - Array.Empty(), - new uint[]{9441}, - new uint[]{9366}, - new uint[]{9367}, - new uint[]{9374}, - new uint[]{9543}, - new uint[]{9429}, - new uint[]{9430}, - Array.Empty(), - new uint[]{9431}, - new uint[]{9543}, - new uint[]{9432}, - new uint[]{9652}, - new uint[]{9655}, - new uint[]{9653}, - new uint[]{9654}, - new uint[]{510, 9384, 9398, 9400, 9419, 9426, 9929, 9931, 9967}, - new uint[]{9132}, - new uint[]{9133}, - new uint[]{9649}, - new uint[]{9140}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9608}, - new uint[]{9607}, - new uint[]{9368}, - new uint[]{9369}, - new uint[]{9370}, - new uint[]{9371}, - new uint[]{9372}, - new uint[]{9373}, - new uint[]{9384}, - new uint[]{9659}, - new uint[]{9662}, - new uint[]{9660}, - new uint[]{9661}, - new uint[]{9663}, - new uint[]{9511}, - new uint[]{9512}, - new uint[]{9363, 11271}, - new uint[]{9363, 11271}, - new uint[]{9363, 11271}, - new uint[]{9418}, - new uint[]{108, 9485, 9486, 9487, 9488}, - new uint[]{108, 9483, 9484}, - new uint[]{9477}, - new uint[]{9433}, - new uint[]{9680}, - new uint[]{9433}, - new uint[]{9681}, - new uint[]{9434}, - Array.Empty(), - new uint[]{9595}, - new uint[]{9668}, - new uint[]{9348}, - new uint[]{8378}, - new uint[]{5573}, - new uint[]{9666}, - new uint[]{2118}, - new uint[]{2160}, - new uint[]{2135}, - new uint[]{2136}, - new uint[]{9667}, - new uint[]{9671}, - new uint[]{9672}, - new uint[]{9674}, - new uint[]{3639}, - new uint[]{3642}, - new uint[]{3633}, - new uint[]{3632}, - new uint[]{4739}, - new uint[]{7869}, - new uint[]{9675}, - new uint[]{3458}, - new uint[]{3458}, - new uint[]{5576}, - new uint[]{9676}, - new uint[]{9677}, - new uint[]{9678}, - new uint[]{6148}, - new uint[]{6039}, - new uint[]{7537}, - new uint[]{6041}, - new uint[]{6042}, - new uint[]{6040}, - new uint[]{9673}, - new uint[]{8258}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9669}, - new uint[]{8826}, - new uint[]{9476}, - new uint[]{9479}, - new uint[]{9479}, - new uint[]{9479}, - new uint[]{9475}, - new uint[]{9479}, - new uint[]{9480}, - new uint[]{8826}, - new uint[]{9670}, - new uint[]{9586}, - new uint[]{9587}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9514}, - new uint[]{9432}, - new uint[]{9596}, - Array.Empty(), - new uint[]{9597}, - Array.Empty(), - new uint[]{9377}, - new uint[]{9378}, - new uint[]{108, 9379}, - new uint[]{9385}, - new uint[]{9425}, - new uint[]{9378}, - new uint[]{9589}, - new uint[]{9589}, - new uint[]{9589}, - new uint[]{9589}, - new uint[]{9590}, - new uint[]{9591}, - new uint[]{9592}, - new uint[]{9593}, - new uint[]{9594}, - Array.Empty(), - Array.Empty(), - new uint[]{9388}, - new uint[]{9606}, - new uint[]{9604}, - new uint[]{9375}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9605}, - new uint[]{9598}, - new uint[]{9599}, - new uint[]{9600}, - new uint[]{9386}, - new uint[]{9386}, - new uint[]{9386}, - new uint[]{9387}, - new uint[]{9388}, - new uint[]{9376}, - new uint[]{9390}, - new uint[]{9603}, - new uint[]{9602}, - new uint[]{9579}, - new uint[]{9580}, - new uint[]{9581}, - new uint[]{9579}, - new uint[]{9580}, - new uint[]{9582}, - new uint[]{9582}, - new uint[]{9582}, - Array.Empty(), - new uint[]{9582}, - new uint[]{9582}, - new uint[]{9582}, - Array.Empty(), - new uint[]{9543}, - new uint[]{9609}, - new uint[]{9559}, - new uint[]{9375}, - new uint[]{9639}, - new uint[]{9543}, - new uint[]{9566}, - Array.Empty(), - Array.Empty(), - new uint[]{9612}, - Array.Empty(), - new uint[]{9589}, - new uint[]{9589}, - new uint[]{9408}, - new uint[]{9407}, - new uint[]{9632}, - new uint[]{9601}, - new uint[]{9629}, - new uint[]{9630}, - new uint[]{9631}, - new uint[]{9374}, - new uint[]{9386}, - new uint[]{9636}, - new uint[]{9602}, - new uint[]{9635}, - new uint[]{9377}, - new uint[]{9647}, - new uint[]{9647}, - new uint[]{9385}, - new uint[]{9377}, - new uint[]{9637}, - new uint[]{9604}, - new uint[]{9385}, - new uint[]{9390}, - new uint[]{9633}, - new uint[]{9384}, - new uint[]{9634}, - Array.Empty(), - new uint[]{7974}, - new uint[]{9388}, - new uint[]{9386}, - new uint[]{9543}, - new uint[]{9638}, - new uint[]{9376}, - new uint[]{9457}, - new uint[]{9636}, - new uint[]{9602}, - new uint[]{9390}, - new uint[]{9366}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9640}, - new uint[]{9599}, - new uint[]{9636}, - new uint[]{9602}, - new uint[]{9564}, - new uint[]{9366}, - new uint[]{9367}, - new uint[]{6945}, - new uint[]{9425}, - new uint[]{9378}, - new uint[]{9607}, - new uint[]{9608}, - new uint[]{9368}, - new uint[]{108}, - new uint[]{9390}, - new uint[]{9636}, - new uint[]{9602}, - new uint[]{9585}, - new uint[]{9714}, - new uint[]{9715}, - new uint[]{9716}, - new uint[]{9717}, - new uint[]{9718}, - new uint[]{9719}, - new uint[]{9720}, - new uint[]{9721}, - new uint[]{9722}, - new uint[]{9723}, - new uint[]{9724}, - new uint[]{9725}, - new uint[]{9726}, - new uint[]{9727}, - new uint[]{9728}, - new uint[]{9729}, - new uint[]{9730}, - new uint[]{9731}, - new uint[]{9732}, - new uint[]{9733}, - new uint[]{9734}, - new uint[]{9665}, - Array.Empty(), - Array.Empty(), - new uint[]{9371}, - new uint[]{9372}, - new uint[]{9373}, - new uint[]{9389}, - new uint[]{9386}, - new uint[]{9386}, - new uint[]{9387}, - new uint[]{9388}, - new uint[]{10096}, - new uint[]{10099}, - new uint[]{9682}, - new uint[]{9683}, - new uint[]{9684}, - new uint[]{9603}, - new uint[]{9685}, - new uint[]{9686}, - new uint[]{9390}, - new uint[]{9390}, - new uint[]{9411}, - new uint[]{9503}, - new uint[]{9916}, - new uint[]{9439}, - new uint[]{8826}, - new uint[]{8826}, - new uint[]{541}, - new uint[]{9737}, - new uint[]{9688}, - new uint[]{9741}, - new uint[]{9735}, - new uint[]{9736}, - new uint[]{9737}, - new uint[]{9788}, - new uint[]{9789}, - new uint[]{9790}, - new uint[]{9791}, - new uint[]{9792}, - new uint[]{9795}, - new uint[]{9796}, - new uint[]{9793}, - new uint[]{9794}, - new uint[]{9797}, - new uint[]{9799}, - new uint[]{9808}, - new uint[]{9810}, - new uint[]{9800}, - new uint[]{9801}, - new uint[]{9802}, - new uint[]{9803}, - new uint[]{9804}, - new uint[]{9805}, - new uint[]{9806}, - new uint[]{9807}, - new uint[]{9809}, - new uint[]{9776}, - new uint[]{9777}, - new uint[]{9778}, - new uint[]{9779}, - new uint[]{9780}, - new uint[]{9781}, - new uint[]{9782}, - new uint[]{9783}, - new uint[]{9784}, - new uint[]{9785}, - new uint[]{9786}, - new uint[]{9808}, - new uint[]{9787}, - new uint[]{9808}, - new uint[]{9774}, - new uint[]{9773}, - new uint[]{9811}, - new uint[]{9775}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9696}, - new uint[]{9697}, - new uint[]{9698}, - new uint[]{9699}, - new uint[]{9697}, - new uint[]{9701}, - new uint[]{9702}, - new uint[]{9696}, - new uint[]{9697}, - Array.Empty(), - new uint[]{9699}, - new uint[]{9697}, - new uint[]{9701}, - new uint[]{9702}, - new uint[]{9703}, - new uint[]{9704}, - new uint[]{9705}, - new uint[]{9706}, - new uint[]{9798}, - new uint[]{9798}, - Array.Empty(), - new uint[]{9812}, - new uint[]{9808}, - new uint[]{9808}, - new uint[]{9742}, - new uint[]{9743}, - new uint[]{9744}, - new uint[]{9745}, - new uint[]{9764}, - new uint[]{9765}, - new uint[]{9766}, - new uint[]{9767}, - new uint[]{9768}, - new uint[]{9764}, - new uint[]{9766}, - new uint[]{9767}, - new uint[]{9765}, - new uint[]{9768}, - Array.Empty(), - new uint[]{9769}, - new uint[]{9769}, - new uint[]{9769}, - new uint[]{9769}, - new uint[]{9769}, - Array.Empty(), - Array.Empty(), - new uint[]{9769}, - new uint[]{9769}, - new uint[]{9769}, - new uint[]{9769}, - new uint[]{9769}, - new uint[]{9772}, - new uint[]{9770}, - new uint[]{9771}, - new uint[]{9707}, - new uint[]{9708}, - Array.Empty(), - new uint[]{9709}, - new uint[]{9710}, - new uint[]{9711}, - new uint[]{9708}, - new uint[]{9707}, - new uint[]{9708}, - Array.Empty(), - new uint[]{9709}, - new uint[]{9710}, - new uint[]{9711}, - new uint[]{9712}, - new uint[]{9713}, - new uint[]{9738}, - new uint[]{9739}, - new uint[]{9740}, - new uint[]{9808}, - new uint[]{9619, 9885}, - new uint[]{9886}, - new uint[]{9887}, - new uint[]{9888}, - new uint[]{9889}, - new uint[]{9890}, - new uint[]{9891}, - new uint[]{9892}, - new uint[]{9893}, - new uint[]{9894}, - new uint[]{9813}, - new uint[]{9813}, - new uint[]{9815}, - new uint[]{9816}, - new uint[]{9817}, - new uint[]{9818}, - new uint[]{9819}, - new uint[]{9829}, - new uint[]{9830}, - new uint[]{9826}, - new uint[]{9827}, - new uint[]{9828}, - new uint[]{9813}, - new uint[]{9814}, - new uint[]{9815}, - new uint[]{9821}, - new uint[]{9818}, - new uint[]{9819}, - new uint[]{9820}, - new uint[]{9830}, - new uint[]{9831}, - new uint[]{9832}, - new uint[]{9747}, - new uint[]{9748}, - new uint[]{9746}, - new uint[]{9751}, - new uint[]{9752}, - new uint[]{9751}, - new uint[]{9752}, - new uint[]{9753}, - new uint[]{9754}, - new uint[]{9755}, - new uint[]{9756}, - new uint[]{9755}, - new uint[]{9756}, - new uint[]{9757}, - new uint[]{9758}, - new uint[]{9759}, - new uint[]{9760}, - new uint[]{9761}, - Array.Empty(), - new uint[]{9763}, - new uint[]{9328}, - Array.Empty(), - new uint[]{9750}, - new uint[]{9838}, - new uint[]{9839}, - new uint[]{9840}, - new uint[]{9841}, - new uint[]{9842}, - new uint[]{9843}, - new uint[]{9844}, - new uint[]{9849}, - new uint[]{9847}, - new uint[]{9838}, - new uint[]{9839}, - new uint[]{9851}, - new uint[]{9852}, - new uint[]{9840}, - new uint[]{9841}, - new uint[]{9842}, - new uint[]{9850}, - new uint[]{9843}, - new uint[]{9844}, - new uint[]{9845}, - new uint[]{9846}, - new uint[]{9849}, - new uint[]{9847}, - new uint[]{9848}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9853}, - new uint[]{9855}, - new uint[]{9856}, - new uint[]{9857}, - new uint[]{9858}, - new uint[]{9859}, - new uint[]{9860}, - new uint[]{9861}, - new uint[]{9862}, - new uint[]{9854}, - new uint[]{9853}, - new uint[]{9855}, - new uint[]{9856}, - new uint[]{9857}, - new uint[]{9858}, - new uint[]{9859}, - new uint[]{9860}, - new uint[]{9861}, - new uint[]{9862}, - new uint[]{9854}, - new uint[]{9796}, - new uint[]{9796}, - new uint[]{9796}, - new uint[]{9796}, - new uint[]{9796}, - new uint[]{9908}, - new uint[]{9909}, - new uint[]{9908}, - Array.Empty(), - new uint[]{9910}, - new uint[]{9869}, - new uint[]{9870}, - new uint[]{9871}, - new uint[]{9872}, - new uint[]{9346}, - new uint[]{9873}, - new uint[]{9875}, - new uint[]{9876}, - new uint[]{9874}, - new uint[]{9877}, - new uint[]{9878}, - new uint[]{316}, - new uint[]{9879}, - new uint[]{9881}, - new uint[]{9880}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9863}, - new uint[]{9838}, - new uint[]{9840}, - new uint[]{9841}, - new uint[]{9842}, - new uint[]{9843}, - new uint[]{9844}, - new uint[]{9849}, - new uint[]{9847}, - new uint[]{9863}, - new uint[]{9838}, - Array.Empty(), - new uint[]{9851}, - new uint[]{9840}, - new uint[]{9841}, - new uint[]{9842}, - Array.Empty(), - new uint[]{9843}, - new uint[]{9844}, - new uint[]{9849}, - new uint[]{9847}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9895}, - new uint[]{9896}, - new uint[]{9897}, - new uint[]{9332, 9898}, - new uint[]{9332, 9898}, - new uint[]{9898}, - new uint[]{9332}, - new uint[]{9398}, - new uint[]{9902}, - new uint[]{9903}, - new uint[]{9904}, - new uint[]{9905}, - new uint[]{11321}, - new uint[]{3633}, - new uint[]{9834}, - new uint[]{9836}, - Array.Empty(), - Array.Empty(), - new uint[]{9834}, - new uint[]{9835}, - new uint[]{9836}, - Array.Empty(), - new uint[]{3634}, - new uint[]{3639}, - new uint[]{3642}, - new uint[]{3632}, - new uint[]{3458}, - new uint[]{3458}, - new uint[]{11315}, - new uint[]{11316}, - new uint[]{108, 11317}, - new uint[]{11318}, - new uint[]{3632}, - new uint[]{3458}, - new uint[]{4954}, - Array.Empty(), - new uint[]{3458}, - new uint[]{11319}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9696}, - new uint[]{9696}, - new uint[]{9868}, - new uint[]{3983}, - new uint[]{11314}, - new uint[]{3635}, - new uint[]{3636}, - new uint[]{3637}, - new uint[]{3638}, - new uint[]{3640}, - new uint[]{3641}, - new uint[]{3643}, - new uint[]{3644}, - new uint[]{9696}, - new uint[]{9696}, - new uint[]{9700}, - new uint[]{9700}, - new uint[]{9700}, - new uint[]{9700}, - new uint[]{3984}, - new uint[]{3983}, - new uint[]{11314}, - new uint[]{10075}, - new uint[]{10077}, - new uint[]{10074}, - new uint[]{10013, 11270}, - new uint[]{9696}, - new uint[]{9696}, - Array.Empty(), - Array.Empty(), - new uint[]{9696}, - Array.Empty(), - new uint[]{9696}, - new uint[]{9696}, - new uint[]{4093}, - new uint[]{9864}, - new uint[]{9865}, - new uint[]{9866}, - new uint[]{9867}, - new uint[]{9871}, - new uint[]{9911}, - new uint[]{9912}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9879}, - new uint[]{9917}, - new uint[]{10103}, - new uint[]{108}, - new uint[]{9902}, - new uint[]{9879}, - new uint[]{9948}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9949}, - new uint[]{9950}, - new uint[]{9951}, - new uint[]{9918}, - new uint[]{9919}, - new uint[]{9921}, - new uint[]{9922}, - new uint[]{9664}, - new uint[]{9136}, - new uint[]{9923}, - new uint[]{10064}, - new uint[]{10063}, - new uint[]{9941}, - new uint[]{9942}, - new uint[]{9943}, - new uint[]{9944}, - new uint[]{9945}, - new uint[]{9946}, - new uint[]{10065}, - new uint[]{10066}, - new uint[]{9989}, - new uint[]{9988}, - new uint[]{9992}, - new uint[]{9993}, - new uint[]{9649}, - new uint[]{10059}, - new uint[]{9133}, - new uint[]{10004}, - new uint[]{10076}, - new uint[]{10068}, - new uint[]{10069}, - new uint[]{10070}, - new uint[]{10071}, - new uint[]{10072}, - new uint[]{10073}, - new uint[]{10007}, - new uint[]{10008}, - new uint[]{10009}, - new uint[]{108}, - Array.Empty(), - new uint[]{9955}, - new uint[]{9938}, - new uint[]{9947}, - new uint[]{9514}, - new uint[]{9429}, - new uint[]{9939}, - new uint[]{9940}, - new uint[]{10095}, - Array.Empty(), - new uint[]{9409}, - new uint[]{9390}, - new uint[]{9694}, - new uint[]{9695}, - new uint[]{9924}, - new uint[]{9928}, - new uint[]{9929}, - new uint[]{9930}, - new uint[]{9925}, - new uint[]{9926}, - new uint[]{9927}, - new uint[]{9969}, - new uint[]{9970}, - new uint[]{9971}, - new uint[]{9972}, - new uint[]{9973}, - new uint[]{9974}, - new uint[]{10057}, - new uint[]{10100}, - new uint[]{108}, - new uint[]{10097}, - new uint[]{10098}, - new uint[]{10109}, - new uint[]{10113}, - new uint[]{10108}, - new uint[]{10101}, - new uint[]{10107}, - new uint[]{108}, - new uint[]{10192}, - new uint[]{10006}, - new uint[]{9409}, - new uint[]{9694}, - new uint[]{9453}, - new uint[]{10005}, - new uint[]{9346}, - new uint[]{10010}, - new uint[]{9869}, - new uint[]{9870}, - new uint[]{10011}, - new uint[]{10013}, - new uint[]{10014}, - new uint[]{9349}, - new uint[]{9348}, - new uint[]{8378}, - new uint[]{10016}, - new uint[]{10017}, - new uint[]{10018}, - new uint[]{10019}, - new uint[]{10020}, - new uint[]{10021}, - new uint[]{10022}, - new uint[]{10024}, - new uint[]{10026}, - new uint[]{10025}, - new uint[]{10026}, - Array.Empty(), - new uint[]{10028}, - new uint[]{10029}, - new uint[]{10030}, - new uint[]{3573}, - new uint[]{10031}, - new uint[]{10032}, - new uint[]{10033}, - new uint[]{10034}, - new uint[]{10037}, - new uint[]{10041}, - new uint[]{10041}, - new uint[]{10042}, - new uint[]{10043}, - new uint[]{10044}, - new uint[]{108, 7941, 10028, 10045, 10046, 10051, 10052}, - new uint[]{10024}, - new uint[]{10026}, - new uint[]{10030}, - new uint[]{3573}, - new uint[]{10047}, - new uint[]{10048}, - new uint[]{10049}, - new uint[]{10050}, - new uint[]{10053}, - new uint[]{10054}, - new uint[]{10055}, - new uint[]{10056}, - new uint[]{10021}, - new uint[]{10016}, - new uint[]{10017}, - new uint[]{10018}, - new uint[]{10036}, - new uint[]{10038}, - new uint[]{10039}, - new uint[]{10040}, - new uint[]{10035}, - new uint[]{10012}, - new uint[]{10377}, - new uint[]{10378}, - new uint[]{10379}, - new uint[]{10380}, - new uint[]{10381}, - new uint[]{10382}, - new uint[]{10383}, - new uint[]{10384}, - new uint[]{10939}, - new uint[]{10386}, - new uint[]{10387}, - new uint[]{10388}, - new uint[]{10389}, - new uint[]{10390}, - new uint[]{10058}, - new uint[]{9956}, - new uint[]{9664}, - Array.Empty(), - new uint[]{10191}, - Array.Empty(), - new uint[]{9932}, - new uint[]{9933}, - new uint[]{9934}, - new uint[]{9935}, - new uint[]{9936}, - new uint[]{9937}, - new uint[]{108}, - new uint[]{10057}, - new uint[]{10057}, - new uint[]{9961}, - new uint[]{9962}, - new uint[]{9963}, - new uint[]{9963}, - new uint[]{9961}, - new uint[]{9963}, - new uint[]{9962}, - new uint[]{9964}, - new uint[]{9965}, - new uint[]{9966}, - new uint[]{9967}, - new uint[]{10079}, - new uint[]{10080}, - new uint[]{10081}, - new uint[]{10082}, - new uint[]{10086}, - new uint[]{11214}, - new uint[]{10456}, - new uint[]{10456}, - Array.Empty(), - Array.Empty(), - new uint[]{9384}, - new uint[]{9423}, - new uint[]{9384}, - new uint[]{9361}, - new uint[]{9388}, - new uint[]{9682}, - new uint[]{9388}, - new uint[]{10160}, - new uint[]{9429}, - new uint[]{9432}, - new uint[]{10001}, - new uint[]{9559}, - new uint[]{2142}, - new uint[]{10002}, - new uint[]{10000}, - new uint[]{10003}, - Array.Empty(), - new uint[]{9958}, - new uint[]{9959}, - new uint[]{9960}, - new uint[]{9366}, - new uint[]{9367}, - new uint[]{7954}, - new uint[]{3164}, - new uint[]{3169}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10214}, - new uint[]{9682}, - new uint[]{9564}, - new uint[]{9366}, - new uint[]{9367}, - new uint[]{7954}, - new uint[]{10177}, - new uint[]{10120}, - new uint[]{10121}, - new uint[]{10122}, - new uint[]{10123}, - new uint[]{10124}, - new uint[]{10125}, - new uint[]{10126}, - new uint[]{10130}, - new uint[]{10131}, - new uint[]{10132}, - new uint[]{10127}, - new uint[]{10133}, - new uint[]{10128}, - new uint[]{10129}, - new uint[]{10134}, - new uint[]{10135}, - new uint[]{10136}, - new uint[]{10137}, - new uint[]{10138}, - new uint[]{10139}, - new uint[]{10140}, - new uint[]{10141}, - new uint[]{10142}, - new uint[]{10143}, - new uint[]{10129}, - new uint[]{10144}, - new uint[]{10145}, - new uint[]{10146}, - new uint[]{10128}, - new uint[]{10147}, - new uint[]{10148}, - new uint[]{10149}, - new uint[]{10150}, - new uint[]{10126}, - new uint[]{10127}, - new uint[]{10151}, - new uint[]{10152}, - new uint[]{10153}, - new uint[]{10154}, - new uint[]{10155}, - new uint[]{10156}, - new uint[]{10157}, - new uint[]{10158}, - new uint[]{10159}, - new uint[]{10160}, - new uint[]{10127}, - new uint[]{10161}, - new uint[]{10162}, - new uint[]{10163}, - new uint[]{10126}, - new uint[]{10164}, - new uint[]{10165}, - new uint[]{10166}, - new uint[]{10167}, - new uint[]{10129}, - new uint[]{10168}, - new uint[]{10169}, - new uint[]{10170}, - new uint[]{10128}, - new uint[]{10171}, - new uint[]{10172}, - new uint[]{10173}, - new uint[]{10174}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{9950}, - new uint[]{9920}, - new uint[]{9950}, - new uint[]{9950}, - new uint[]{10212}, - new uint[]{10211}, - new uint[]{9947}, - Array.Empty(), - Array.Empty(), - new uint[]{9380}, - new uint[]{10210}, - new uint[]{10209}, - new uint[]{10208}, - new uint[]{10207}, - Array.Empty(), - new uint[]{10205}, - new uint[]{10204}, - new uint[]{10057}, - new uint[]{10057}, - new uint[]{10213}, - new uint[]{10203}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{9975}, - new uint[]{9976}, - new uint[]{9977}, - new uint[]{9978}, - new uint[]{9979}, - new uint[]{9980}, - new uint[]{9957}, - new uint[]{9953}, - new uint[]{9954}, - new uint[]{9954}, - new uint[]{9953}, - new uint[]{9954}, - new uint[]{9954}, - new uint[]{9432}, - new uint[]{9981}, - new uint[]{9982}, - new uint[]{9983}, - new uint[]{108}, - new uint[]{9984}, - new uint[]{9983}, - new uint[]{9985}, - new uint[]{9985}, - new uint[]{9986}, - new uint[]{9987}, - new uint[]{9366, 9896}, - new uint[]{9367, 9897}, - new uint[]{3164}, - new uint[]{3169}, - new uint[]{10175}, - new uint[]{10176}, - new uint[]{10177}, - new uint[]{9404, 9936}, - new uint[]{9375, 10178}, - new uint[]{9374, 9898}, - new uint[]{9374}, - new uint[]{9374}, - new uint[]{9374, 9901}, - new uint[]{9374, 9898, 9900}, - new uint[]{9374, 9898, 9901}, - new uint[]{9374, 9901}, - new uint[]{9946}, - new uint[]{10067}, - new uint[]{10182}, - new uint[]{10215}, - new uint[]{6529}, - new uint[]{10087}, - Array.Empty(), - new uint[]{10089}, - new uint[]{10090}, - Array.Empty(), - new uint[]{10092}, - new uint[]{10093}, - Array.Empty(), - new uint[]{108}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{4385}, - new uint[]{3293}, - new uint[]{9975}, - new uint[]{9976}, - new uint[]{9978}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108}, - new uint[]{9380}, - new uint[]{9397}, - new uint[]{10252}, - new uint[]{9425}, - new uint[]{10892}, - new uint[]{10062}, - Array.Empty(), - new uint[]{10396}, - new uint[]{10397}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10083}, - new uint[]{10084}, - new uint[]{10085}, - new uint[]{10219}, - new uint[]{10224}, - new uint[]{10242}, - new uint[]{9503}, - new uint[]{9503}, - Array.Empty(), - new uint[]{9378}, - new uint[]{10251}, - new uint[]{9344}, - new uint[]{9344}, - new uint[]{9344}, - new uint[]{1455}, - new uint[]{11313}, - new uint[]{11312}, - new uint[]{10099}, - new uint[]{10099}, - new uint[]{10099}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10104}, - new uint[]{10105}, - new uint[]{10106}, - new uint[]{10240}, - new uint[]{10177}, - new uint[]{10184}, - new uint[]{10222}, - new uint[]{10223}, - new uint[]{10110}, - new uint[]{10111}, - new uint[]{10112}, - new uint[]{10116}, - new uint[]{108}, - new uint[]{10114}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10115}, - new uint[]{10102}, - new uint[]{10117}, - new uint[]{10118}, - new uint[]{10240}, - new uint[]{10179}, - new uint[]{10180}, - new uint[]{10183}, - new uint[]{10186}, - new uint[]{10183}, - new uint[]{10239}, - new uint[]{10229}, - new uint[]{10220}, - new uint[]{10393}, - new uint[]{10393}, - new uint[]{10394}, - Array.Empty(), - new uint[]{9425}, - new uint[]{9665}, - new uint[]{10024}, - new uint[]{10026}, - new uint[]{10030}, - new uint[]{3573}, - new uint[]{10049}, - new uint[]{10050}, - new uint[]{10055}, - new uint[]{10056}, - new uint[]{10019}, - new uint[]{10020}, - new uint[]{10186}, - new uint[]{10221}, - new uint[]{10189}, - Array.Empty(), - new uint[]{10356}, - new uint[]{10357}, - new uint[]{108}, - Array.Empty(), - new uint[]{10184}, - new uint[]{10222}, - new uint[]{10223}, - new uint[]{10234}, - new uint[]{10235}, - new uint[]{10236}, - new uint[]{10237}, - new uint[]{10243}, - new uint[]{10244}, - new uint[]{10185}, - new uint[]{9386}, - new uint[]{9967}, - new uint[]{10225}, - new uint[]{10226}, - new uint[]{10227}, - new uint[]{10228}, - new uint[]{9595}, - new uint[]{10245}, - new uint[]{10241}, - new uint[]{9936}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{10184}, - new uint[]{10182}, - new uint[]{9386}, - new uint[]{10182}, - new uint[]{9377}, - new uint[]{10187}, - new uint[]{10187}, - new uint[]{10185}, - new uint[]{10217}, - new uint[]{10181}, - new uint[]{10181}, - new uint[]{10181}, - new uint[]{10177}, - new uint[]{3164}, - new uint[]{3169}, - new uint[]{9939}, - new uint[]{10124}, - new uint[]{10216}, - new uint[]{10218}, - new uint[]{10183}, - new uint[]{10239}, - new uint[]{9519}, - new uint[]{9902}, - new uint[]{10186}, - new uint[]{6945}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9633}, - new uint[]{5851}, - new uint[]{10230}, - new uint[]{10231}, - new uint[]{10232}, - new uint[]{3459}, - new uint[]{9388}, - new uint[]{9386}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{9388}, - new uint[]{9387}, - new uint[]{9380, 9595}, - new uint[]{10216}, - new uint[]{10252}, - new uint[]{9425}, - new uint[]{9939}, - new uint[]{10238}, - new uint[]{108}, - new uint[]{4130, 11264}, - new uint[]{5239, 11265}, - new uint[]{713, 11266}, - new uint[]{1492, 11267}, - new uint[]{8378, 11268}, - new uint[]{9363, 11271}, - new uint[]{9363, 11271}, - new uint[]{9363, 11271}, - new uint[]{10586}, - new uint[]{10586}, - new uint[]{10586}, - new uint[]{10898}, - new uint[]{10898}, - new uint[]{10899}, - new uint[]{10243}, - new uint[]{10244}, - new uint[]{9695}, - new uint[]{9408}, - new uint[]{9695}, - new uint[]{108}, - new uint[]{10231}, - new uint[]{108}, - new uint[]{10207}, - new uint[]{10250}, - new uint[]{10249}, - new uint[]{9344}, - new uint[]{9344}, - new uint[]{9344}, - new uint[]{10717}, - new uint[]{10718}, - Array.Empty(), - new uint[]{10719}, - Array.Empty(), - new uint[]{9425}, - new uint[]{10256}, - new uint[]{10257}, - new uint[]{10258}, - new uint[]{10259}, - new uint[]{10257}, - new uint[]{10256}, - new uint[]{108}, - new uint[]{10249}, - new uint[]{9543}, - new uint[]{10279}, - new uint[]{10280}, - new uint[]{10281}, - new uint[]{10282}, - new uint[]{10283}, - new uint[]{10284}, - new uint[]{10285}, - new uint[]{10286}, - new uint[]{10287}, - new uint[]{10288}, - new uint[]{10289}, - new uint[]{10419}, - new uint[]{10420}, - new uint[]{10421}, - new uint[]{10422}, - new uint[]{10423}, - new uint[]{10424}, - new uint[]{10425}, - new uint[]{10426}, - new uint[]{10427}, - new uint[]{10428}, - new uint[]{10429}, - new uint[]{10430}, - new uint[]{10431}, - new uint[]{10432}, - new uint[]{10433}, - new uint[]{10434}, - new uint[]{10435}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10403}, - new uint[]{10401}, - new uint[]{10402}, - new uint[]{10364}, - new uint[]{10365}, - new uint[]{10366}, - new uint[]{10367}, - Array.Empty(), - new uint[]{10369}, - new uint[]{11166}, - new uint[]{10371}, - new uint[]{10372}, - new uint[]{10373}, - new uint[]{10374}, - new uint[]{10375}, - new uint[]{10398}, - new uint[]{10395}, - Array.Empty(), - new uint[]{10404}, - new uint[]{10405}, - new uint[]{10406}, - new uint[]{10407}, - new uint[]{10586}, - new uint[]{10587}, - new uint[]{10588}, - new uint[]{10589}, - new uint[]{1492}, - new uint[]{10457}, - new uint[]{10458}, - new uint[]{10459}, - new uint[]{10460}, - new uint[]{10461}, - new uint[]{10462}, - new uint[]{10463}, - Array.Empty(), - new uint[]{10464}, - new uint[]{10465}, - Array.Empty(), - new uint[]{10467}, - new uint[]{10468}, - new uint[]{10469}, - new uint[]{10470}, - new uint[]{10471}, - Array.Empty(), - new uint[]{10473}, - new uint[]{10474}, - new uint[]{10475}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{10668}, - new uint[]{10669}, - new uint[]{10670}, - new uint[]{10671}, - new uint[]{10672}, - new uint[]{10673}, - new uint[]{10674}, - new uint[]{10675}, - new uint[]{10676}, - new uint[]{10677}, - new uint[]{10678}, - new uint[]{10679}, - new uint[]{108}, - new uint[]{10680}, - new uint[]{10681}, - new uint[]{10682}, - new uint[]{108}, - new uint[]{10683}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10684}, - new uint[]{10685}, - new uint[]{10686}, - new uint[]{10687}, - new uint[]{10688}, - new uint[]{10689}, - new uint[]{10690}, - new uint[]{10290}, - new uint[]{10291}, - new uint[]{10292}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10293}, - new uint[]{10762}, - new uint[]{108}, - new uint[]{10590}, - new uint[]{10591}, - new uint[]{10592}, - Array.Empty(), - new uint[]{10594}, - new uint[]{10595}, - new uint[]{10596}, - new uint[]{10597}, - new uint[]{10598}, - new uint[]{10599}, - new uint[]{10600}, - new uint[]{10601}, - new uint[]{10602}, - new uint[]{10603}, - new uint[]{10604}, - new uint[]{10605}, - new uint[]{10606}, - new uint[]{10607}, - new uint[]{10608}, - new uint[]{10609}, - new uint[]{10610}, - new uint[]{10611}, - new uint[]{10612}, - new uint[]{10613}, - new uint[]{10614}, - new uint[]{10399}, - new uint[]{10494}, - new uint[]{10495}, - new uint[]{108}, - new uint[]{10408}, - new uint[]{10409}, - new uint[]{10410}, - new uint[]{10411}, - new uint[]{10412}, - new uint[]{10413}, - new uint[]{10414}, - new uint[]{10415}, - new uint[]{10407}, - new uint[]{10406}, - new uint[]{10648}, - new uint[]{10649}, - new uint[]{10650}, - new uint[]{10651}, - new uint[]{10652}, - new uint[]{10653}, - new uint[]{10654}, - new uint[]{10655}, - new uint[]{10656}, - new uint[]{10657}, - new uint[]{10658}, - new uint[]{10659}, - new uint[]{10942}, - new uint[]{10660}, - new uint[]{10661}, - new uint[]{10662}, - new uint[]{10663}, - new uint[]{10664}, - new uint[]{10665}, - new uint[]{10666}, - new uint[]{9349}, - new uint[]{10012}, - new uint[]{8378}, - new uint[]{4846}, - new uint[]{10259}, - new uint[]{10257}, - new uint[]{10256}, - new uint[]{10409}, - new uint[]{10412}, - new uint[]{10411}, - new uint[]{10413}, - new uint[]{10416}, - new uint[]{10417}, - new uint[]{10376}, - new uint[]{10261}, - new uint[]{4149}, - new uint[]{1400}, - new uint[]{1401}, - new uint[]{1402}, - new uint[]{1403}, - new uint[]{1404}, - new uint[]{10262}, - new uint[]{10263}, - new uint[]{10264}, - new uint[]{10313}, - new uint[]{10314}, - new uint[]{10315}, - new uint[]{10316}, - new uint[]{10317}, - new uint[]{10450}, - new uint[]{10450}, - new uint[]{10400}, - new uint[]{10400}, - new uint[]{10400}, - Array.Empty(), - new uint[]{10331}, - new uint[]{10332}, - new uint[]{10333}, - new uint[]{10335}, - new uint[]{10336}, - new uint[]{10697}, - new uint[]{11217}, - new uint[]{10698}, - new uint[]{10699}, - new uint[]{10700}, - new uint[]{10701}, - new uint[]{10702}, - new uint[]{10703}, - new uint[]{10704}, - new uint[]{10705}, - new uint[]{10706}, - new uint[]{10707}, - new uint[]{10708}, - new uint[]{10709}, - new uint[]{10710}, - new uint[]{10711}, - new uint[]{10712}, - new uint[]{10713}, - new uint[]{10714}, - new uint[]{10715}, - new uint[]{10716}, - new uint[]{10334}, - new uint[]{10453}, - new uint[]{10454}, - new uint[]{10452}, - new uint[]{10453}, - new uint[]{10454}, - Array.Empty(), - new uint[]{10452}, - new uint[]{10451}, - new uint[]{10451}, - new uint[]{10448}, - new uint[]{5640}, - new uint[]{10448}, - new uint[]{10448}, - new uint[]{10447}, - new uint[]{11195}, - new uint[]{10561}, - new uint[]{10443}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10449}, - new uint[]{10449}, - new uint[]{10400}, - new uint[]{10905}, - new uint[]{10905}, - new uint[]{10905}, - new uint[]{10905}, - new uint[]{10905}, - new uint[]{10906}, - new uint[]{10907}, - new uint[]{10908}, - new uint[]{10909}, - Array.Empty(), - new uint[]{10911}, - new uint[]{10912}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{10905}, - new uint[]{10905}, - new uint[]{10905}, - new uint[]{10267}, - new uint[]{10267}, - new uint[]{10913}, - new uint[]{10914}, - new uint[]{10915}, - new uint[]{10916}, - new uint[]{10268}, - new uint[]{10918}, - new uint[]{11070}, - new uint[]{10345}, - new uint[]{10345}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10920}, - new uint[]{10910}, - new uint[]{10497}, - new uint[]{10921}, - new uint[]{10922}, - new uint[]{10500}, - new uint[]{10501}, - new uint[]{10502}, - new uint[]{10503}, - new uint[]{10504}, - new uint[]{10505}, - new uint[]{10506}, - new uint[]{10507}, - new uint[]{10508}, - new uint[]{10509}, - new uint[]{10510}, - new uint[]{10511}, - new uint[]{10518, 11201}, - new uint[]{10497}, - new uint[]{10920}, - new uint[]{10496}, - new uint[]{10720}, - new uint[]{10721}, - Array.Empty(), - new uint[]{10722}, - new uint[]{10720}, - new uint[]{10721}, - new uint[]{10724}, - Array.Empty(), - new uint[]{10722}, - new uint[]{10725}, - new uint[]{10726}, - new uint[]{10727}, - new uint[]{10728}, - new uint[]{10318}, - new uint[]{10319}, - new uint[]{10320}, - new uint[]{10321}, - new uint[]{10322}, - new uint[]{10323}, - new uint[]{10324}, - new uint[]{10325}, - new uint[]{10326}, - new uint[]{10327}, - new uint[]{10328}, - new uint[]{10329}, - new uint[]{10330}, - new uint[]{10347}, - new uint[]{10347}, - new uint[]{10347}, - new uint[]{10347}, - new uint[]{10871}, - new uint[]{10869}, - new uint[]{10870}, - new uint[]{10873}, - new uint[]{10874}, - new uint[]{10875, 10901}, - new uint[]{10876}, - new uint[]{10877}, - new uint[]{10872}, - new uint[]{108}, - new uint[]{10878}, - new uint[]{10879}, - new uint[]{10881}, - new uint[]{10880}, - new uint[]{10882}, - new uint[]{10883}, - new uint[]{10884}, - new uint[]{10885}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10269}, - new uint[]{10926}, - new uint[]{10271}, - new uint[]{10271}, - new uint[]{10272}, - new uint[]{10272}, - new uint[]{10269}, - new uint[]{10269}, - new uint[]{10269}, - new uint[]{10479}, - new uint[]{10480}, - new uint[]{10481}, - new uint[]{10482}, - new uint[]{10483}, - new uint[]{10484}, - new uint[]{10485}, - new uint[]{10486}, - new uint[]{10919}, - new uint[]{10488}, - new uint[]{10490}, - new uint[]{10489}, - new uint[]{10492}, - new uint[]{10491}, - new uint[]{10479}, - new uint[]{11215}, - new uint[]{10731}, - new uint[]{10732}, - new uint[]{10730}, - new uint[]{10729}, - new uint[]{4636}, - new uint[]{4637}, - new uint[]{3799}, - new uint[]{10734}, - new uint[]{10735}, - new uint[]{10455}, - new uint[]{10455}, - new uint[]{10455}, - new uint[]{10455}, - new uint[]{10455}, - new uint[]{10455}, - new uint[]{10800}, - new uint[]{10341}, - new uint[]{10343}, - new uint[]{10344}, - new uint[]{10348}, - new uint[]{10348}, - new uint[]{10348}, - new uint[]{10348}, - new uint[]{10342}, - new uint[]{10266}, - new uint[]{10295}, - new uint[]{541}, - new uint[]{10438}, - Array.Empty(), - new uint[]{10441}, - new uint[]{10439}, - new uint[]{10436}, - new uint[]{10437}, - new uint[]{10294}, - new uint[]{10295}, - new uint[]{10296}, - new uint[]{10297}, - new uint[]{10908}, - new uint[]{10299}, - new uint[]{10911}, - new uint[]{10301}, - new uint[]{10302}, - new uint[]{10303}, - new uint[]{10304}, - new uint[]{10305}, - new uint[]{10306}, - new uint[]{10307}, - new uint[]{11196}, - new uint[]{11197}, - new uint[]{10525, 11204}, - new uint[]{11198}, - new uint[]{10312}, - new uint[]{10354}, - new uint[]{108}, - new uint[]{10278}, - new uint[]{10620}, - new uint[]{10619}, - new uint[]{10625}, - new uint[]{10634}, - new uint[]{10633}, - new uint[]{10729}, - new uint[]{10730}, - new uint[]{10731}, - new uint[]{10732}, - new uint[]{10733}, - new uint[]{10734}, - new uint[]{10735}, - new uint[]{4130}, - new uint[]{10337}, - new uint[]{10337}, - new uint[]{10338}, - new uint[]{10339}, - new uint[]{10340}, - new uint[]{10615}, - new uint[]{10273}, - new uint[]{10274}, - new uint[]{10270}, - new uint[]{10274}, - new uint[]{10270}, - new uint[]{10270}, - new uint[]{10274}, - Array.Empty(), - new uint[]{10277}, - new uint[]{10275}, - new uint[]{108}, - new uint[]{10622}, - new uint[]{10621}, - new uint[]{10624}, - new uint[]{10623}, - new uint[]{10629}, - new uint[]{10923}, - new uint[]{10924}, - new uint[]{10925}, - new uint[]{10926}, - new uint[]{10927}, - new uint[]{10928}, - new uint[]{10929}, - new uint[]{10930}, - new uint[]{10931}, - new uint[]{10932}, - new uint[]{10931}, - new uint[]{10928}, - new uint[]{10933}, - new uint[]{10934}, - new uint[]{10933}, - new uint[]{10935}, - new uint[]{10936}, - new uint[]{10904, 10937}, - new uint[]{10937}, - new uint[]{10937}, - new uint[]{10938}, - new uint[]{10939}, - new uint[]{10940}, - new uint[]{10940}, - new uint[]{10940}, - new uint[]{10941}, - new uint[]{10942}, - new uint[]{10632}, - new uint[]{10626}, - new uint[]{10742}, - new uint[]{108}, - new uint[]{10743}, - new uint[]{10744}, - new uint[]{10745}, - new uint[]{10742}, - new uint[]{10743}, - new uint[]{10943}, - new uint[]{10944}, - new uint[]{10418}, - new uint[]{10414}, - new uint[]{10415}, - new uint[]{10627}, - new uint[]{10617}, - new uint[]{10630}, - new uint[]{10647}, - new uint[]{6148}, - new uint[]{9678}, - new uint[]{10772}, - new uint[]{10259}, - new uint[]{2667}, - new uint[]{2667}, - new uint[]{108}, - new uint[]{10886}, - new uint[]{10887}, - new uint[]{10888}, - new uint[]{10889}, - new uint[]{10890}, - new uint[]{10891}, - new uint[]{10945}, - new uint[]{10631}, - new uint[]{10731}, - new uint[]{10732}, - new uint[]{10400}, - new uint[]{10513}, - new uint[]{10519, 10520}, - new uint[]{10523}, - new uint[]{10528, 10529}, - new uint[]{10530, 10531, 10532}, - new uint[]{11208, 11209}, - new uint[]{10537, 10538, 10539, 10540, 10541, 10543, 10544, 10545, 10546, 11200}, - new uint[]{10548}, - new uint[]{10549, 10550, 11211}, - new uint[]{10550, 11212}, - new uint[]{10551, 11213}, - new uint[]{10552}, - new uint[]{10553}, - new uint[]{10549}, - new uint[]{10550}, - new uint[]{11213}, - new uint[]{10552}, - new uint[]{5239}, - new uint[]{4130}, - new uint[]{9363}, - new uint[]{10557}, - new uint[]{10558, 11202}, - new uint[]{10559}, - new uint[]{10549}, - new uint[]{10550, 11212}, - new uint[]{10551, 11213}, - new uint[]{10552}, - new uint[]{10560}, - new uint[]{10561}, - new uint[]{10562}, - new uint[]{6146}, - new uint[]{4740}, - new uint[]{6153}, - new uint[]{6152}, - new uint[]{6149}, - new uint[]{11210}, - new uint[]{10013}, - new uint[]{8378}, - new uint[]{1492}, - new uint[]{10572}, - Array.Empty(), - new uint[]{108}, - Array.Empty(), - new uint[]{10575}, - new uint[]{108}, - new uint[]{10400}, - new uint[]{10400}, - new uint[]{10498}, - new uint[]{4736}, - new uint[]{10555}, - new uint[]{10554}, - new uint[]{10011}, - new uint[]{10013}, - new uint[]{10571}, - new uint[]{9348}, - new uint[]{10570}, - new uint[]{10278}, - new uint[]{10278}, - new uint[]{655}, - new uint[]{11165}, - new uint[]{10526, 11205}, - new uint[]{11206}, - new uint[]{11207}, - new uint[]{10444}, - new uint[]{10512}, - new uint[]{4386}, - new uint[]{10578}, - new uint[]{10579}, - new uint[]{10580}, - new uint[]{10581}, - new uint[]{10582}, - new uint[]{10584}, - new uint[]{10585}, - new uint[]{10893}, - new uint[]{10894}, - new uint[]{10895}, - new uint[]{10896}, - new uint[]{10897}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10618}, - new uint[]{10628}, - new uint[]{10616}, - new uint[]{10476}, - new uint[]{10477}, - new uint[]{10478}, - new uint[]{10937}, - new uint[]{10277}, - new uint[]{10273}, - new uint[]{10350}, - Array.Empty(), - new uint[]{10350}, - new uint[]{10667}, - new uint[]{10691}, - new uint[]{10692}, - new uint[]{10693}, - new uint[]{10694}, - new uint[]{10695}, - new uint[]{10696}, - new uint[]{10351}, - new uint[]{10352}, - new uint[]{10353}, - new uint[]{10347}, - new uint[]{10347}, - new uint[]{10347}, - new uint[]{10349}, - new uint[]{10355}, - new uint[]{108}, - new uint[]{10359}, - new uint[]{10360}, - new uint[]{10361}, - new uint[]{10358}, - new uint[]{10635}, - new uint[]{10636}, - new uint[]{10637}, - new uint[]{10638}, - new uint[]{10639}, - new uint[]{10640}, - Array.Empty(), - new uint[]{10642}, - new uint[]{10643}, - new uint[]{10644}, - new uint[]{10645}, - new uint[]{10646}, - new uint[]{11056}, - new uint[]{11057}, - new uint[]{11056}, - new uint[]{11055}, - new uint[]{11049}, - new uint[]{11050}, - new uint[]{11052}, - new uint[]{11053}, - new uint[]{11051}, - new uint[]{11054}, - new uint[]{11053}, - new uint[]{11052}, - new uint[]{11051}, - new uint[]{11050}, - new uint[]{11049}, - new uint[]{11048}, - new uint[]{11048}, - new uint[]{11048}, - new uint[]{11047}, - new uint[]{11046}, - new uint[]{11045}, - new uint[]{11044}, - new uint[]{11043}, - new uint[]{11042}, - new uint[]{11042}, - new uint[]{11042}, - new uint[]{11041}, - new uint[]{11041}, - new uint[]{11041}, - new uint[]{11040}, - new uint[]{11039}, - new uint[]{11038}, - new uint[]{11037}, - new uint[]{11036}, - new uint[]{11036}, - new uint[]{11036}, - new uint[]{11035}, - new uint[]{11238}, - new uint[]{11033}, - new uint[]{11033}, - new uint[]{11032}, - new uint[]{11032}, - new uint[]{11031}, - new uint[]{11030}, - new uint[]{11030}, - new uint[]{11029}, - new uint[]{11028}, - new uint[]{11027}, - new uint[]{11026}, - new uint[]{11025}, - new uint[]{11024}, - new uint[]{11023}, - new uint[]{10408}, - new uint[]{10409}, - new uint[]{10408}, - new uint[]{10409}, - new uint[]{10412}, - new uint[]{10409}, - new uint[]{541}, - new uint[]{11022}, - new uint[]{11021}, - new uint[]{11020}, - new uint[]{11019}, - new uint[]{11018}, - new uint[]{11017}, - new uint[]{11016}, - new uint[]{11015}, - new uint[]{11014}, - new uint[]{11013}, - new uint[]{11012}, - new uint[]{11011}, - new uint[]{11010}, - new uint[]{11009}, - new uint[]{11008}, - new uint[]{11007}, - new uint[]{11006}, - new uint[]{11005}, - new uint[]{11004}, - new uint[]{11003}, - new uint[]{11002}, - new uint[]{11001}, - new uint[]{11000}, - new uint[]{10999}, - new uint[]{10998}, - new uint[]{10997}, - new uint[]{10996}, - new uint[]{10995}, - new uint[]{10994}, - new uint[]{10947}, - new uint[]{10993}, - new uint[]{10992}, - new uint[]{10990}, - new uint[]{10991}, - new uint[]{10990}, - new uint[]{10989}, - new uint[]{10989}, - new uint[]{10988}, - new uint[]{10988}, - new uint[]{10987}, - new uint[]{10986}, - new uint[]{10986}, - new uint[]{10985}, - new uint[]{10984}, - new uint[]{10984}, - new uint[]{10984}, - new uint[]{10983}, - new uint[]{10983}, - new uint[]{10982}, - new uint[]{10981}, - new uint[]{10980}, - new uint[]{10979}, - new uint[]{10978}, - new uint[]{10977}, - new uint[]{11047}, - new uint[]{10976}, - new uint[]{10975}, - new uint[]{10974}, - new uint[]{10973}, - new uint[]{10972}, - new uint[]{10971}, - new uint[]{10970}, - new uint[]{10969}, - new uint[]{10968}, - new uint[]{10967}, - new uint[]{10966}, - new uint[]{10965}, - new uint[]{10964}, - new uint[]{10963}, - new uint[]{10962}, - new uint[]{10961}, - new uint[]{10960}, - new uint[]{10959}, - new uint[]{10958}, - new uint[]{10957}, - new uint[]{10956}, - new uint[]{10955}, - new uint[]{10954}, - new uint[]{10953}, - new uint[]{10952}, - new uint[]{10951}, - new uint[]{10950}, - new uint[]{10949}, - new uint[]{10948}, - new uint[]{10947}, - new uint[]{10946}, - new uint[]{108}, - new uint[]{108}, - Array.Empty(), - new uint[]{2095}, - new uint[]{1383}, - Array.Empty(), - new uint[]{10276}, - new uint[]{10276}, - new uint[]{10273}, - new uint[]{11193}, - new uint[]{10270, 10274}, - new uint[]{10276}, - new uint[]{10385}, - new uint[]{10900}, - new uint[]{10391}, - new uint[]{10370}, - new uint[]{10368}, - new uint[]{10793}, - new uint[]{10794}, - new uint[]{10804}, - new uint[]{11216}, - new uint[]{10749}, - new uint[]{10750}, - new uint[]{10756}, - new uint[]{10757}, - new uint[]{10760}, - new uint[]{10758}, - new uint[]{10754}, - new uint[]{10759}, - new uint[]{10755}, - new uint[]{10761}, - new uint[]{10796}, - new uint[]{10795}, - new uint[]{10798}, - Array.Empty(), - new uint[]{10805}, - new uint[]{10807}, - new uint[]{10801}, - new uint[]{10802}, - new uint[]{10830}, - new uint[]{10803}, - new uint[]{10797}, - new uint[]{10806}, - new uint[]{10641}, - new uint[]{10923}, - new uint[]{10924}, - new uint[]{10927}, - new uint[]{10926}, - new uint[]{10490}, - new uint[]{10746}, - new uint[]{10747}, - new uint[]{10748}, - new uint[]{10751}, - new uint[]{10752}, - new uint[]{10274}, - new uint[]{10274}, - new uint[]{11144}, - new uint[]{11188}, - new uint[]{11145}, - new uint[]{11189}, - new uint[]{11189}, - new uint[]{11146}, - new uint[]{11147}, - new uint[]{11148}, - new uint[]{10819}, - new uint[]{10818}, - new uint[]{10811}, - new uint[]{10816}, - new uint[]{10812}, - new uint[]{10817}, - new uint[]{10814}, - new uint[]{10815}, - new uint[]{10810}, - new uint[]{10823}, - new uint[]{10820}, - new uint[]{10821}, - new uint[]{10822}, - new uint[]{11149}, - new uint[]{10824}, - new uint[]{11168}, - new uint[]{11169}, - new uint[]{10753}, - new uint[]{10831}, - new uint[]{10832}, - new uint[]{10773}, - new uint[]{10774}, - new uint[]{10775}, - new uint[]{10776}, - new uint[]{10777}, - new uint[]{10778}, - new uint[]{10779}, - new uint[]{10780}, - new uint[]{10781}, - new uint[]{10782}, - new uint[]{10783}, - new uint[]{10784}, - new uint[]{10736}, - new uint[]{10737}, - new uint[]{10738}, - new uint[]{10739}, - new uint[]{10740}, - new uint[]{10741}, - new uint[]{11153}, - new uint[]{11181}, - new uint[]{11180}, - new uint[]{11179}, - new uint[]{11154}, - new uint[]{11182}, - new uint[]{11183}, - new uint[]{11155}, - new uint[]{11156}, - new uint[]{11157}, - new uint[]{11158}, - new uint[]{11159}, - new uint[]{108}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{10785}, - new uint[]{11093}, - new uint[]{11094}, - new uint[]{11095}, - new uint[]{11096}, - new uint[]{11097}, - new uint[]{11098}, - new uint[]{11099}, - new uint[]{11100}, - new uint[]{11101}, - new uint[]{11102}, - new uint[]{11103}, - new uint[]{11104}, - new uint[]{11105}, - new uint[]{11106}, - new uint[]{11107}, - new uint[]{11108}, - new uint[]{11109}, - new uint[]{11110}, - new uint[]{11111}, - new uint[]{11112}, - new uint[]{11113}, - new uint[]{11114}, - new uint[]{11115}, - new uint[]{11116}, - new uint[]{11117}, - new uint[]{11118}, - new uint[]{11119}, - new uint[]{11120}, - new uint[]{11121}, - new uint[]{11122}, - new uint[]{11123}, - new uint[]{11124}, - new uint[]{11125}, - new uint[]{11126}, - new uint[]{11127}, - new uint[]{11128}, - new uint[]{11129}, - new uint[]{11130}, - new uint[]{11131}, - new uint[]{11132}, - new uint[]{11133}, - new uint[]{11134}, - new uint[]{11135}, - new uint[]{11136}, - new uint[]{11137}, - new uint[]{11138}, - new uint[]{11139}, - new uint[]{11140}, - new uint[]{11141}, - new uint[]{11142}, - Array.Empty(), - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{11150}, - new uint[]{11151}, - new uint[]{11152}, - Array.Empty(), - Array.Empty(), - new uint[]{10813}, - new uint[]{10771}, - new uint[]{10790}, - new uint[]{10791}, - new uint[]{10786}, - new uint[]{10787}, - new uint[]{10788}, - new uint[]{10789}, - new uint[]{10813}, - new uint[]{10376}, - new uint[]{11077}, - new uint[]{11184}, - new uint[]{11078}, - new uint[]{11185}, - new uint[]{11186}, - new uint[]{11079}, - new uint[]{11080}, - new uint[]{11081}, - new uint[]{11082}, - new uint[]{11083}, - new uint[]{11084}, - new uint[]{11085}, - new uint[]{11187}, - new uint[]{11086}, - new uint[]{11087}, - new uint[]{11088}, - new uint[]{11089}, - new uint[]{11090}, - new uint[]{11091}, - new uint[]{11092}, - new uint[]{10825}, - new uint[]{10826}, - new uint[]{10721}, - new uint[]{10721}, - new uint[]{10827, 10828}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10833}, - new uint[]{10834}, - new uint[]{10835}, - new uint[]{10836}, - new uint[]{10837}, - new uint[]{10838}, - new uint[]{10839}, - new uint[]{10840}, - new uint[]{10841}, - new uint[]{10842}, - new uint[]{10843}, - new uint[]{10844}, - new uint[]{10845}, - new uint[]{10846}, - new uint[]{10847}, - new uint[]{10848}, - new uint[]{10849}, - new uint[]{10850}, - new uint[]{10851}, - new uint[]{10852}, - new uint[]{10853}, - new uint[]{10854}, - new uint[]{10855}, - new uint[]{10856}, - new uint[]{10857}, - new uint[]{10858}, - new uint[]{10859}, - new uint[]{10860}, - new uint[]{10861}, - new uint[]{10862}, - new uint[]{10863}, - new uint[]{10864}, - new uint[]{10865}, - new uint[]{10866}, - new uint[]{10867}, - new uint[]{10868}, - new uint[]{10347}, - new uint[]{10347}, - new uint[]{10347}, - new uint[]{11176}, - new uint[]{11177}, - new uint[]{11178}, - new uint[]{11174}, - new uint[]{11175}, - new uint[]{655}, - new uint[]{11165}, - new uint[]{8273}, - Array.Empty(), - new uint[]{10577}, - new uint[]{11073}, - new uint[]{11074}, - new uint[]{11075}, - new uint[]{11076}, - new uint[]{11072}, - new uint[]{11167}, - new uint[]{10365}, - new uint[]{11143}, - new uint[]{11160}, - new uint[]{11143}, - new uint[]{11161}, - new uint[]{108}, - new uint[]{108}, - new uint[]{11172}, - new uint[]{11173}, - new uint[]{10542, 10547, 11203}, - new uint[]{11191}, - new uint[]{5964}, - new uint[]{108}, - new uint[]{108}, - new uint[]{10310}, - new uint[]{10536}, - new uint[]{11195}, - new uint[]{108}, - new uint[]{10315}, - new uint[]{10908}, - new uint[]{108}, - new uint[]{108}, - new uint[]{11192}, - new uint[]{11192}, - new uint[]{11192}, - new uint[]{108}, - Array.Empty(), - new uint[]{10726}, - new uint[]{11194}, - new uint[]{10908}, - new uint[]{2137}, - new uint[]{2139}, - new uint[]{2140}, - new uint[]{2141}, - new uint[]{2138}, - new uint[]{2324}, - new uint[]{2142}, - Array.Empty(), - new uint[]{10270, 10274}, - new uint[]{10499}, - new uint[]{11199}, - new uint[]{10559}, - new uint[]{510, 2137}, - new uint[]{108}, - new uint[]{10348}, - new uint[]{10348}, - new uint[]{10904}, - new uint[]{11239}, - new uint[]{11240}, - new uint[]{11171}, - new uint[]{11170}, - new uint[]{554}, - new uint[]{11307}, - new uint[]{2134}, - new uint[]{2135}, - new uint[]{2121}, - new uint[]{2136}, - new uint[]{11285}, - new uint[]{11285}, - new uint[]{9947}, - new uint[]{11241}, - new uint[]{11242}, - new uint[]{11243}, - new uint[]{548}, - new uint[]{108}, - new uint[]{10893}, - new uint[]{10894}, - new uint[]{10895}, - new uint[]{10896}, - new uint[]{10893}, - new uint[]{10894}, - new uint[]{10895}, - new uint[]{10896}, - new uint[]{11350}, - new uint[]{11351}, - new uint[]{11353}, - new uint[]{11244}, - new uint[]{11245}, - new uint[]{11246}, - new uint[]{11247}, - new uint[]{11248}, - new uint[]{11245}, - new uint[]{11246}, - new uint[]{11249}, - new uint[]{11248}, - new uint[]{11250}, - new uint[]{11251}, - new uint[]{11252}, - new uint[]{11253}, - new uint[]{11254}, - new uint[]{11255}, - new uint[]{11256}, - new uint[]{11257}, - new uint[]{11258}, - new uint[]{11259}, - new uint[]{11260}, - new uint[]{11261}, - new uint[]{11262}, - new uint[]{11272}, - new uint[]{11286}, - new uint[]{11290}, - new uint[]{11244}, - new uint[]{11245}, - new uint[]{11246}, - new uint[]{11247}, - new uint[]{11248}, - new uint[]{11308}, - new uint[]{422}, - new uint[]{428}, - new uint[]{424}, - new uint[]{11218}, - new uint[]{11219}, - new uint[]{11220}, - new uint[]{11221}, - new uint[]{11222}, - new uint[]{11223}, - new uint[]{11224}, - new uint[]{11225}, - new uint[]{11226}, - new uint[]{11227}, - new uint[]{11228}, - new uint[]{11229}, - new uint[]{11230}, - new uint[]{11231}, - new uint[]{11232}, - new uint[]{11233}, - new uint[]{11234}, - new uint[]{11235}, - new uint[]{11236}, - new uint[]{11237}, - new uint[]{10448}, - new uint[]{5640}, - new uint[]{10448}, - new uint[]{10446}, - new uint[]{10445}, - new uint[]{10444}, - new uint[]{1279}, - new uint[]{11352}, - new uint[]{1678}, - new uint[]{9910}, - new uint[]{101}, - new uint[]{557}, - new uint[]{2106}, - new uint[]{2109}, - new uint[]{2116}, - new uint[]{2118}, - new uint[]{11216}, - new uint[]{9910}, - new uint[]{11277}, - new uint[]{11278}, - new uint[]{11322}, - new uint[]{11279}, - new uint[]{11280}, - new uint[]{11302}, - new uint[]{11303}, - new uint[]{11304}, - new uint[]{11305}, - new uint[]{11292}, - new uint[]{11293}, - new uint[]{11294}, - new uint[]{2124}, - new uint[]{2125}, - new uint[]{2126}, - new uint[]{2128}, - new uint[]{2130}, - new uint[]{2092}, - new uint[]{2121}, - new uint[]{2089}, - new uint[]{297}, - new uint[]{2133}, - new uint[]{1486}, - new uint[]{2105}, - new uint[]{2106}, - new uint[]{2107}, - new uint[]{2108}, - new uint[]{2109}, - new uint[]{2110}, - new uint[]{2111}, - new uint[]{2112}, - new uint[]{2113}, - new uint[]{2121}, - new uint[]{269}, - Array.Empty(), - new uint[]{1486}, - new uint[]{2160}, - new uint[]{11275}, - new uint[]{11276}, - new uint[]{11273}, - new uint[]{11274}, - new uint[]{11274}, - new uint[]{2137}, - new uint[]{2141}, - new uint[]{2140}, - new uint[]{1804}, - new uint[]{2139}, - new uint[]{2137}, - new uint[]{2142}, - new uint[]{2138}, - new uint[]{11286}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{11290}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{11281}, - new uint[]{11282}, - Array.Empty(), - new uint[]{108}, - new uint[]{11310}, - new uint[]{11309}, - new uint[]{9344}, - new uint[]{9344}, - new uint[]{9344}, - new uint[]{9344}, - new uint[]{11284}, - new uint[]{108}, - new uint[]{11419}, - new uint[]{2132}, - new uint[]{108}, - new uint[]{108}, - new uint[]{11446}, - new uint[]{718}, - new uint[]{719}, - new uint[]{720}, - new uint[]{721}, - new uint[]{722}, - new uint[]{723}, - new uint[]{724}, - new uint[]{725}, - new uint[]{11258}, - new uint[]{11288}, - new uint[]{11289}, - new uint[]{3369}, - new uint[]{3370}, - new uint[]{3371}, - new uint[]{3374}, - new uint[]{3375}, - new uint[]{3375}, - new uint[]{3375}, - new uint[]{3375}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{2143}, - new uint[]{4384}, - new uint[]{2183}, - new uint[]{11326}, - new uint[]{11327}, - new uint[]{11328}, - new uint[]{11329}, - new uint[]{11330}, - new uint[]{11331}, - new uint[]{11332}, - new uint[]{11333}, - new uint[]{11330}, - new uint[]{11331}, - new uint[]{11332}, - new uint[]{11333}, - new uint[]{11334}, - new uint[]{11331, 11335}, - new uint[]{11332, 11336}, - new uint[]{11333, 11337}, - Array.Empty(), - new uint[]{269}, - new uint[]{297}, - new uint[]{11420}, - new uint[]{11421}, - new uint[]{11233}, - new uint[]{297}, - new uint[]{7636}, - Array.Empty(), - new uint[]{108}, - new uint[]{108}, - new uint[]{3667}, - new uint[]{11338}, - new uint[]{11339}, - new uint[]{11340}, - new uint[]{11341}, - new uint[]{10961}, - new uint[]{11342}, - new uint[]{11343}, - new uint[]{11344}, - new uint[]{11345}, - new uint[]{11346}, - new uint[]{11346}, - new uint[]{11346}, - new uint[]{11347}, - new uint[]{11348}, - new uint[]{11349}, - new uint[]{11323}, - new uint[]{11324}, - new uint[]{11325}, - new uint[]{11277}, - new uint[]{11302}, - new uint[]{11382}, - new uint[]{11382}, - new uint[]{11382}, - new uint[]{11354}, - new uint[]{428}, - new uint[]{11355}, - new uint[]{11355}, - new uint[]{11384}, - Array.Empty(), - new uint[]{11355}, - new uint[]{3455}, - new uint[]{10308}, - new uint[]{11386}, - new uint[]{108}, - Array.Empty(), - new uint[]{108}, - Array.Empty(), - new uint[]{3040}, - new uint[]{3042}, - new uint[]{3044}, - new uint[]{3045}, - Array.Empty(), - new uint[]{11357}, - new uint[]{11358}, - new uint[]{11359}, - new uint[]{11360}, - new uint[]{11361}, - new uint[]{11362}, - new uint[]{11363}, - new uint[]{11364}, - new uint[]{11365}, - new uint[]{11366}, - new uint[]{11367}, - new uint[]{11368}, - new uint[]{11382}, - new uint[]{11422}, - Array.Empty(), - new uint[]{11442}, - new uint[]{11443}, - new uint[]{11330}, - new uint[]{11313}, - new uint[]{11313}, - new uint[]{10013}, - new uint[]{4130}, - new uint[]{4130}, - new uint[]{11431}, - new uint[]{11433}, - new uint[]{2077}, - new uint[]{1455}, - new uint[]{1455}, - new uint[]{10261}, - new uint[]{10261}, - new uint[]{4130}, - new uint[]{4130}, - new uint[]{4149}, - new uint[]{4149}, - new uint[]{11447}, - new uint[]{11387}, - new uint[]{11389}, - new uint[]{11390}, - new uint[]{11391}, - new uint[]{11392}, - Array.Empty(), - new uint[]{11387}, - new uint[]{11388}, - new uint[]{11389}, - new uint[]{11390}, - new uint[]{11393}, - new uint[]{11393}, - new uint[]{11394}, - new uint[]{11394}, - new uint[]{11395}, - new uint[]{11395}, - new uint[]{11396}, - new uint[]{11396}, - new uint[]{11397}, - new uint[]{11397}, - new uint[]{11407}, - new uint[]{11408}, - new uint[]{11409}, - new uint[]{11410}, - new uint[]{11407}, - new uint[]{11411}, - Array.Empty(), - new uint[]{11413}, - new uint[]{11414}, - new uint[]{11415}, - new uint[]{11415}, - new uint[]{11416}, - new uint[]{11417}, - new uint[]{11418}, - new uint[]{11418}, - Array.Empty(), - new uint[]{108}, - Array.Empty(), - new uint[]{11372}, - new uint[]{11373}, - new uint[]{11373}, - new uint[]{108}, - new uint[]{11443}, - new uint[]{3458}, - new uint[]{3460}, - new uint[]{3462}, - new uint[]{3464}, - new uint[]{10298}, - new uint[]{11398}, - new uint[]{10300}, - new uint[]{10298}, - new uint[]{11398}, - new uint[]{10300}, - new uint[]{108}, - new uint[]{8378}, - new uint[]{11416}, - new uint[]{11416}, - Array.Empty(), - Array.Empty(), - new uint[]{4776}, - new uint[]{4776}, - new uint[]{4777}, - new uint[]{4778}, - new uint[]{4779}, - new uint[]{4780}, - new uint[]{4776}, - new uint[]{11393}, - new uint[]{11394}, - new uint[]{11395}, - new uint[]{11396}, - new uint[]{11397}, - new uint[]{11440}, - new uint[]{108}, - new uint[]{108}, - new uint[]{11441}, - new uint[]{11440}, - new uint[]{108}, - new uint[]{108}, - new uint[]{11441}, - Array.Empty(), - new uint[]{11369}, - new uint[]{11370}, - new uint[]{11371}, - new uint[]{11369}, - new uint[]{11370}, - new uint[]{11371}, - new uint[]{11369}, - new uint[]{11370}, - new uint[]{11371}, - new uint[]{11469}, - new uint[]{11470}, - new uint[]{11471}, - new uint[]{11472}, - new uint[]{11473}, - Array.Empty(), - new uint[]{11474}, - Array.Empty(), - new uint[]{11476}, - new uint[]{11477}, - new uint[]{11478}, - new uint[]{11479}, - new uint[]{11480}, - new uint[]{11481}, - Array.Empty(), - Array.Empty(), - new uint[]{11484}, - new uint[]{11485}, - new uint[]{11486}, - new uint[]{11487}, - new uint[]{11488}, - new uint[]{11490}, - new uint[]{11491}, - new uint[]{11492}, - new uint[]{11387}, - new uint[]{11388}, - new uint[]{11389}, - new uint[]{11390}, - new uint[]{11493}, - new uint[]{11494}, - new uint[]{11495}, - Array.Empty(), - new uint[]{11496}, - new uint[]{11497}, - new uint[]{11498}, - new uint[]{11499}, - new uint[]{11500}, - new uint[]{11501}, - new uint[]{11502}, - new uint[]{11503}, - new uint[]{11504}, - new uint[]{11506}, - new uint[]{11507}, - new uint[]{11508}, - new uint[]{11509}, - new uint[]{11489}, - new uint[]{11505}, - Array.Empty(), - new uint[]{11374}, - new uint[]{11375}, - new uint[]{11376}, - new uint[]{11378}, - new uint[]{11379}, - new uint[]{11374}, - new uint[]{11375}, - new uint[]{11376}, - new uint[]{11377}, - new uint[]{11378}, - new uint[]{11379}, - new uint[]{11380}, - new uint[]{108}, - new uint[]{11381}, - new uint[]{11462}, - new uint[]{11381}, - new uint[]{11462}, - new uint[]{11462}, - new uint[]{392}, - new uint[]{795}, - new uint[]{5}, - new uint[]{6}, - new uint[]{341}, - new uint[]{11448}, - new uint[]{37}, - new uint[]{262}, - new uint[]{11449}, - new uint[]{11450}, - new uint[]{393}, - new uint[]{11451}, - new uint[]{11452}, - new uint[]{11453}, - new uint[]{780}, - new uint[]{6942}, - new uint[]{11454}, - new uint[]{10173}, - new uint[]{357}, - new uint[]{11455}, - new uint[]{11456}, - new uint[]{11457}, - new uint[]{1281}, - new uint[]{2769}, - new uint[]{11458}, - new uint[]{11459}, - new uint[]{3499}, - new uint[]{11460}, - new uint[]{353}, - new uint[]{12313}, - new uint[]{12456}, - new uint[]{12457}, - new uint[]{12458}, - new uint[]{12459}, - new uint[]{12460}, - Array.Empty(), - Array.Empty(), - new uint[]{3330}, - new uint[]{11423}, - new uint[]{11424}, - new uint[]{11425}, - new uint[]{11426}, - new uint[]{11427}, - new uint[]{11428}, - new uint[]{11429}, - new uint[]{11430}, - new uint[]{11987}, - new uint[]{11988}, - new uint[]{11989}, - new uint[]{11990}, - new uint[]{11991}, - new uint[]{11439}, - new uint[]{11439}, - new uint[]{11433}, - new uint[]{11433}, - new uint[]{11438}, - new uint[]{11436}, - new uint[]{11431}, - new uint[]{11432}, - Array.Empty(), - Array.Empty(), - new uint[]{11435}, - new uint[]{11436}, - Array.Empty(), - Array.Empty(), - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{2168}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{11438}, - new uint[]{11436}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{3323}, - new uint[]{3323}, - new uint[]{3323}, - new uint[]{3323}, - new uint[]{3323}, - new uint[]{3321}, - new uint[]{3323}, - new uint[]{3326}, - new uint[]{3326}, - new uint[]{3326}, - new uint[]{3326}, - new uint[]{3326}, - new uint[]{3326}, - new uint[]{3326}, - new uint[]{3326}, - new uint[]{3321}, - new uint[]{3321}, - new uint[]{3321}, - new uint[]{3321}, - new uint[]{3321}, - new uint[]{3321}, - new uint[]{3321}, - new uint[]{3321}, - new uint[]{3326}, - new uint[]{3329}, - new uint[]{3321}, - new uint[]{3329}, - new uint[]{3323}, - new uint[]{3321}, - new uint[]{3323}, - new uint[]{3326}, - new uint[]{3329}, - new uint[]{3329}, - new uint[]{3329}, - new uint[]{3329}, - new uint[]{3329}, - new uint[]{3329}, - new uint[]{3329}, - new uint[]{3329}, - new uint[]{3324}, - new uint[]{3323}, - new uint[]{3323}, - new uint[]{3327}, - new uint[]{3326}, - new uint[]{3321}, - new uint[]{3326}, - new uint[]{3322}, - new uint[]{3329}, - new uint[]{11431}, - new uint[]{11436}, - new uint[]{11399}, - new uint[]{108}, - new uint[]{108}, - new uint[]{11517}, - new uint[]{11399}, - new uint[]{108}, - new uint[]{108}, - new uint[]{11517}, - new uint[]{11405}, - new uint[]{11405}, - new uint[]{11404}, - new uint[]{11404}, - new uint[]{11513}, - new uint[]{11481}, - new uint[]{11511}, - new uint[]{11512}, - new uint[]{11514}, - new uint[]{11510}, - new uint[]{11506}, - new uint[]{11515}, - new uint[]{108}, - new uint[]{11513}, - new uint[]{11481}, - new uint[]{11511}, - new uint[]{11512}, - new uint[]{11514}, - new uint[]{11510}, - new uint[]{11506}, - new uint[]{11515}, - new uint[]{11995}, - new uint[]{11996}, - new uint[]{108}, - new uint[]{11402}, - new uint[]{11406}, - new uint[]{11406}, - Array.Empty(), - Array.Empty(), - new uint[]{11462}, - new uint[]{11462}, - new uint[]{11391}, - new uint[]{11468}, - new uint[]{12054}, - new uint[]{11405}, - Array.Empty(), - Array.Empty(), - new uint[]{11521}, - new uint[]{11522}, - new uint[]{11523}, - new uint[]{11524}, - new uint[]{11525}, - new uint[]{11526}, - new uint[]{11527}, - new uint[]{11528}, - new uint[]{11529}, - new uint[]{11530}, - new uint[]{11531}, - new uint[]{11532}, - new uint[]{11533}, - new uint[]{11534}, - new uint[]{11535}, - new uint[]{11536}, - new uint[]{11537}, - new uint[]{11538}, - new uint[]{11539}, - new uint[]{11540}, - new uint[]{11541}, - new uint[]{11542}, - new uint[]{11543}, - new uint[]{11544}, - new uint[]{11545}, - new uint[]{11546}, - new uint[]{11547}, - new uint[]{11548}, - new uint[]{11549}, - new uint[]{11550}, - new uint[]{11551}, - new uint[]{11552}, - new uint[]{11553}, - new uint[]{11554}, - new uint[]{11555}, - new uint[]{11556}, - new uint[]{11557}, - new uint[]{11558}, - new uint[]{11559}, - new uint[]{11560}, - new uint[]{11561}, - new uint[]{11562}, - new uint[]{11563}, - new uint[]{11564}, - new uint[]{11565}, - new uint[]{11566}, - new uint[]{11567}, - new uint[]{11568}, - new uint[]{11569}, - new uint[]{11570}, - new uint[]{11571}, - new uint[]{11572}, - new uint[]{11573}, - new uint[]{11574}, - new uint[]{11575}, - new uint[]{11576}, - new uint[]{11577}, - new uint[]{11578}, - new uint[]{11579}, - new uint[]{11580}, - new uint[]{11581}, - new uint[]{11582}, - new uint[]{11583}, - new uint[]{11584}, - new uint[]{11585}, - new uint[]{11586}, - Array.Empty(), - new uint[]{11588}, - new uint[]{11589}, - new uint[]{11590}, - Array.Empty(), - new uint[]{11592}, - new uint[]{11593}, - new uint[]{11594}, - new uint[]{11595}, - new uint[]{11596}, - new uint[]{11597}, - new uint[]{11598}, - new uint[]{11599}, - new uint[]{11600}, - new uint[]{11601}, - new uint[]{11602}, - new uint[]{11603}, - new uint[]{11604}, - new uint[]{11605}, - new uint[]{11606}, - new uint[]{11607}, - new uint[]{11608}, - new uint[]{11609}, - new uint[]{11610}, - new uint[]{11611}, - new uint[]{11612}, - new uint[]{11613}, - new uint[]{11614}, - new uint[]{11615}, - new uint[]{11616}, - new uint[]{11617}, - new uint[]{11618}, - new uint[]{11619}, - new uint[]{11620}, - new uint[]{11621}, - new uint[]{11622}, - new uint[]{11623}, - new uint[]{11624}, - new uint[]{11625}, - new uint[]{11626}, - new uint[]{11627}, - new uint[]{11628}, - new uint[]{11629}, - new uint[]{11630}, - new uint[]{11631}, - new uint[]{11632}, - new uint[]{11633}, - new uint[]{11634}, - new uint[]{11635}, - new uint[]{11636}, - new uint[]{11637}, - new uint[]{11638}, - new uint[]{11639}, - new uint[]{11640}, - new uint[]{11641}, - new uint[]{11642}, - new uint[]{11643}, - new uint[]{11644}, - new uint[]{11645}, - new uint[]{11646}, - new uint[]{11647}, - new uint[]{11648}, - new uint[]{11649}, - new uint[]{11650}, - new uint[]{11651}, - new uint[]{11652}, - new uint[]{11653}, - new uint[]{11654}, - new uint[]{11655}, - new uint[]{11656}, - new uint[]{11657}, - new uint[]{11658}, - new uint[]{11659}, - new uint[]{11660}, - new uint[]{11661}, - new uint[]{11662}, - new uint[]{11663}, - new uint[]{11664}, - new uint[]{11665}, - new uint[]{11666}, - new uint[]{11667}, - new uint[]{11668}, - new uint[]{11669}, - new uint[]{11670}, - new uint[]{11671}, - new uint[]{11672}, - Array.Empty(), - new uint[]{11674}, - new uint[]{11675}, - new uint[]{11676}, - new uint[]{11677}, - new uint[]{11678}, - new uint[]{11679}, - new uint[]{11680}, - new uint[]{11681}, - new uint[]{11682}, - new uint[]{11683}, - new uint[]{11684}, - new uint[]{11685}, - new uint[]{11686}, - new uint[]{11687}, - new uint[]{11688}, - new uint[]{11689}, - new uint[]{11690}, - new uint[]{11691}, - new uint[]{11692}, - new uint[]{11693}, - new uint[]{11694}, - new uint[]{11695}, - new uint[]{11696}, - new uint[]{11697}, - new uint[]{11698}, - new uint[]{11699}, - new uint[]{11700}, - new uint[]{11701}, - new uint[]{11702}, - new uint[]{11703}, - new uint[]{11704}, - new uint[]{11705}, - new uint[]{11706}, - new uint[]{11707}, - new uint[]{11708}, - new uint[]{11709}, - new uint[]{11710}, - new uint[]{11711}, - new uint[]{11712}, - new uint[]{11713}, - new uint[]{11714}, - new uint[]{11715}, - new uint[]{11716}, - new uint[]{11717}, - new uint[]{11718}, - new uint[]{11719}, - new uint[]{11720}, - new uint[]{11721}, - new uint[]{11722}, - new uint[]{11723}, - new uint[]{11724}, - new uint[]{11725}, - new uint[]{11726}, - new uint[]{11727}, - new uint[]{11728}, - new uint[]{11729}, - new uint[]{11730}, - new uint[]{11731}, - new uint[]{11732}, - new uint[]{11733}, - new uint[]{11734}, - new uint[]{11735}, - new uint[]{11736}, - new uint[]{11737}, - new uint[]{11738}, - new uint[]{11739}, - new uint[]{11740}, - new uint[]{11741}, - new uint[]{11742}, - Array.Empty(), - new uint[]{11744}, - new uint[]{11745}, - new uint[]{11746}, - new uint[]{11747}, - new uint[]{11748}, - new uint[]{11749}, - new uint[]{11750}, - new uint[]{11751}, - new uint[]{11752}, - new uint[]{11753}, - new uint[]{11754}, - new uint[]{11755}, - new uint[]{11756}, - new uint[]{11757}, - new uint[]{11758}, - new uint[]{11759}, - new uint[]{11760}, - new uint[]{11761}, - new uint[]{11762}, - new uint[]{11763}, - new uint[]{11764}, - new uint[]{11765}, - new uint[]{11766}, - new uint[]{11767}, - new uint[]{11768}, - new uint[]{11769}, - new uint[]{11770}, - new uint[]{11771}, - new uint[]{11772}, - new uint[]{11773}, - new uint[]{11774}, - new uint[]{11775}, - new uint[]{11776}, - new uint[]{11777}, - new uint[]{11778}, - new uint[]{11779}, - new uint[]{11780}, - new uint[]{11781}, - new uint[]{11782}, - new uint[]{11783}, - new uint[]{11784}, - new uint[]{11785}, - new uint[]{11786}, - new uint[]{11787}, - new uint[]{11788}, - new uint[]{11789}, - new uint[]{11790}, - new uint[]{11791}, - new uint[]{11792}, - new uint[]{11793}, - new uint[]{11794}, - new uint[]{11795}, - new uint[]{11796}, - new uint[]{11797}, - new uint[]{11798}, - new uint[]{11799}, - new uint[]{11800}, - new uint[]{11801}, - new uint[]{11802}, - new uint[]{11803}, - new uint[]{11804}, - new uint[]{11805}, - new uint[]{11806}, - new uint[]{11807}, - new uint[]{11808}, - new uint[]{11809}, - new uint[]{11810}, - new uint[]{11811}, - new uint[]{11812}, - new uint[]{11813}, - new uint[]{11814}, - new uint[]{11815}, - new uint[]{11816}, - new uint[]{11817}, - new uint[]{11818}, - new uint[]{11819}, - new uint[]{11820}, - new uint[]{11821}, - new uint[]{11822}, - new uint[]{11823}, - new uint[]{11824}, - new uint[]{11825}, - new uint[]{11826}, - new uint[]{11827}, - new uint[]{11828}, - new uint[]{11829}, - new uint[]{11830}, - new uint[]{11831}, - new uint[]{11832}, - new uint[]{11833}, - new uint[]{11834}, - new uint[]{11835}, - new uint[]{11836}, - new uint[]{11837}, - new uint[]{11838}, - new uint[]{11839}, - new uint[]{11840}, - new uint[]{11841}, - new uint[]{11842}, - new uint[]{11843}, - new uint[]{11844}, - new uint[]{11845}, - new uint[]{11846}, - new uint[]{11847}, - new uint[]{11848}, - new uint[]{11849}, - new uint[]{11850}, - new uint[]{11851}, - new uint[]{11852}, - new uint[]{11853}, - new uint[]{11854}, - new uint[]{11855}, - new uint[]{11856}, - new uint[]{11857}, - new uint[]{11858}, - new uint[]{11859}, - new uint[]{11860}, - new uint[]{11861}, - new uint[]{11862}, - new uint[]{11863}, - new uint[]{11864}, - new uint[]{11865}, - new uint[]{11866}, - new uint[]{11867}, - new uint[]{11868}, - new uint[]{11869}, - new uint[]{11870}, - new uint[]{11871}, - new uint[]{11872}, - new uint[]{11873}, - new uint[]{11874}, - new uint[]{11875}, - new uint[]{11876}, - new uint[]{11877}, - new uint[]{11878}, - new uint[]{11879}, - new uint[]{11880}, - new uint[]{11881}, - new uint[]{11882}, - new uint[]{11883}, - new uint[]{11884}, - new uint[]{11885}, - new uint[]{11886}, - new uint[]{11887}, - new uint[]{11888}, - new uint[]{11889}, - new uint[]{11890}, - new uint[]{11891}, - new uint[]{11892}, - new uint[]{11893}, - new uint[]{11894}, - new uint[]{11895}, - new uint[]{11896}, - new uint[]{11897}, - new uint[]{11898}, - new uint[]{11899}, - new uint[]{11900}, - new uint[]{11901}, - new uint[]{11902}, - new uint[]{11903}, - new uint[]{11904}, - new uint[]{11905}, - new uint[]{11906}, - new uint[]{11907}, - new uint[]{11908}, - new uint[]{11909}, - new uint[]{11910}, - new uint[]{11911}, - new uint[]{11912}, - new uint[]{11913}, - new uint[]{11914}, - new uint[]{11915}, - new uint[]{11916}, - new uint[]{11917}, - new uint[]{11918}, - new uint[]{11919}, - new uint[]{11920}, - new uint[]{11921}, - new uint[]{11922}, - new uint[]{11923}, - new uint[]{11924}, - new uint[]{11925}, - new uint[]{11926}, - new uint[]{11927}, - new uint[]{11928}, - new uint[]{11929}, - new uint[]{11930}, - new uint[]{11931}, - new uint[]{11932}, - new uint[]{11933}, - new uint[]{11934}, - new uint[]{11935}, - new uint[]{11936}, - new uint[]{11937}, - new uint[]{11938}, - new uint[]{11939}, - new uint[]{11940}, - new uint[]{11941}, - new uint[]{11942}, - new uint[]{11943}, - new uint[]{11944}, - new uint[]{11945}, - new uint[]{11946}, - new uint[]{11947}, - new uint[]{11948}, - new uint[]{11949}, - new uint[]{11950}, - new uint[]{11951}, - new uint[]{11952}, - new uint[]{11953}, - new uint[]{11954}, - new uint[]{11955}, - new uint[]{11956}, - new uint[]{11957}, - new uint[]{11958}, - new uint[]{11959}, - new uint[]{11960}, - new uint[]{11961}, - new uint[]{11962}, - new uint[]{11963}, - new uint[]{11964}, - new uint[]{11965}, - new uint[]{11966}, - new uint[]{11967}, - new uint[]{11968}, - new uint[]{11969}, - new uint[]{11970}, - new uint[]{11971}, - new uint[]{11972}, - new uint[]{11973}, - Array.Empty(), - new uint[]{11975}, - new uint[]{11976}, - new uint[]{11977}, - new uint[]{11978}, - new uint[]{11979}, - new uint[]{11980}, - Array.Empty(), - new uint[]{11982}, - new uint[]{11983}, - new uint[]{11984}, - new uint[]{11985}, - new uint[]{11986}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108}, - Array.Empty(), - new uint[]{11433}, - new uint[]{11433}, - new uint[]{11433}, - new uint[]{11433}, - new uint[]{11433}, - new uint[]{11433}, - new uint[]{11433}, - new uint[]{11433}, - new uint[]{3321}, - new uint[]{3321}, - new uint[]{3326}, - new uint[]{3326}, - new uint[]{11463}, - new uint[]{11464}, - new uint[]{11465}, - new uint[]{11466}, - new uint[]{11467}, - new uint[]{11519}, - new uint[]{11520}, - new uint[]{12062}, - new uint[]{12061}, - new uint[]{12094}, - new uint[]{12081}, - Array.Empty(), - new uint[]{12095}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{12082}, - new uint[]{12088}, - new uint[]{12087}, - new uint[]{12086}, - new uint[]{12084}, - new uint[]{12085}, - new uint[]{12083}, - new uint[]{3329}, - new uint[]{3329}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{11431}, - new uint[]{12100}, - new uint[]{12101}, - new uint[]{11992}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{12060}, - new uint[]{108}, - new uint[]{9363}, - new uint[]{108}, - new uint[]{12045}, - new uint[]{12043}, - new uint[]{12046}, - new uint[]{12047}, - new uint[]{12048}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{12269}, - new uint[]{12052}, - new uint[]{12250}, - new uint[]{12251}, - new uint[]{12252}, - new uint[]{12253}, - new uint[]{12254}, - new uint[]{12255}, - new uint[]{4954}, - new uint[]{12247}, - new uint[]{12248}, - Array.Empty(), - new uint[]{12246}, - new uint[]{12316}, - new uint[]{12263}, - new uint[]{12264}, - new uint[]{12079}, - new uint[]{12080}, - new uint[]{108}, - new uint[]{108}, - new uint[]{12102}, - new uint[]{12103}, - new uint[]{12104}, - new uint[]{12105}, - new uint[]{11997}, - new uint[]{11998}, - new uint[]{11999}, - new uint[]{12000}, - new uint[]{12001}, - new uint[]{12002}, - new uint[]{12003}, - new uint[]{12004}, - new uint[]{12005}, - new uint[]{12006}, - new uint[]{12007}, - new uint[]{12008}, - new uint[]{12009}, - Array.Empty(), - new uint[]{12010}, - new uint[]{12011}, - new uint[]{12012}, - new uint[]{12013}, - new uint[]{12014}, - new uint[]{12015}, - new uint[]{12016}, - new uint[]{12017}, - new uint[]{12018}, - new uint[]{12019}, - new uint[]{12020}, - new uint[]{12021}, - new uint[]{12022}, - new uint[]{12023}, - new uint[]{12024}, - new uint[]{12025}, - new uint[]{12026}, - new uint[]{12027}, - new uint[]{12028}, - new uint[]{12029}, - new uint[]{12030}, - new uint[]{12031}, - new uint[]{12032}, - new uint[]{12033}, - new uint[]{12034}, - new uint[]{12035}, - new uint[]{12036}, - new uint[]{12037}, - new uint[]{12038}, - new uint[]{12039}, - new uint[]{12040}, - new uint[]{12240}, - new uint[]{12241}, - new uint[]{12078}, - new uint[]{12097}, - new uint[]{12098}, - new uint[]{12099}, - new uint[]{12097}, - new uint[]{108}, - new uint[]{7695}, - new uint[]{7696}, - new uint[]{7697}, - Array.Empty(), - new uint[]{7635}, - new uint[]{7635}, - new uint[]{7633}, - new uint[]{7634}, - new uint[]{7640}, - new uint[]{7636}, - new uint[]{7637}, - new uint[]{7638}, - new uint[]{12257}, - new uint[]{12257}, - new uint[]{12258}, - new uint[]{7639}, - new uint[]{7695}, - new uint[]{12256}, - new uint[]{12259}, - new uint[]{12260}, - new uint[]{12063}, - new uint[]{12066}, - new uint[]{12067}, - Array.Empty(), - new uint[]{12069}, - new uint[]{12070}, - new uint[]{12071}, - new uint[]{12067}, - new uint[]{12067}, - new uint[]{12072}, - Array.Empty(), - Array.Empty(), - new uint[]{12073}, - new uint[]{12074}, - new uint[]{12075}, - new uint[]{12076}, - new uint[]{12077}, - new uint[]{12065}, - new uint[]{4808}, - new uint[]{4810}, - Array.Empty(), - new uint[]{12057}, - new uint[]{12059}, - Array.Empty(), - new uint[]{12280}, - new uint[]{12056}, - new uint[]{12056}, - new uint[]{12056}, - new uint[]{12054}, - Array.Empty(), - new uint[]{12057}, - new uint[]{12059}, - new uint[]{12059}, - new uint[]{12280}, - new uint[]{12056}, - new uint[]{12056}, - new uint[]{12056}, - new uint[]{12058}, - new uint[]{12058}, - new uint[]{12058}, - new uint[]{108}, - Array.Empty(), - new uint[]{12242}, - new uint[]{12243}, - new uint[]{12265}, - new uint[]{12266}, - new uint[]{6091}, - new uint[]{12278}, - new uint[]{12279}, - new uint[]{12267}, - new uint[]{12268}, - new uint[]{3822}, - new uint[]{2143}, - new uint[]{12292}, - new uint[]{12293}, - new uint[]{3823}, - new uint[]{12292}, - new uint[]{12293}, - new uint[]{12296}, - new uint[]{12295}, - new uint[]{12294}, - new uint[]{12064}, - new uint[]{12297}, - new uint[]{12297}, - new uint[]{12312}, - new uint[]{12312}, - new uint[]{8378}, - new uint[]{4392}, - new uint[]{4392}, - new uint[]{4130}, - new uint[]{4130}, - new uint[]{11330}, - new uint[]{11331}, - new uint[]{11332}, - new uint[]{11333}, - new uint[]{713}, - new uint[]{713}, - new uint[]{11262}, - new uint[]{11262}, - new uint[]{12236}, - new uint[]{12237}, - new uint[]{12238}, - new uint[]{11418, 12053}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{12106}, - new uint[]{12107}, - new uint[]{12108}, - new uint[]{12109}, - new uint[]{12110}, - new uint[]{12111}, - new uint[]{12112}, - new uint[]{12113}, - new uint[]{12114}, - new uint[]{12115}, - new uint[]{12116}, - new uint[]{12117}, - new uint[]{12118}, - new uint[]{12122}, - new uint[]{12121}, - new uint[]{12120}, - new uint[]{12119}, - new uint[]{12123}, - new uint[]{12124}, - new uint[]{12125}, - new uint[]{12126}, - new uint[]{12127}, - new uint[]{12128}, - new uint[]{12129}, - new uint[]{12130}, - new uint[]{12131}, - new uint[]{12132}, - new uint[]{12133}, - new uint[]{12134}, - new uint[]{12135}, - new uint[]{12136}, - new uint[]{12137}, - new uint[]{12138}, - new uint[]{12139}, - new uint[]{12140}, - new uint[]{12141}, - new uint[]{12142}, - new uint[]{12143}, - new uint[]{12144}, - new uint[]{12145}, - new uint[]{12146}, - new uint[]{12147}, - new uint[]{12148}, - new uint[]{12149}, - new uint[]{12150}, - new uint[]{12151}, - new uint[]{12152}, - new uint[]{12153}, - new uint[]{12154}, - new uint[]{12155}, - new uint[]{12156}, - new uint[]{12157}, - new uint[]{12158}, - new uint[]{12159}, - new uint[]{12160}, - new uint[]{12161}, - new uint[]{12162}, - new uint[]{12163}, - new uint[]{12164}, - new uint[]{12165}, - new uint[]{12166}, - new uint[]{12167}, - new uint[]{12168}, - new uint[]{12169}, - new uint[]{12170}, - new uint[]{12171}, - new uint[]{12172}, - new uint[]{12173}, - new uint[]{12174}, - new uint[]{12175}, - new uint[]{12176}, - new uint[]{12177}, - new uint[]{12178}, - new uint[]{12179}, - new uint[]{12180}, - new uint[]{12181}, - new uint[]{12182}, - new uint[]{12183}, - new uint[]{5199}, - new uint[]{5200}, - new uint[]{5201}, - new uint[]{5202}, - new uint[]{5203}, - new uint[]{5204}, - new uint[]{12321}, - new uint[]{12320}, - new uint[]{12319}, - new uint[]{12244}, - new uint[]{12324}, - new uint[]{12324}, - new uint[]{12324}, - new uint[]{12324}, - new uint[]{12324}, - new uint[]{12324}, - new uint[]{12324}, - new uint[]{12324}, - new uint[]{12324}, - new uint[]{12324}, - new uint[]{12323}, - new uint[]{12323}, - new uint[]{12323}, - new uint[]{12323}, - new uint[]{12323}, - new uint[]{12323}, - new uint[]{12323}, - new uint[]{12323}, - new uint[]{12323}, - new uint[]{12323}, - new uint[]{12322}, - new uint[]{12322}, - new uint[]{12322}, - new uint[]{12322}, - new uint[]{12322}, - new uint[]{12322}, - new uint[]{12322}, - new uint[]{12322}, - new uint[]{12322}, - new uint[]{12322}, - new uint[]{12184}, - new uint[]{12185}, - new uint[]{12186}, - new uint[]{12187}, - new uint[]{12188}, - new uint[]{12189}, - new uint[]{12190}, - new uint[]{12191}, - new uint[]{12192}, - new uint[]{12193}, - new uint[]{12194}, - new uint[]{12195}, - new uint[]{12196}, - new uint[]{12197}, - new uint[]{12198}, - new uint[]{12209}, - new uint[]{12199}, - new uint[]{12200}, - new uint[]{12208}, - new uint[]{12201}, - new uint[]{12202}, - new uint[]{12207}, - new uint[]{12203}, - new uint[]{12206}, - new uint[]{12204}, - new uint[]{12205}, - new uint[]{12212}, - new uint[]{12213}, - new uint[]{12210}, - new uint[]{12211}, - new uint[]{12214}, - new uint[]{12215}, - new uint[]{12216}, - new uint[]{12217}, - new uint[]{12218}, - new uint[]{12219}, - new uint[]{12220}, - new uint[]{12221}, - new uint[]{12222}, - new uint[]{12223}, - new uint[]{12224}, - new uint[]{12225}, - new uint[]{12229}, - new uint[]{12230}, - new uint[]{12226}, - new uint[]{12227}, - new uint[]{12232}, - new uint[]{12231}, - new uint[]{12233}, - new uint[]{12228}, - new uint[]{12234}, - new uint[]{12235}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{108}, - new uint[]{11296}, - new uint[]{7142}, - new uint[]{12258}, - new uint[]{12261}, - new uint[]{12262}, - new uint[]{11295}, - new uint[]{5199}, - new uint[]{5199, 5204}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{2566}, - new uint[]{10309}, - new uint[]{10309}, - new uint[]{10309}, - new uint[]{10309}, - new uint[]{10309}, - new uint[]{10309}, - new uint[]{10309}, - new uint[]{10309}, - new uint[]{10309}, - new uint[]{10309}, - new uint[]{12031}, - new uint[]{12270}, - new uint[]{12271}, - new uint[]{12272}, - new uint[]{12273}, - new uint[]{12274}, - new uint[]{12275}, - new uint[]{108}, - new uint[]{750}, - new uint[]{750}, - new uint[]{750}, - new uint[]{750}, - new uint[]{12276}, - new uint[]{12276}, - new uint[]{12277}, - new uint[]{12245}, - Array.Empty(), - Array.Empty(), - new uint[]{12308}, - new uint[]{12309}, - Array.Empty(), - new uint[]{12308}, - new uint[]{12072}, - new uint[]{12311}, - Array.Empty(), - Array.Empty(), - new uint[]{12334}, - new uint[]{12335}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{12281}, - new uint[]{12282}, - new uint[]{12283}, - new uint[]{12284}, - new uint[]{12285}, - new uint[]{12286}, - new uint[]{12287}, - new uint[]{12288}, - new uint[]{12289}, - new uint[]{12290}, - new uint[]{12291}, - new uint[]{12298}, - Array.Empty(), - new uint[]{12300}, - Array.Empty(), - new uint[]{12302}, - new uint[]{12303}, - new uint[]{12304}, - new uint[]{12305}, - new uint[]{12306}, - new uint[]{12307}, - new uint[]{12314}, - new uint[]{12315}, - new uint[]{12338}, - new uint[]{12339}, - new uint[]{12340}, - new uint[]{12341}, - new uint[]{12342}, - new uint[]{12343}, - new uint[]{12344}, - new uint[]{12345}, - new uint[]{12346}, - new uint[]{12347}, - new uint[]{12348}, - new uint[]{12349}, - new uint[]{12350}, - new uint[]{12318}, - new uint[]{11297}, - new uint[]{12369}, - new uint[]{12372}, - new uint[]{12369}, - new uint[]{12370}, - new uint[]{12371}, - new uint[]{12372}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{12311}, - new uint[]{12308}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{108}, - new uint[]{12337}, - new uint[]{12336}, - new uint[]{12388}, - new uint[]{12389}, - new uint[]{12390}, - new uint[]{12390}, - Array.Empty(), - new uint[]{12391}, - new uint[]{12388}, - new uint[]{12389}, - new uint[]{12389}, - new uint[]{12390}, - new uint[]{12390}, - new uint[]{12390}, - new uint[]{12390}, - new uint[]{12391}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{12354}, - new uint[]{12355}, - new uint[]{12426}, - new uint[]{108}, - new uint[]{12354}, - new uint[]{12355}, - new uint[]{12426}, - new uint[]{12427}, - new uint[]{108}, - new uint[]{12356}, - new uint[]{12377}, - new uint[]{12378}, - new uint[]{12379}, - new uint[]{12380}, - new uint[]{12378}, - new uint[]{12377}, - new uint[]{12377}, - new uint[]{12377}, - new uint[]{12377}, - new uint[]{12378}, - new uint[]{12379}, - new uint[]{12380}, - new uint[]{12381}, - new uint[]{12377}, - new uint[]{12377}, - new uint[]{12377}, - new uint[]{12377}, - new uint[]{12377}, - new uint[]{12382}, - new uint[]{12383}, - new uint[]{12384}, - new uint[]{12385}, - new uint[]{12386}, - new uint[]{12387}, - new uint[]{12392}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{12365}, - new uint[]{12367}, - new uint[]{12368}, - new uint[]{12365}, - new uint[]{12367}, - new uint[]{12368}, - new uint[]{12366}, - new uint[]{108}, - Array.Empty(), - Array.Empty(), - new uint[]{12339}, - new uint[]{12339}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{5569}, - new uint[]{5570}, - new uint[]{5571}, - new uint[]{5572}, - Array.Empty(), - new uint[]{12463}, - new uint[]{5970}, - new uint[]{5239}, - new uint[]{4130}, - new uint[]{4392}, - new uint[]{4130}, - new uint[]{4392}, - new uint[]{4130}, - new uint[]{9350}, - new uint[]{12464}, - new uint[]{6148}, - new uint[]{12465}, - new uint[]{12466}, - new uint[]{12467}, - new uint[]{12468}, - new uint[]{12469}, - new uint[]{12470}, - new uint[]{5964}, - new uint[]{4133}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{108}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{12382}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{12436}, - new uint[]{12437}, - Array.Empty(), - new uint[]{12439}, - new uint[]{12440}, - new uint[]{12441}, - Array.Empty(), - new uint[]{12443}, - Array.Empty(), - new uint[]{12445}, - new uint[]{12446}, - Array.Empty(), - Array.Empty(), - new uint[]{12455}, - new uint[]{12449}, - new uint[]{12450}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{12461}, - new uint[]{12462}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - new uint[]{10902}, - new uint[]{10903}, - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - Array.Empty(), - }; -} diff --git a/Penumbra.GameData/Data/DataSharer.cs b/Penumbra.GameData/Data/DataSharer.cs deleted file mode 100644 index 3608a4a0..00000000 --- a/Penumbra.GameData/Data/DataSharer.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Threading.Tasks; -using Dalamud; -using Dalamud.Logging; -using Dalamud.Plugin; - -namespace Penumbra.GameData.Data; - -/// -/// A container base class that shares data through Dalamud but cares about the used language and version. -/// Inheritors should dispose their Dalamud Shares in DisposeInternal via DisposeTag and add them in their constructor via TryCatchData. -/// -public abstract class DataSharer : IDisposable -{ - protected readonly DalamudPluginInterface PluginInterface; - protected readonly int Version; - protected readonly ClientLanguage Language; - private bool _disposed; - - protected DataSharer(DalamudPluginInterface pluginInterface, ClientLanguage language, int version) - { - PluginInterface = pluginInterface; - Language = language; - Version = version; - } - - protected virtual void DisposeInternal() - { } - - public void Dispose() - { - if (_disposed) - return; - - DisposeInternal(); - GC.SuppressFinalize(this); - _disposed = true; - } - - ~DataSharer() - => Dispose(); - - protected void DisposeTag(string tag) - => PluginInterface.RelinquishData(GetVersionedTag(tag, Language, Version)); - - protected T TryCatchData(string tag, Func func) where T : class - { - try - { - return PluginInterface.GetOrCreateData(GetVersionedTag(tag, Language, Version), func); - } - catch (Exception ex) - { - PluginLog.Error($"Error creating shared data for {tag}:\n{ex}"); - return func(); - } - } - - protected Task TryCatchDataAsync(string tag, Action fill) where T : class, new() - { - tag = GetVersionedTag(tag, Language, Version); - if (PluginInterface.TryGetData(tag, out var data)) - return Task.FromResult(data); - - T ret = new(); - return Task.Run(() => - { - fill(ret); - return ret; - }); - } - - public static void DisposeTag(DalamudPluginInterface pi, string tag, ClientLanguage language, int version) - => pi.RelinquishData(GetVersionedTag(tag, language, version)); - - public static T TryCatchData(DalamudPluginInterface pi, string tag, ClientLanguage language, int version, Func func) - where T : class - { - try - { - return pi.GetOrCreateData(GetVersionedTag(tag, language, version), func); - } - catch (Exception ex) - { - PluginLog.Error($"Error creating shared actor data for {tag}:\n{ex}"); - return func(); - } - } - - private static string GetVersionedTag(string tag, ClientLanguage language, int version) - => $"Penumbra.GameData.{tag}.{language}.V{version}"; -} diff --git a/Penumbra.GameData/Data/DisassembledShader.cs b/Penumbra.GameData/Data/DisassembledShader.cs deleted file mode 100644 index f611982c..00000000 --- a/Penumbra.GameData/Data/DisassembledShader.cs +++ /dev/null @@ -1,463 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using Penumbra.GameData.Interop; -using Penumbra.String; - -namespace Penumbra.GameData.Data; - -public partial class DisassembledShader -{ - public struct ResourceBinding - { - public string Name; - public ResourceType Type; - public Format Format; - public ResourceDimension Dimension; - public uint Slot; - public uint Elements; - public uint RegisterCount; - public VectorComponents[] Used; - public VectorComponents UsedDynamically; - } - - // Abbreviated using the uppercased first char of their name - public enum ResourceType : byte - { - Unspecified = 0, - ConstantBuffer = 0x43, // 'C' - Sampler = 0x53, // 'S' - Texture = 0x54, // 'T' - Uav = 0x55, // 'U' - } - - // Abbreviated using the uppercased first and last char of their name - public enum Format : ushort - { - Unspecified = 0, - NotApplicable = 0x4E41, // 'NA' - Int = 0x4954, // 'IT' - Int4 = 0x4934, // 'I4' - Float = 0x4654, // 'FT' - Float4 = 0x4634, // 'F4' - } - - // Abbreviated using the uppercased first and last char of their name - public enum ResourceDimension : ushort - { - Unspecified = 0, - NotApplicable = 0x4E41, // 'NA' - TwoD = 0x3244, // '2D' - ThreeD = 0x3344, // '3D' - Cube = 0x4345, // 'CE' - } - - public struct InputOutput - { - public string Name; - public uint Index; - public VectorComponents Mask; - public uint Register; - public string SystemValue; - public Format Format; - public VectorComponents Used; - } - - [Flags] - public enum VectorComponents : byte - { - X = 1, - Y = 2, - Z = 4, - W = 8, - All = 15, - } - - public enum ShaderStage : byte - { - Unspecified = 0, - Pixel = 0x50, // 'P' - Vertex = 0x56, // 'V' - } - - [GeneratedRegex(@"\s(\w+)(?:\[\d+\])?;\s*//\s*Offset:\s*0\s*Size:\s*(\d+)$", RegexOptions.Multiline | RegexOptions.NonBacktracking)] - private static partial Regex ResourceBindingSizeRegex(); - - [GeneratedRegex(@"c(\d+)(?:\[([^\]]+)\])?(?:\.([wxyz]+))?", RegexOptions.NonBacktracking)] - private static partial Regex Sm3ConstantBufferUsageRegex(); - - [GeneratedRegex(@"^\s*texld\S*\s+[^,]+,[^,]+,\s*s(\d+)", RegexOptions.NonBacktracking)] - private static partial Regex Sm3TextureUsageRegex(); - - [GeneratedRegex(@"cb(\d+)\[([^\]]+)\]\.([wxyz]+)", RegexOptions.NonBacktracking)] - private static partial Regex Sm5ConstantBufferUsageRegex(); - - [GeneratedRegex(@"^\s*sample_\S*\s+[^.]+\.([wxyz]+),[^,]+,\s*t(\d+)\.([wxyz]+)", RegexOptions.NonBacktracking)] - private static partial Regex Sm5TextureUsageRegex(); - - private static readonly char[] Digits = Enumerable.Range(0, 10).Select(c => (char)('0' + c)).ToArray(); - - public readonly ByteString RawDisassembly; - public readonly uint ShaderModel; - public readonly ShaderStage Stage; - public readonly string BufferDefinitions; - public readonly ResourceBinding[] ResourceBindings; - public readonly InputOutput[] InputSignature; - public readonly InputOutput[] OutputSignature; - public readonly IReadOnlyList Instructions; - - public DisassembledShader(ByteString rawDisassembly) - { - RawDisassembly = rawDisassembly; - var lines = rawDisassembly.Split((byte) '\n'); - Instructions = lines.FindAll(ln => !ln.StartsWith("//"u8) && ln.Length > 0); - var shaderModel = Instructions[0].Trim().Split((byte) '_'); - Stage = (ShaderStage)(byte)char.ToUpper((char) shaderModel[0][0]); - ShaderModel = (uint.Parse(shaderModel[1].ToString()) << 8) | uint.Parse(shaderModel[2].ToString()); - var header = PreParseHeader(lines.Take(lines.IndexOf(Instructions[0])).Select(l => l.ToString()).ToArray()); - switch (ShaderModel >> 8) - { - case 3: - ParseSm3Header(header, out BufferDefinitions, out ResourceBindings, out InputSignature, out OutputSignature); - ParseSm3ResourceUsage(Instructions, ResourceBindings); - break; - case 5: - ParseSm5Header(header, out BufferDefinitions, out ResourceBindings, out InputSignature, out OutputSignature); - ParseSm5ResourceUsage(Instructions, ResourceBindings); - break; - default: throw new NotImplementedException(); - } - } - - public ResourceBinding? GetResourceBindingByName(ResourceType type, string name) - => ResourceBindings.FirstOrNull(b => b.Type == type && b.Name == name); - - public ResourceBinding? GetResourceBindingBySlot(ResourceType type, uint slot) - => ResourceBindings.FirstOrNull(b => b.Type == type && b.Slot == slot); - - public static DisassembledShader Disassemble(ReadOnlySpan shaderBlob) - => new(D3DCompiler.Disassemble(shaderBlob)); - - private static void ParseSm3Header(Dictionary header, out string bufferDefinitions, - out ResourceBinding[] resourceBindings, out InputOutput[] inputSignature, out InputOutput[] outputSignature) - { - bufferDefinitions = header.TryGetValue("Parameters", out var rawParameters) - ? string.Join('\n', rawParameters) - : string.Empty; - if (header.TryGetValue("Registers", out var rawRegisters)) - { - var (_, registers) = ParseTable(rawRegisters); - resourceBindings = Array.ConvertAll(registers, register => - { - var type = (ResourceType)(byte)char.ToUpper(register[1][0]); - if (type == ResourceType.Sampler) - type = ResourceType.Texture; - var size = uint.Parse(register[2]); - return new ResourceBinding - { - Name = register[0], - Type = type, - Format = Format.Unspecified, - Dimension = ResourceDimension.Unspecified, - Slot = uint.Parse(register[1][1..]), - Elements = 1, - RegisterCount = size, - Used = new VectorComponents[size], - }; - }); - } - else - { - resourceBindings = Array.Empty(); - } - - inputSignature = Array.Empty(); - outputSignature = Array.Empty(); - } - - private static void ParseSm3ResourceUsage(IReadOnlyList instructions, ResourceBinding[] resourceBindings) - { - var cbIndices = new Dictionary(); - var tIndices = new Dictionary(); - { - var i = 0; - foreach (var binding in resourceBindings) - { - switch (binding.Type) - { - case ResourceType.ConstantBuffer: - for (var j = 0u; j < binding.RegisterCount; j++) - cbIndices[binding.Slot + j] = i; - break; - case ResourceType.Texture: - tIndices[binding.Slot] = i; - break; - } - - ++i; - } - } - foreach (var instruction in instructions) - { - var trimmed = instruction.Trim(); - if (trimmed.StartsWith("def"u8) || trimmed.StartsWith("dcl"u8)) - continue; - - var instructionString = instruction.ToString(); - foreach (Match cbMatch in Sm3ConstantBufferUsageRegex().Matches(instructionString)) - { - var buffer = uint.Parse(cbMatch.Groups[1].Value); - if (cbIndices.TryGetValue(buffer, out var i)) - { - var swizzle = cbMatch.Groups[3].Success ? ParseVectorComponents(cbMatch.Groups[3].Value) : VectorComponents.All; - if (cbMatch.Groups[2].Success) - resourceBindings[i].UsedDynamically |= swizzle; - else - resourceBindings[i].Used[buffer - resourceBindings[i].Slot] |= swizzle; - } - } - - var tMatch = Sm3TextureUsageRegex().Match(instructionString); - if (tMatch.Success) - { - var texture = uint.Parse(tMatch.Groups[1].Value); - if (tIndices.TryGetValue(texture, out var i)) - resourceBindings[i].Used[0] = VectorComponents.All; - } - } - } - - private static void ParseSm5Header(Dictionary header, out string bufferDefinitions, - out ResourceBinding[] resourceBindings, out InputOutput[] inputSignature, out InputOutput[] outputSignature) - { - if (header.TryGetValue("Resource Bindings", out var rawResBindings)) - { - var (head, resBindings) = ParseTable(rawResBindings); - resourceBindings = Array.ConvertAll(resBindings, binding => - { - var type = (ResourceType)(byte)char.ToUpper(binding[1][0]); - return new ResourceBinding - { - Name = binding[0], - Type = type, - Format = (Format)(((byte)char.ToUpper(binding[2][0]) << 8) | (byte)char.ToUpper(binding[2][^1])), - Dimension = (ResourceDimension)(((byte)char.ToUpper(binding[3][0]) << 8) | (byte)char.ToUpper(binding[3][^1])), - Slot = uint.Parse(binding[4][binding[4].IndexOfAny(Digits)..]), - Elements = uint.Parse(binding[5]), - RegisterCount = type == ResourceType.Texture ? 1u : 0u, - Used = type == ResourceType.Texture ? new VectorComponents[1] : Array.Empty(), - }; - }); - } - else - { - resourceBindings = Array.Empty(); - } - - if (header.TryGetValue("Buffer Definitions", out var rawBufferDefs)) - { - bufferDefinitions = string.Join('\n', rawBufferDefs); - foreach (Match match in ResourceBindingSizeRegex().Matches(bufferDefinitions)) - { - var name = match.Groups[1].Value; - var bytesSize = uint.Parse(match.Groups[2].Value); - var pos = Array.FindIndex(resourceBindings, binding => binding.Type == ResourceType.ConstantBuffer && binding.Name == name); - if (pos >= 0) - { - resourceBindings[pos].RegisterCount = (bytesSize + 0xF) >> 4; - resourceBindings[pos].Used = new VectorComponents[resourceBindings[pos].RegisterCount]; - } - } - } - else - { - bufferDefinitions = string.Empty; - } - - static InputOutput ParseInputOutput(string[] inOut) - => new() - { - Name = inOut[0], - Index = uint.Parse(inOut[1]), - Mask = ParseVectorComponents(inOut[2]), - Register = uint.Parse(inOut[3]), - SystemValue = string.Intern(inOut[4]), - Format = (Format)(((byte)char.ToUpper(inOut[5][0]) << 8) | (byte)char.ToUpper(inOut[5][^1])), - Used = ParseVectorComponents(inOut[6]), - }; - - if (header.TryGetValue("Input signature", out var rawInputSig)) - { - var (_, inputSig) = ParseTable(rawInputSig); - inputSignature = Array.ConvertAll(inputSig, ParseInputOutput); - } - else - { - inputSignature = Array.Empty(); - } - - if (header.TryGetValue("Output signature", out var rawOutputSig)) - { - var (_, outputSig) = ParseTable(rawOutputSig); - outputSignature = Array.ConvertAll(outputSig, ParseInputOutput); - } - else - { - outputSignature = Array.Empty(); - } - } - - private static void ParseSm5ResourceUsage(IReadOnlyList instructions, ResourceBinding[] resourceBindings) - { - var cbIndices = new Dictionary(); - var tIndices = new Dictionary(); - { - var i = 0; - foreach (var binding in resourceBindings) - { - switch (binding.Type) - { - case ResourceType.ConstantBuffer: - cbIndices[binding.Slot] = i; - break; - case ResourceType.Texture: - tIndices[binding.Slot] = i; - break; - } - - ++i; - } - } - foreach (var instruction in instructions) - { - var trimmed = instruction.Trim(); - if (trimmed.StartsWith("def"u8) || trimmed.StartsWith("dcl"u8)) - continue; - - var instructionString = instruction.ToString(); - foreach (Match cbMatch in Sm5ConstantBufferUsageRegex().Matches(instructionString)) - { - var buffer = uint.Parse(cbMatch.Groups[1].Value); - if (cbIndices.TryGetValue(buffer, out var i)) - { - var swizzle = ParseVectorComponents(cbMatch.Groups[3].Value); - if (int.TryParse(cbMatch.Groups[2].Value, out var vector)) - { - if (vector < resourceBindings[i].Used.Length) - resourceBindings[i].Used[vector] |= swizzle; - } - else - { - resourceBindings[i].UsedDynamically |= swizzle; - } - } - } - - var tMatch = Sm5TextureUsageRegex().Match(instructionString); - if (tMatch.Success) - { - var texture = uint.Parse(tMatch.Groups[2].Value); - if (tIndices.TryGetValue(texture, out var i)) - { - var outSwizzle = ParseVectorComponents(tMatch.Groups[1].Value); - var rawInSwizzle = tMatch.Groups[3].Value; - var inSwizzle = new StringBuilder(4); - if ((outSwizzle & VectorComponents.X) != 0) - inSwizzle.Append(rawInSwizzle[0]); - if ((outSwizzle & VectorComponents.Y) != 0) - inSwizzle.Append(rawInSwizzle[1]); - if ((outSwizzle & VectorComponents.Z) != 0) - inSwizzle.Append(rawInSwizzle[2]); - if ((outSwizzle & VectorComponents.W) != 0) - inSwizzle.Append(rawInSwizzle[3]); - resourceBindings[i].Used[0] |= ParseVectorComponents(inSwizzle.ToString()); - } - } - } - } - - private static VectorComponents ParseVectorComponents(string components) - { - components = components.ToUpperInvariant(); - return (components.Contains('X') ? VectorComponents.X : 0) - | (components.Contains('Y') ? VectorComponents.Y : 0) - | (components.Contains('Z') ? VectorComponents.Z : 0) - | (components.Contains('W') ? VectorComponents.W : 0); - } - - private static Dictionary PreParseHeader(ReadOnlySpan header) - { - var sections = new Dictionary(); - - void AddSection(string name, ReadOnlySpan section) - { - while (section.Length > 0 && section[0].Length <= 3) - section = section[1..]; - while (section.Length > 0 && section[^1].Length <= 3) - section = section[..^1]; - sections.Add(name, Array.ConvertAll(section.ToArray(), ln => ln.Length <= 3 ? string.Empty : ln[3..])); - } - - var lastSectionName = ""; - var lastSectionStart = 0; - for (var i = 1; i < header.Length - 1; ++i) - { - string current; - if (header[i - 1].Length <= 3 && header[i + 1].Length <= 3 && (current = header[i].TrimEnd()).EndsWith(':')) - { - AddSection(lastSectionName, header[lastSectionStart..(i - 1)]); - lastSectionName = current[3..^1]; - lastSectionStart = i + 2; - ++i; // The next line cannot match - } - } - - AddSection(lastSectionName, header[lastSectionStart..]); - - return sections; - } - - private static (string[], string[][]) ParseTable(ReadOnlySpan lines) - { - var columns = new List(); - { - var dashLine = lines[1]; - for (var i = 0; true; /* this part intentionally left blank */) - { - var start = dashLine.IndexOf('-', i); - if (start < 0) - break; - - var end = dashLine.IndexOf(' ', start + 1); - if (end < 0) - { - columns.Add(start..dashLine.Length); - break; - } - else - { - columns.Add(start..end); - i = end + 1; - } - } - } - var headers = new string[columns.Count]; - { - var headerLine = lines[0]; - for (var i = 0; i < columns.Count; ++i) - headers[i] = headerLine[columns[i]].Trim(); - } - var data = new List(); - foreach (var line in lines[2..]) - { - var row = new string[columns.Count]; - for (var i = 0; i < columns.Count; ++i) - row[i] = line[columns[i]].Trim(); - data.Add(row); - } - - return (headers, data.ToArray()); - } -} diff --git a/Penumbra.GameData/Data/EquipmentIdentificationList.cs b/Penumbra.GameData/Data/EquipmentIdentificationList.cs deleted file mode 100644 index 571867c4..00000000 --- a/Penumbra.GameData/Data/EquipmentIdentificationList.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Dalamud; -using Dalamud.Plugin; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; -using PseudoEquipItem = System.ValueTuple; - -namespace Penumbra.GameData.Data; - -internal sealed class EquipmentIdentificationList : KeyList -{ - private const string Tag = "EquipmentIdentification"; - - public EquipmentIdentificationList(DalamudPluginInterface pi, ClientLanguage language, ItemData data) - : base(pi, Tag, language, ObjectIdentification.IdentificationVersion, CreateEquipmentList(data)) - { } - - public IEnumerable Between(SetId modelId, EquipSlot slot = EquipSlot.Unknown, byte variant = 0) - { - if (slot == EquipSlot.Unknown) - return Between(ToKey(modelId, 0, 0), ToKey(modelId, (EquipSlot)0xFF, 0xFF)).Select(e => (EquipItem)e); - if (variant == 0) - return Between(ToKey(modelId, slot, 0), ToKey(modelId, slot, 0xFF)).Select(e => (EquipItem)e); - - return Between(ToKey(modelId, slot, variant), ToKey(modelId, slot, variant)).Select(e => (EquipItem)e); - } - - public void Dispose(DalamudPluginInterface pi, ClientLanguage language) - => DataSharer.DisposeTag(pi, Tag, language, ObjectIdentification.IdentificationVersion); - - public static ulong ToKey(SetId modelId, EquipSlot slot, byte variant) - => ((ulong)modelId << 32) | ((ulong)slot << 16) | variant; - - public static ulong ToKey(EquipItem i) - => ToKey(i.ModelId, i.Type.ToSlot(), i.Variant); - - protected override IEnumerable ToKeys(PseudoEquipItem i) - { - yield return ToKey(i); - } - - protected override bool ValidKey(ulong key) - => key != 0; - - protected override int ValueKeySelector(PseudoEquipItem data) - => (int)data.Item2; - - private static IEnumerable CreateEquipmentList(ItemData data) - { - return data.Where(kvp => kvp.Key.IsEquipment() || kvp.Key.IsAccessory()) - .SelectMany(kvp => kvp.Value) - .Select(i => (PseudoEquipItem)i) - .Concat(CustomList); - } - - private static IEnumerable CustomList - => new[] - { - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)8100, (WeaponType)0, 01, FullEquipType.Body, "Reaper Shroud"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9041, (WeaponType)0, 01, FullEquipType.Head, "Cid's Bandana (9041)"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9041, (WeaponType)0, 01, FullEquipType.Body, "Cid's Body (9041)"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9903, (WeaponType)0, 01, FullEquipType.Head, "Smallclothes (NPC, 9903)"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9903, (WeaponType)0, 01, FullEquipType.Body, "Smallclothes (NPC, 9903)"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9903, (WeaponType)0, 01, FullEquipType.Hands, "Smallclothes (NPC, 9903)"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9903, (WeaponType)0, 01, FullEquipType.Legs, "Smallclothes (NPC, 9903)"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9903, (WeaponType)0, 01, FullEquipType.Feet, "Smallclothes (NPC, 9903)"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9212, (WeaponType)0, 12, FullEquipType.Body, "Ancient Robes (Lahabrea)"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9212, (WeaponType)0, 01, FullEquipType.Legs, "Ancient Legs"), - (PseudoEquipItem)EquipItem.FromIds(0, 0, (SetId)9212, (WeaponType)0, 01, FullEquipType.Feet, "Ancient Shoes"), - }; -} diff --git a/Penumbra.GameData/Data/GamePathParser.cs b/Penumbra.GameData/Data/GamePathParser.cs deleted file mode 100644 index 3f2f54a1..00000000 --- a/Penumbra.GameData/Data/GamePathParser.cs +++ /dev/null @@ -1,306 +0,0 @@ -using System; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using Dalamud.Logging; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; - -namespace Penumbra.GameData.Data; - -public class GamePathParser : IGamePathParser -{ - /// Obtain basic information about a file path. - public GameObjectInfo GetFileInfo(string path) - { - path = path.ToLowerInvariant().Replace('\\', '/'); - - var (fileType, objectType, match) = ParseGamePath(path); - if (match is not { Success: true }) - return new GameObjectInfo - { - FileType = fileType, - ObjectType = objectType, - }; - - try - { - var groups = match.Groups; - switch (objectType) - { - case ObjectType.Accessory: return HandleEquipment(fileType, groups); - case ObjectType.Equipment: return HandleEquipment(fileType, groups); - case ObjectType.Weapon: return HandleWeapon(fileType, groups); - case ObjectType.Map: return HandleMap(fileType, groups); - case ObjectType.Monster: return HandleMonster(fileType, groups); - case ObjectType.DemiHuman: return HandleDemiHuman(fileType, groups); - case ObjectType.Character: return HandleCustomization(fileType, groups); - case ObjectType.Icon: return HandleIcon(fileType, groups); - } - } - catch (Exception e) - { - PluginLog.Error($"Could not parse {path}:\n{e}"); - } - - return new GameObjectInfo - { - FileType = fileType, - ObjectType = objectType, - }; - } - - /// Get the key of a VFX symbol. - /// The lower-case key or an empty string if no match is found. - public string VfxToKey(string path) - { - var match = GamePaths.Vfx.Tmb().Match(path); - if (match.Success) - return match.Groups["key"].Value.ToLowerInvariant(); - - match = GamePaths.Vfx.Pap().Match(path); - return match.Success ? match.Groups["key"].Value.ToLowerInvariant() : string.Empty; - } - - /// Obtain the ObjectType from a given path. - public ObjectType PathToObjectType(string path) - { - if (path.Length == 0) - return ObjectType.Unknown; - - var folders = path.Split('/'); - if (folders.Length < 2) - return ObjectType.Unknown; - - return folders[0] switch - { - CharacterFolder => folders[1] switch - { - EquipmentFolder => ObjectType.Equipment, - AccessoryFolder => ObjectType.Accessory, - WeaponFolder => ObjectType.Weapon, - PlayerFolder => ObjectType.Character, - DemiHumanFolder => ObjectType.DemiHuman, - MonsterFolder => ObjectType.Monster, - CommonFolder => ObjectType.Character, - _ => ObjectType.Unknown, - }, - UiFolder => folders[1] switch - { - IconFolder => ObjectType.Icon, - LoadingFolder => ObjectType.LoadingScreen, - MapFolder => ObjectType.Map, - InterfaceFolder => ObjectType.Interface, - _ => ObjectType.Unknown, - }, - CommonFolder => folders[1] switch - { - FontFolder => ObjectType.Font, - _ => ObjectType.Unknown, - }, - HousingFolder => ObjectType.Housing, - WorldFolder1 => folders[1] switch - { - HousingFolder => ObjectType.Housing, - _ => ObjectType.World, - }, - WorldFolder2 => ObjectType.World, - VfxFolder => ObjectType.Vfx, - _ => ObjectType.Unknown, - }; - } - - private const string CharacterFolder = "chara"; - private const string EquipmentFolder = "equipment"; - private const string PlayerFolder = "human"; - private const string WeaponFolder = "weapon"; - private const string AccessoryFolder = "accessory"; - private const string DemiHumanFolder = "demihuman"; - private const string MonsterFolder = "monster"; - private const string CommonFolder = "common"; - private const string UiFolder = "ui"; - private const string IconFolder = "icon"; - private const string LoadingFolder = "loadingimage"; - private const string MapFolder = "map"; - private const string InterfaceFolder = "uld"; - private const string FontFolder = "font"; - private const string HousingFolder = "hou"; - private const string VfxFolder = "vfx"; - private const string WorldFolder1 = "bgcommon"; - private const string WorldFolder2 = "bg"; - - private (FileType, ObjectType, Match?) ParseGamePath(string path) - { - if (!Names.ExtensionToFileType.TryGetValue(Path.GetExtension(path), out var fileType)) - fileType = FileType.Unknown; - - var objectType = PathToObjectType(path); - - static Match TestCharacterTextures(string path) - { - var regexes = new Regex[] - { - GamePaths.Character.Tex.Regex(), - GamePaths.Character.Tex.FolderRegex(), - GamePaths.Character.Tex.SkinRegex(), - GamePaths.Character.Tex.CatchlightRegex(), - GamePaths.Character.Tex.DecalRegex(), - }; - foreach (var regex in regexes) - { - var match = regex.Match(path); - if (match.Success) - return match; - } - - return Match.Empty; - } - - var match = (fileType, objectType) switch - { - (FileType.Font, ObjectType.Font) => GamePaths.Font.Regex().Match(path), - (FileType.Imc, ObjectType.Weapon) => GamePaths.Weapon.Imc.Regex().Match(path), - (FileType.Imc, ObjectType.Monster) => GamePaths.Monster.Imc.Regex().Match(path), - (FileType.Imc, ObjectType.DemiHuman) => GamePaths.DemiHuman.Imc.Regex().Match(path), - (FileType.Imc, ObjectType.Equipment) => GamePaths.Equipment.Imc.Regex().Match(path), - (FileType.Imc, ObjectType.Accessory) => GamePaths.Accessory.Imc.Regex().Match(path), - (FileType.Model, ObjectType.Weapon) => GamePaths.Weapon.Mdl.Regex().Match(path), - (FileType.Model, ObjectType.Monster) => GamePaths.Monster.Mdl.Regex().Match(path), - (FileType.Model, ObjectType.DemiHuman) => GamePaths.DemiHuman.Mdl.Regex().Match(path), - (FileType.Model, ObjectType.Equipment) => GamePaths.Equipment.Mdl.Regex().Match(path), - (FileType.Model, ObjectType.Accessory) => GamePaths.Accessory.Mdl.Regex().Match(path), - (FileType.Model, ObjectType.Character) => GamePaths.Character.Mdl.Regex().Match(path), - (FileType.Material, ObjectType.Weapon) => GamePaths.Weapon.Mtrl.Regex().Match(path), - (FileType.Material, ObjectType.Monster) => GamePaths.Monster.Mtrl.Regex().Match(path), - (FileType.Material, ObjectType.DemiHuman) => GamePaths.DemiHuman.Mtrl.Regex().Match(path), - (FileType.Material, ObjectType.Equipment) => GamePaths.Equipment.Mtrl.Regex().Match(path), - (FileType.Material, ObjectType.Accessory) => GamePaths.Accessory.Mtrl.Regex().Match(path), - (FileType.Material, ObjectType.Character) => GamePaths.Character.Mtrl.Regex().Match(path), - (FileType.Texture, ObjectType.Weapon) => GamePaths.Weapon.Tex.Regex().Match(path), - (FileType.Texture, ObjectType.Monster) => GamePaths.Monster.Tex.Regex().Match(path), - (FileType.Texture, ObjectType.DemiHuman) => GamePaths.DemiHuman.Tex.Regex().Match(path), - (FileType.Texture, ObjectType.Equipment) => GamePaths.Equipment.Tex.Regex().Match(path), - (FileType.Texture, ObjectType.Accessory) => GamePaths.Accessory.Tex.Regex().Match(path), - (FileType.Texture, ObjectType.Character) => TestCharacterTextures(path), - (FileType.Texture, ObjectType.Icon) => GamePaths.Icon.Regex().Match(path), - (FileType.Texture, ObjectType.Map) => GamePaths.Map.Regex().Match(path), - _ => Match.Empty, - }; - - return (fileType, objectType, match.Success ? match : null); - } - - private static GameObjectInfo HandleEquipment(FileType fileType, GroupCollection groups) - { - var setId = ushort.Parse(groups["id"].Value); - if (fileType == FileType.Imc) - return GameObjectInfo.Equipment(fileType, setId); - - var gr = Names.GenderRaceFromCode(groups["race"].Value); - var slot = Names.SuffixToEquipSlot[groups["slot"].Value]; - if (fileType == FileType.Model) - return GameObjectInfo.Equipment(fileType, setId, gr, slot); - - var variant = byte.Parse(groups["variant"].Value); - return GameObjectInfo.Equipment(fileType, setId, gr, slot, variant); - } - - private static GameObjectInfo HandleWeapon(FileType fileType, GroupCollection groups) - { - var weaponId = ushort.Parse(groups["weapon"].Value); - var setId = ushort.Parse(groups["id"].Value); - if (fileType is FileType.Imc or FileType.Model) - return GameObjectInfo.Weapon(fileType, setId, weaponId); - - var variant = byte.Parse(groups["variant"].Value); - return GameObjectInfo.Weapon(fileType, setId, weaponId, variant); - } - - private static GameObjectInfo HandleMonster(FileType fileType, GroupCollection groups) - { - var monsterId = ushort.Parse(groups["monster"].Value); - var bodyId = ushort.Parse(groups["id"].Value); - if (fileType is FileType.Imc or FileType.Model) - return GameObjectInfo.Monster(fileType, monsterId, bodyId); - - var variant = byte.Parse(groups["variant"].Value); - return GameObjectInfo.Monster(fileType, monsterId, bodyId, variant); - } - - private static GameObjectInfo HandleDemiHuman(FileType fileType, GroupCollection groups) - { - var demiHumanId = ushort.Parse(groups["id"].Value); - var equipId = ushort.Parse(groups["equip"].Value); - if (fileType == FileType.Imc) - return GameObjectInfo.DemiHuman(fileType, demiHumanId, equipId); - - var slot = Names.SuffixToEquipSlot[groups["slot"].Value]; - if (fileType == FileType.Model) - return GameObjectInfo.DemiHuman(fileType, demiHumanId, equipId, slot); - - var variant = byte.Parse(groups["variant"].Value); - return GameObjectInfo.DemiHuman(fileType, demiHumanId, equipId, slot, variant); - } - - private static GameObjectInfo HandleCustomization(FileType fileType, GroupCollection groups) - { - if (groups["catchlight"].Success) - return GameObjectInfo.Customization(fileType, CustomizationType.Iris); - - if (groups["skin"].Success) - return GameObjectInfo.Customization(fileType, CustomizationType.Skin); - - var id = ushort.Parse(groups["id"].Value); - if (groups["location"].Success) - { - var tmpType = groups["location"].Value == "face" ? CustomizationType.DecalFace - : groups["location"].Value == "equip" ? CustomizationType.DecalEquip : CustomizationType.Unknown; - return GameObjectInfo.Customization(fileType, tmpType, id); - } - - var gr = Names.GenderRaceFromCode(groups["race"].Value); - var bodySlot = Names.StringToBodySlot[groups["type"].Value]; - var type = groups["slot"].Success - ? Names.SuffixToCustomizationType[groups["slot"].Value] - : CustomizationType.Skin; - if (fileType == FileType.Material) - { - var variant = groups["variant"].Success ? byte.Parse(groups["variant"].Value) : (byte)0; - return GameObjectInfo.Customization(fileType, type, id, gr, bodySlot, variant); - } - - return GameObjectInfo.Customization(fileType, type, id, gr, bodySlot); - } - - private static GameObjectInfo HandleIcon(FileType fileType, GroupCollection groups) - { - var hq = groups["hq"].Success; - var hr = groups["hr"].Success; - var id = uint.Parse(groups["id"].Value); - if (!groups["lang"].Success) - return GameObjectInfo.Icon(fileType, id, hq, hr); - - var language = groups["lang"].Value switch - { - "en" => Dalamud.ClientLanguage.English, - "ja" => Dalamud.ClientLanguage.Japanese, - "de" => Dalamud.ClientLanguage.German, - "fr" => Dalamud.ClientLanguage.French, - _ => Dalamud.ClientLanguage.English, - }; - return GameObjectInfo.Icon(fileType, id, hq, hr, language); - } - - private static GameObjectInfo HandleMap(FileType fileType, GroupCollection groups) - { - var map = Encoding.ASCII.GetBytes(groups["id"].Value); - var variant = byte.Parse(groups["variant"].Value); - if (groups["suffix"].Success) - { - var suffix = Encoding.ASCII.GetBytes(groups["suffix"].Value)[0]; - return GameObjectInfo.Map(fileType, map[0], map[1], map[2], map[3], variant, suffix); - } - - return GameObjectInfo.Map(fileType, map[0], map[1], map[2], map[3], variant); - } -} diff --git a/Penumbra.GameData/Data/GamePaths.cs b/Penumbra.GameData/Data/GamePaths.cs deleted file mode 100644 index 5df91600..00000000 --- a/Penumbra.GameData/Data/GamePaths.cs +++ /dev/null @@ -1,408 +0,0 @@ -using System.Text.RegularExpressions; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; - -namespace Penumbra.GameData.Data; - -public static partial class GamePaths -{ - [GeneratedRegex(@"c(?'racecode'\d{4})")] - public static partial Regex RaceCodeParser(); - - public static GenderRace ParseRaceCode(string path) - { - var match = RaceCodeParser().Match(path); - return match.Success - ? Names.GenderRaceFromCode(match.Groups["racecode"].Value) - : GenderRace.Unknown; - } - - public static partial class Monster - { - public static partial class Imc - { - [GeneratedRegex(@"chara/monster/m(?'monster'\d{4})/obj/body/b(?'id'\d{4})/b\k'id'\.imc")] - public static partial Regex Regex(); - - public static string Path(SetId monsterId, SetId bodyId) - => $"chara/monster/m{monsterId.Value:D4}/obj/body/b{bodyId.Value:D4}/b{bodyId.Value:D4}.imc"; - } - - public static partial class Mdl - { - [GeneratedRegex(@"chara/monster/m(?'monster'\d{4})/obj/body/b(?'id'\d{4})/model/m\k'monster'b\k'id'\.mdl")] - public static partial Regex Regex(); - - public static string Path(SetId monsterId, SetId bodyId) - => $"chara/monster/m{monsterId.Value:D4}/obj/body/b{bodyId.Value:D4}/model/m{monsterId.Value:D4}b{bodyId.Value:D4}.mdl"; - } - - public static partial class Mtrl - { - [GeneratedRegex( - @"chara/monster/m(?'monster'\d{4})/obj/body/b(?'id'\d{4})/material/v(?'variant'\d{4})/mt_m\k'monster'b\k'id'_[a-z]+\.mtrl")] - public static partial Regex Regex(); - - public static string Path(SetId monsterId, SetId bodyId, byte variant, string suffix) - => $"chara/monster/m{monsterId.Value:D4}/obj/body/b{bodyId.Value:D4}/material/v{variant:D4}/mt_m{monsterId.Value:D4}b{bodyId.Value:D4}_{suffix}.mtrl"; - } - - public static partial class Tex - { - [GeneratedRegex( - @"chara/monster/m(?'monster'\d{4})/obj/body/b(?'id'\d{4})/texture/v(?'variant'\d{2})_m\k'monster'b\k'id'(_[a-z])?_[a-z]\.tex")] - public static partial Regex Regex(); - - public static string Path(SetId monsterId, SetId bodyId, byte variant, char suffix1, char suffix2 = '\0') - => $"chara/monster/m{monsterId.Value:D4}/obj/body/b{bodyId.Value:D4}/texture/v{variant:D2}_m{monsterId.Value:D4}b{bodyId.Value:D4}{(suffix2 != '\0' ? $"_{suffix2}" : string.Empty)}_{suffix1}.tex"; - } - - public static partial class Sklb - { - public static string Path(SetId monsterId) - => $"chara/monster/m{monsterId.Value:D4}/skeleton/base/b0001/skl_m{monsterId.Value:D4}b0001.sklb"; - } - - public static partial class Skp - { - public static string Path(SetId monsterId) - => $"chara/monster/m{monsterId.Value:D4}/skeleton/base/b0001/skl_m{monsterId.Value:D4}b0001.skp"; - } - - public static partial class Eid - { - public static string Path(SetId monsterId) - => $"chara/monster/m{monsterId.Value:D4}/skeleton/base/b0001/eid_m{monsterId.Value:D4}b0001.eid"; - } - } - - public static partial class Weapon - { - public static partial class Imc - { - [GeneratedRegex(@"chara/weapon/w(?'id'\d{4})/obj/body/b(?'weapon'\d{4})/b\k'weapon'\.imc")] - public static partial Regex Regex(); - - public static string Path(SetId weaponId, SetId bodyId) - => $"chara/weapon/w{weaponId.Value:D4}/obj/body/b{bodyId.Value:D4}/b{bodyId.Value:D4}.imc"; - } - - public static partial class Mdl - { - [GeneratedRegex(@"chara/weapon/w(?'id'\d{4})/obj/body/b(?'weapon'\d{4})/model/w\k'id'b\k'weapon'\.mdl")] - public static partial Regex Regex(); - - public static string Path(SetId weaponId, SetId bodyId) - => $"chara/weapon/w{weaponId.Value:D4}/obj/body/b{bodyId.Value:D4}/model/w{weaponId.Value:D4}b{bodyId.Value:D4}.mdl"; - } - - public static partial class Mtrl - { - [GeneratedRegex( - @"chara/weapon/w(?'id'\d{4})/obj/body/b(?'weapon'\d{4})/material/v(?'variant'\d{4})/mt_w\k'id'b\k'weapon'_[a-z]+\.mtrl")] - public static partial Regex Regex(); - - public static string Path(SetId weaponId, SetId bodyId, byte variant, string suffix) - => $"chara/weapon/w{weaponId.Value:D4}/obj/body/b{bodyId.Value:D4}/material/v{variant:D4}/mt_w{weaponId.Value:D4}b{bodyId.Value:D4}_{suffix}.mtrl"; - } - - public static partial class Tex - { - [GeneratedRegex( - @"chara/weapon/w(?'id'\d{4})/obj/body/b(?'weapon'\d{4})/texture/v(?'variant'\d{2})_w\k'id'b\k'weapon'(_[a-z])?_[a-z]\.tex")] - public static partial Regex Regex(); - - public static string Path(SetId weaponId, SetId bodyId, byte variant, char suffix1, char suffix2 = '\0') - => $"chara/weapon/w{weaponId.Value:D4}/obj/body/b{bodyId.Value:D4}/texture/v{variant:D2}_w{weaponId.Value:D4}b{bodyId.Value:D4}{(suffix2 != '\0' ? $"_{suffix2}" : string.Empty)}_{suffix1}.tex"; - } - } - - public static partial class DemiHuman - { - public static partial class Imc - { - [GeneratedRegex(@"chara/demihuman/d(?'id'\d{4})/obj/equipment/e(?'equip'\d{4})/e\k'equip'\.imc")] - public static partial Regex Regex(); - - public static string Path(SetId demiId, SetId equipId) - => $"chara/demihuman/d{demiId.Value:D4}/obj/equipment/e{equipId.Value:D4}/e{equipId.Value:D4}.imc"; - } - - public static partial class Mdl - { - [GeneratedRegex(@"chara/demihuman/d(?'id'\d{4})/obj/equipment/e(?'equip'\d{4})/model/d\k'id'e\k'equip'_(?'slot'[a-z]{3})\.mdl")] - public static partial Regex Regex(); - - public static string Path(SetId demiId, SetId equipId, EquipSlot slot) - => $"chara/demihuman/d{demiId.Value:D4}/obj/equipment/e{equipId.Value:D4}/model/d{demiId.Value:D4}e{equipId.Value:D4}_{slot.ToSuffix()}.mdl"; - } - - public static partial class Mtrl - { - [GeneratedRegex( - @"chara/demihuman/d(?'id'\d{4})/obj/equipment/e(?'equip'\d{4})/material/v(?'variant'\d{4})/mt_d\k'id'e\k'equip'_(?'slot'[a-z]{3})_[a-z]+\.mtrl")] - public static partial Regex Regex(); - - public static string Path(SetId demiId, SetId equipId, EquipSlot slot, byte variant, string suffix) - => $"chara/demihuman/d{demiId.Value:D4}/obj/equipment/e{equipId.Value:D4}/material/v{variant:D4}/mt_d{demiId.Value:D4}e{equipId.Value:D4}_{slot.ToSuffix()}_{suffix}.mtrl"; - } - - public static partial class Tex - { - [GeneratedRegex( - @"chara/demihuman/d(?'id'\d{4})/obj/equipment/e(?'equip'\d{4})/texture/v(?'variant'\d{2})_d\k'id'e\k'equip'_(?'slot'[a-z]{3})(_[a-z])?_[a-z]\.tex")] - public static partial Regex Regex(); - - public static string Path(SetId demiId, SetId equipId, EquipSlot slot, byte variant, char suffix1, char suffix2 = '\0') - => $"chara/demihuman/d{demiId.Value:D4}/obj/equipment/e{equipId.Value:D4}/texture/v{variant:D2}_d{demiId.Value:D4}e{equipId.Value:D4}_{slot.ToSuffix()}{(suffix2 != '\0' ? $"_{suffix2}" : string.Empty)}_{suffix1}.tex"; - } - } - - public static partial class Equipment - { - public static partial class Imc - { - [GeneratedRegex(@"chara/equipment/e(?'id'\d{4})/e\k'id'\.imc")] - public static partial Regex Regex(); - - public static string Path(SetId equipId) - => $"chara/equipment/e{equipId.Value:D4}/e{equipId.Value:D4}.imc"; - } - - public static partial class Mdl - { - [GeneratedRegex(@"chara/equipment/e(?'id'\d{4})/model/c(?'race'\d{4})e\k'id'_(?'slot'[a-z]{3})\.mdl")] - public static partial Regex Regex(); - - public static string Path(SetId equipId, GenderRace raceCode, EquipSlot slot) - => $"chara/equipment/e{equipId.Value:D4}/model/c{raceCode.ToRaceCode()}e{equipId.Value:D4}_{slot.ToSuffix()}.mdl"; - } - - public static partial class Mtrl - { - [GeneratedRegex( - @"chara/equipment/e(?'id'\d{4})/material/v(?'variant'\d{4})/mt_c(?'race'\d{4})e\k'id'_(?'slot'[a-z]{3})_[a-z]+\.mtrl")] - public static partial Regex Regex(); - - public static string Path(SetId equipId, GenderRace raceCode, EquipSlot slot, byte variant, string suffix) - => $"{FolderPath(equipId, variant)}/mt_c{raceCode.ToRaceCode()}e{equipId.Value:D4}_{slot.ToSuffix()}_{suffix}.mtrl"; - - public static string FolderPath(SetId equipId, byte variant) - => $"chara/equipment/e{equipId.Value:D4}/material/v{variant:D4}"; - } - - public static partial class Tex - { - [GeneratedRegex( - @"chara/equipment/e(?'id'\d{4})/texture/v(?'variant'\d{2})_c(?'race'\d{4})e\k'id'_(?'slot'[a-z]{3})(_[a-z])?_[a-z]\.tex")] - public static partial Regex Regex(); - - public static string Path(SetId equipId, GenderRace raceCode, EquipSlot slot, byte variant, char suffix1, char suffix2 = '\0') - => $"chara/equipment/e{equipId.Value:D4}/texture/v{variant:D2}_c{raceCode.ToRaceCode()}e{equipId.Value:D4}_{slot.ToSuffix()}{(suffix2 != '\0' ? $"_{suffix2}" : string.Empty)}_{suffix1}.tex"; - } - - public static partial class Avfx - { - [GeneratedRegex(@"chara/equipment/e(?'id'\d{4})/vfx/eff/ve(?'variant'\d{4})\.avfx")] - public static partial Regex Regex(); - - public static string Path(SetId equipId, byte effectId) - => $"chara/equipment/e{equipId.Value:D4}/vfx/eff/ve{effectId:D4}.avfx"; - } - - public static partial class Decal - { - [GeneratedRegex(@"chara/common/texture/decal_equip/-decal_(?'decalId'\d{3})\.tex")] - public static partial Regex Regex(); - - public static string Path(byte decalId) - => $"chara/common/texture/decal_equip/-decal_{decalId:D3}.tex"; - } - } - - public static partial class Accessory - { - public static partial class Imc - { - [GeneratedRegex(@"chara/accessory/a(?'id'\d{4})/a\k'id'\.imc")] - public static partial Regex Regex(); - - public static string Path(SetId accessoryId) - => $"chara/accessory/a{accessoryId.Value:D4}/a{accessoryId.Value:D4}.imc"; - } - - public static partial class Mdl - { - [GeneratedRegex(@"chara/accessory/a(?'id'\d{4})/model/c(?'race'\d{4})a\k'id'_(?'slot'[a-z]{3})\.mdl")] - public static partial Regex Regex(); - - public static string Path(SetId accessoryId, GenderRace raceCode, EquipSlot slot) - => $"chara/accessory/a{accessoryId.Value:D4}/model/c{raceCode.ToRaceCode()}a{accessoryId.Value:D4}_{slot.ToSuffix()}.mdl"; - } - - public static partial class Mtrl - { - [GeneratedRegex( - @"chara/accessory/a(?'id'\d{4})/material/v(?'variant'\d{4})/mt_c(?'race'\d{4})a\k'id'_(?'slot'[a-z]{3})_[a-z]+\.mtrl")] - public static partial Regex Regex(); - - public static string Path(SetId accessoryId, GenderRace raceCode, EquipSlot slot, byte variant, string suffix) - => $"{FolderPath(accessoryId, variant)}/c{raceCode.ToRaceCode()}a{accessoryId.Value:D4}_{slot.ToSuffix()}_{suffix}.mtrl"; - - public static string FolderPath(SetId accessoryId, byte variant) - => $"chara/accessory/a{accessoryId.Value:D4}/material/v{variant:D4}"; - } - - public static partial class Tex - { - [GeneratedRegex( - @"chara/accessory/a(?'id'\d{4})/texture/v(?'variant'\d{2})_c(?'race'\d{4})a\k'id'_(?'slot'[a-z]{3})(_[a-z])?_[a-z]\.tex")] - public static partial Regex Regex(); - - public static string Path(SetId accessoryId, GenderRace raceCode, EquipSlot slot, byte variant, char suffix1, char suffix2 = '\0') - => $"chara/accessory/a{accessoryId.Value:D4}/texture/v{variant:D2}_c{raceCode.ToRaceCode()}a{accessoryId.Value:D4}_{slot.ToSuffix()}{(suffix2 != '\0' ? $"_{suffix2}" : string.Empty)}_{suffix1}.tex"; - } - } - - public static partial class Skeleton - { - public static partial class Phyb - { - public static string Path(GenderRace raceCode, string slot, SetId slotId) - => $"chara/human/c{raceCode.ToRaceCode()}/skeleton/{slot}/{slot[0]}{slotId.Value:D4}/phy_c{raceCode.ToRaceCode()}{slot[0]}{slotId.Value:D4}.phyb"; - } - - public static partial class Sklb - { - public static string Path(GenderRace raceCode, string slot, SetId slotId) - => $"chara/human/c{raceCode.ToRaceCode()}/skeleton/{slot}/{slot[0]}{slotId.Value:D4}/skl_c{raceCode.ToRaceCode()}{slot[0]}{slotId.Value:D4}.sklb"; - } - } - - public static partial class Character - { - public static partial class Mdl - { - [GeneratedRegex( - @"chara/human/c(?'race'\d{4})/obj/(?'type'[a-z]+)/(?'typeabr'[a-z])(?'id'\d{4})/model/c\k'race'\k'typeabr'\k'id'_(?'slot'[a-z]{3})\.mdl")] - public static partial Regex Regex(); - - public static string Path(GenderRace raceCode, BodySlot slot, SetId slotId, CustomizationType type) - => $"chara/human/c{raceCode.ToRaceCode()}/obj/{slot.ToSuffix()}/{slot.ToAbbreviation()}{slotId.Value:D4}/model/c{raceCode.ToRaceCode()}{slot.ToAbbreviation()}{slotId.Value:D4}_{type.ToSuffix()}.mdl"; - } - - public static partial class Mtrl - { - [GeneratedRegex( - @"chara/human/c(?'race'\d{4})/obj/(?'type'[a-z]+)/(?'typeabr'[a-z])(?'id'\d{4})/material(/v(?'variant'\d{4}))?/mt_c\k'race'\k'typeabr'\k'id'(_(?'slot'[a-z]{3}))?_[a-z]+\.mtrl")] - public static partial Regex Regex(); - - public static string FolderPath(GenderRace raceCode, BodySlot slot, SetId slotId, byte variant = byte.MaxValue) - => $"chara/human/c{raceCode.ToRaceCode()}/obj/{slot.ToSuffix()}/{slot.ToAbbreviation()}{slotId.Value:D4}/material{(variant != byte.MaxValue ? $"/v{variant:D4}" : string.Empty)}"; - - public static string HairPath(GenderRace raceCode, SetId slotId, string fileName, out GenderRace actualGr) - { - actualGr = MaterialHandling.GetGameGenderRace(raceCode, slotId); - var folder = FolderPath(actualGr, BodySlot.Hair, slotId, 1); - return actualGr == raceCode - ? $"{folder}{fileName}" - : $"{folder}/mt_c{actualGr.ToRaceCode()}{fileName[9..]}"; - } - - public static string TailPath(GenderRace raceCode, SetId slotId, string fileName, byte variant, out SetId actualSlotId) - { - switch (raceCode) - { - case GenderRace.HrothgarMale: - case GenderRace.HrothgarFemale: - case GenderRace.HrothgarMaleNpc: - case GenderRace.HrothgarFemaleNpc: - var folder = FolderPath(raceCode, BodySlot.Tail, 1, variant == byte.MaxValue ? (byte)1 : variant); - actualSlotId = 1; - return $"{folder}{fileName}"; - default: - actualSlotId = slotId; - return $"{FolderPath(raceCode, BodySlot.Tail, slotId, variant)}{fileName}"; - } - } - - public static string Path(GenderRace raceCode, BodySlot slot, SetId slotId, string fileName, - out GenderRace actualGr, out SetId actualSlotId, byte variant = byte.MaxValue) - { - switch (slot) - { - case BodySlot.Hair: - actualSlotId = slotId; - return HairPath(raceCode, slotId, fileName, out actualGr); - case BodySlot.Tail: - actualGr = raceCode; - return TailPath(raceCode, slotId, fileName, variant, out actualSlotId); - default: - actualSlotId = slotId; - actualGr = raceCode; - return $"{FolderPath(raceCode, slot, slotId, variant)}{fileName}"; - } - } - } - - public static partial class Tex - { - [GeneratedRegex( - @"chara/human/c(?'race'\d{4})/obj/(?'type'[a-z]+)/(?'typeabr'[a-z])(?'id'\d{4})/texture/(?'minus'(--)?)(v(?'variant'\d{2})_)?c\k'race'\k'typeabr'\k'id'(_(?'slot'[a-z]{3}))?(_[a-z])?_[a-z]\.tex")] - public static partial Regex Regex(); - - public static string Path(GenderRace raceCode, BodySlot slot, SetId slotId, char suffix1, bool minus = false, - CustomizationType type = CustomizationType.Unknown, byte variant = byte.MaxValue, char suffix2 = '\0') - => $"chara/human/c{raceCode.ToRaceCode()}/obj/{slot.ToSuffix()}/{slot.ToAbbreviation()}{slotId.Value:D4}/texture/" - + (minus ? "--" : string.Empty) - + (variant != byte.MaxValue ? $"v{variant:D2}_" : string.Empty) - + $"c{raceCode.ToRaceCode()}{slot.ToAbbreviation()}{slotId.Value:D4}{(type != CustomizationType.Unknown ? $"_{type.ToSuffix()}" : string.Empty)}{(suffix2 != '\0' ? $"_{suffix2}" : string.Empty)}_{suffix1}.tex"; - - - [GeneratedRegex(@"chara/common/texture/(?'catchlight'catchlight)(.*)\.tex")] - public static partial Regex CatchlightRegex(); - - [GeneratedRegex(@"chara/common/texture/skin(?'skin'.*)\.tex")] - public static partial Regex SkinRegex(); - - [GeneratedRegex(@"chara/common/texture/decal_(?'location'[a-z]+)/[-_]?decal_(?'id'\d+).tex")] - public static partial Regex DecalRegex(); - - [GeneratedRegex(@"chara/human/c(?'race'\d{4})/obj/(?'type'[a-z]+)/(?'typeabr'[a-z])(?'id'\d{4})/texture")] - public static partial Regex FolderRegex(); - } - } - - public static partial class Icon - { - [GeneratedRegex(@"ui/icon/(?'group'\d*)(/(?'lang'[a-z]{2}))?(/(?'hq'hq))?/(?'id'\d*)(?'hr'_hr1)?\.tex")] - public static partial Regex Regex(); - } - - public static partial class Map - { - [GeneratedRegex(@"ui/map/(?'id'[a-z0-9]{4})/(?'variant'\d{2})/\k'id'\k'variant'(?'suffix'[a-z])?(_[a-z])?\.tex")] - public static partial Regex Regex(); - } - - public static partial class Font - { - [GeneratedRegex(@"common/font/(?'fontname'.*)_(?'id'\d\d)(_lobby)?\.fdt")] - public static partial Regex Regex(); - } - - public static partial class Vfx - { - [GeneratedRegex(@"chara[\/]action[\/](?'key'[^\s]+?)\.tmb", RegexOptions.IgnoreCase)] - public static partial Regex Tmb(); - - [GeneratedRegex(@"chara[\/]human[\/]c0101[\/]animation[\/]a0001[\/][^\s]+?[\/](?'key'[^\s]+?)\.pap", RegexOptions.IgnoreCase)] - public static partial Regex Pap(); - } - - public static partial class Shader - { - public static string ShpkPath(string name) - => $"shader/sm5/shpk/{name}"; - } -} diff --git a/Penumbra.GameData/Data/HumanModelList.cs b/Penumbra.GameData/Data/HumanModelList.cs deleted file mode 100644 index 719c7bbb..00000000 --- a/Penumbra.GameData/Data/HumanModelList.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using System.Linq; -using Dalamud; -using Dalamud.Data; -using Dalamud.Plugin; -using FFXIVClientStructs.FFXIV.Client.Graphics.Scene; -using Lumina.Excel.GeneratedSheets; - -namespace Penumbra.GameData.Data; - -public sealed class HumanModelList : DataSharer -{ - public const string Tag = "HumanModels"; - public const int CurrentVersion = 2; - - private readonly BitArray _humanModels; - - public HumanModelList(DalamudPluginInterface pluginInterface, DataManager gameData) - : base(pluginInterface, ClientLanguage.English, CurrentVersion) - { - _humanModels = TryCatchData(Tag, () => GetValidHumanModels(gameData)); - } - - public bool IsHuman(uint modelId) - => modelId < _humanModels.Count && _humanModels[(int)modelId]; - - public int Count - => _humanModels.Count; - - protected override void DisposeInternal() - { - DisposeTag(Tag); - } - - /// - /// Go through all ModelChara rows and return a bitfield of those that resolve to human models. - /// - private static BitArray GetValidHumanModels(DataManager gameData) - { - var sheet = gameData.GetExcelSheet()!; - var ret = new BitArray((int)sheet.RowCount, false); - foreach (var (_, idx) in sheet.Select((m, i) => (m, i)).Where(p => p.m.Type == (byte)CharacterBase.ModelType.Human)) - ret[idx] = true; - - return ret; - } -} diff --git a/Penumbra.GameData/Data/ItemData.cs b/Penumbra.GameData/Data/ItemData.cs deleted file mode 100644 index c9f69694..00000000 --- a/Penumbra.GameData/Data/ItemData.cs +++ /dev/null @@ -1,189 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using Dalamud; -using Dalamud.Data; -using Dalamud.Plugin; -using Lumina.Excel.GeneratedSheets; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; -using PseudoEquipItem = System.ValueTuple; - -namespace Penumbra.GameData.Data; - -public sealed class ItemData : DataSharer, IReadOnlyDictionary> -{ - private readonly IReadOnlyDictionary _mainItems; - private readonly IReadOnlyDictionary _offItems; - private readonly IReadOnlyDictionary _gauntlets; - private readonly IReadOnlyList> _byType; - - private static IReadOnlyList> CreateItems(DataManager dataManager, ClientLanguage language) - { - var tmp = Enum.GetValues().Select(_ => new List(1024)).ToArray(); - - var itemSheet = dataManager.GetExcelSheet(language)!; - foreach (var item in itemSheet.Where(i => i.Name.RawData.Length > 1)) - { - var type = item.ToEquipType(); - if (type.IsWeapon() || type.IsTool()) - { - var mh = EquipItem.FromMainhand(item); - if (item.ModelMain != 0) - tmp[(int)type].Add(mh); - if (item.ModelSub != 0) - { - if (type is FullEquipType.Fists && item.ModelSub < 0x100000000) - { - tmp[(int)FullEquipType.Hands].Add(new EquipItem(mh.Name + $" (Gauntlets)", mh.Id, mh.IconId, (SetId)item.ModelSub, 0, - (byte)(item.ModelSub >> 16), FullEquipType.Hands)); - tmp[(int)FullEquipType.FistsOff].Add(new EquipItem(mh.Name + FullEquipType.FistsOff.OffhandTypeSuffix(), mh.Id, - mh.IconId, (SetId)(mh.ModelId.Value + 50), mh.WeaponType, mh.Variant, FullEquipType.FistsOff)); - } - else - { - tmp[(int)type.ValidOffhand()].Add(EquipItem.FromOffhand(item)); - } - } - } - else if (type != FullEquipType.Unknown) - { - tmp[(int)type].Add(EquipItem.FromArmor(item)); - } - } - - var ret = new IReadOnlyList[tmp.Length]; - ret[0] = Array.Empty(); - for (var i = 1; i < tmp.Length; ++i) - ret[i] = tmp[i].OrderBy(item => item.Name).Select(s => (PseudoEquipItem)s).ToArray(); - - return ret; - } - - private static Tuple, IReadOnlyDictionary> CreateMainItems( - IReadOnlyList> items) - { - var dict = new Dictionary(1024 * 4); - foreach (var fistWeapon in items[(int)FullEquipType.Fists]) - dict.TryAdd((uint)fistWeapon.Item2, fistWeapon); - - var gauntlets = items[(int)FullEquipType.Hands].Where(g => dict.ContainsKey((uint)g.Item2)).ToDictionary(g => (uint)g.Item2, g => g); - gauntlets.TrimExcess(); - - foreach (var type in Enum.GetValues().Where(v => !FullEquipTypeExtensions.OffhandTypes.Contains(v))) - { - var list = items[(int)type]; - foreach (var item in list) - dict.TryAdd((uint)item.Item2, item); - } - - dict.TrimExcess(); - return new Tuple, - IReadOnlyDictionary>(dict, gauntlets); - } - - private static IReadOnlyDictionary CreateOffItems(IReadOnlyList> items) - { - var dict = new Dictionary(128); - foreach (var type in FullEquipTypeExtensions.OffhandTypes) - { - var list = items[(int)type]; - foreach (var item in list) - dict.TryAdd((uint)item.Item2, item); - } - - dict.TrimExcess(); - return dict; - } - - public ItemData(DalamudPluginInterface pluginInterface, DataManager dataManager, ClientLanguage language) - : base(pluginInterface, language, 4) - { - _byType = TryCatchData("ItemList", () => CreateItems(dataManager, language)); - (_mainItems, _gauntlets) = TryCatchData("ItemDictMain", () => CreateMainItems(_byType)); - _offItems = TryCatchData("ItemDictOff", () => CreateOffItems(_byType)); - } - - protected override void DisposeInternal() - { - DisposeTag("ItemList"); - DisposeTag("ItemDictMain"); - DisposeTag("ItemDictOff"); - } - - public IEnumerator>> GetEnumerator() - { - for (var i = 1; i < _byType.Count; ++i) - yield return new KeyValuePair>((FullEquipType)i, new EquipItemList(_byType[i])); - } - - IEnumerator IEnumerable.GetEnumerator() - => GetEnumerator(); - - public int Count - => _byType.Count - 1; - - public bool ContainsKey(FullEquipType key) - => (int)key < _byType.Count && key != FullEquipType.Unknown; - - public bool TryGetValue(FullEquipType key, out IReadOnlyList value) - { - if (ContainsKey(key)) - { - value = new EquipItemList(_byType[(int)key]); - return true; - } - - value = Array.Empty(); - return false; - } - - public IReadOnlyList this[FullEquipType key] - => TryGetValue(key, out var ret) ? ret : throw new IndexOutOfRangeException(); - - public IEnumerable<(uint, EquipItem)> AllItems(bool main) - => (main ? _mainItems : _offItems).Select(i => (i.Key, (EquipItem)i.Value)); - - public int TotalItemCount(bool main) - => main ? _mainItems.Count : _offItems.Count; - - public bool TryGetValue(uint key, EquipSlot slot, out EquipItem value) - { - var dict = slot is EquipSlot.OffHand ? _offItems : _mainItems; - if (slot is EquipSlot.Hands && _gauntlets.TryGetValue(key, out var v) || dict.TryGetValue(key, out v)) - { - value = v; - return true; - } - - value = default; - return false; - } - - public IEnumerable Keys - => Enum.GetValues().Skip(1); - - public IEnumerable> Values - => _byType.Skip(1).Select(l => (IReadOnlyList)new EquipItemList(l)); - - private readonly struct EquipItemList : IReadOnlyList - { - private readonly IReadOnlyList _items; - - public EquipItemList(IReadOnlyList items) - => _items = items; - - public IEnumerator GetEnumerator() - => _items.Select(i => (EquipItem)i).GetEnumerator(); - - IEnumerator IEnumerable.GetEnumerator() - => GetEnumerator(); - - public int Count - => _items.Count; - - public EquipItem this[int index] - => _items[index]; - } -} diff --git a/Penumbra.GameData/Data/KeyList.cs b/Penumbra.GameData/Data/KeyList.cs deleted file mode 100644 index a6109674..00000000 --- a/Penumbra.GameData/Data/KeyList.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Dalamud; -using Dalamud.Plugin; - -namespace Penumbra.GameData.Data; - -/// -/// A list sorting objects based on a key which then allows efficiently finding all objects between a pair of keys via binary search. -/// -public abstract class KeyList -{ - private readonly List<(ulong Key, T Data)> _list; - - public IReadOnlyList<(ulong Key, T Data)> List - => _list; - - /// - /// Iterate over all objects between the given minimal and maximal keys (inclusive). - /// - protected IEnumerable Between(ulong minKey, ulong maxKey) - { - var (minIdx, maxIdx) = GetMinMax(minKey, maxKey); - if (minIdx < 0) - yield break; - - for (var i = minIdx; i <= maxIdx; ++i) - yield return _list[i].Data; - } - - private (int MinIdx, int MaxIdx) GetMinMax(ulong minKey, ulong maxKey) - { - var idx = _list.BinarySearch((minKey, default!), ListComparer); - var minIdx = idx; - if (minIdx < 0) - { - minIdx = ~minIdx; - if (minIdx == _list.Count || _list[minIdx].Key > maxKey) - return (-1, -1); - - idx = minIdx; - } - else - { - while (minIdx > 0 && _list[minIdx - 1].Key >= minKey) - --minIdx; - } - - if (_list[minIdx].Key < minKey || _list[minIdx].Key > maxKey) - return (-1, -1); - - - var maxIdx = _list.BinarySearch(idx, _list.Count - idx, (maxKey, default!), ListComparer); - if (maxIdx < 0) - { - maxIdx = ~maxIdx; - return maxIdx > minIdx ? (minIdx, maxIdx - 1) : (-1, -1); - } - - while (maxIdx < _list.Count - 1 && _list[maxIdx + 1].Key <= maxKey) - ++maxIdx; - - if (_list[maxIdx].Key < minKey || _list[maxIdx].Key > maxKey) - return (-1, -1); - - return (minIdx, maxIdx); - } - - /// - /// The function turning an object to (potentially multiple) keys. Only used during construction. - /// - protected abstract IEnumerable ToKeys(T data); - - /// - /// Whether a returned key is valid. Only used during construction. - /// - protected abstract bool ValidKey(ulong key); - - /// - /// How multiple items with the same key should be sorted. - /// - protected abstract int ValueKeySelector(T data); - - protected KeyList(DalamudPluginInterface pi, string tag, ClientLanguage language, int version, IEnumerable data) - { - _list = DataSharer.TryCatchData(pi, tag, language, version, - () => data.SelectMany(d => ToKeys(d).Select(k => (k, d))) - .Where(p => ValidKey(p.k)) - .OrderBy(p => p.k) - .ThenBy(p => ValueKeySelector(p.d)) - .ToList()); - } - - private class Comparer : IComparer<(ulong, T)> - { - public int Compare((ulong, T) x, (ulong, T) y) - => x.Item1.CompareTo(y.Item1); - } - - private static readonly Comparer ListComparer = new(); -} diff --git a/Penumbra.GameData/Data/MaterialHandling.cs b/Penumbra.GameData/Data/MaterialHandling.cs deleted file mode 100644 index ef336a9d..00000000 --- a/Penumbra.GameData/Data/MaterialHandling.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; - -namespace Penumbra.GameData.Data; - -public static class MaterialHandling -{ - public static GenderRace GetGameGenderRace(GenderRace actualGr, SetId hairId) - { - // Hrothgar do not share hairstyles. - if (actualGr is GenderRace.HrothgarFemale or GenderRace.HrothgarMale) - return actualGr; - - // Some hairstyles are miqo'te specific but otherwise shared. - if (hairId.Value is >= 101 and <= 115) - { - if (actualGr is GenderRace.MiqoteFemale or GenderRace.MiqoteMale) - return actualGr; - - return actualGr.Split().Item1 == Gender.Female ? GenderRace.MidlanderFemale : GenderRace.MidlanderMale; - } - - // All hairstyles above 116 are shared except for Hrothgar - if (hairId.Value is >= 116 and <= 200) - return actualGr.Split().Item1 == Gender.Female ? GenderRace.MidlanderFemale : GenderRace.MidlanderMale; - - return actualGr; - } - - public static bool IsSpecialCase(GenderRace gr, SetId hairId) - => gr is GenderRace.MidlanderMale or GenderRace.MidlanderFemale && hairId.Value is >= 101 and <= 200; -} diff --git a/Penumbra.GameData/Data/ModelIdentificationList.cs b/Penumbra.GameData/Data/ModelIdentificationList.cs deleted file mode 100644 index e1179898..00000000 --- a/Penumbra.GameData/Data/ModelIdentificationList.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; -using Dalamud; -using Dalamud.Data; -using Dalamud.Plugin; -using FFXIVClientStructs.FFXIV.Client.Graphics.Scene; -using Lumina.Excel.GeneratedSheets; -using Penumbra.GameData.Structs; - -namespace Penumbra.GameData.Data; - -internal sealed class ModelIdentificationList : KeyList -{ - private const string Tag = "ModelIdentification"; - - public ModelIdentificationList(DalamudPluginInterface pi, ClientLanguage language, DataManager gameData) - : base(pi, Tag, language, ObjectIdentification.IdentificationVersion, CreateModelList(gameData, language)) - { } - - public IEnumerable Between(CharacterBase.ModelType type, SetId modelId, byte modelBase = 0, byte variant = 0) - { - if (modelBase == 0) - return Between(ToKey(type, modelId, 0, 0), ToKey(type, modelId, 0xFF, 0xFF)); - if (variant == 0) - return Between(ToKey(type, modelId, modelBase, 0), ToKey(type, modelId, modelBase, 0xFF)); - - return Between(ToKey(type, modelId, modelBase, variant), ToKey(type, modelId, modelBase, variant)); - } - - public void Dispose(DalamudPluginInterface pi, ClientLanguage language) - => DataSharer.DisposeTag(pi, Tag, language, ObjectIdentification.IdentificationVersion); - - - public static ulong ToKey(CharacterBase.ModelType type, SetId model, byte modelBase, byte variant) - => ((ulong)type << 32) | ((ulong)model << 16) | ((ulong)modelBase << 8) | variant; - - private static ulong ToKey(ModelChara row) - => ToKey((CharacterBase.ModelType)row.Type, row.Model, row.Base, row.Variant); - - protected override IEnumerable ToKeys(ModelChara row) - { - yield return ToKey(row); - } - - protected override bool ValidKey(ulong key) - => key != 0; - - protected override int ValueKeySelector(ModelChara data) - => (int)data.RowId; - - private static IEnumerable CreateModelList(DataManager gameData, ClientLanguage language) - => gameData.GetExcelSheet(language)!; -} diff --git a/Penumbra.GameData/Data/ObjectIdentification.cs b/Penumbra.GameData/Data/ObjectIdentification.cs deleted file mode 100644 index 4aa766a1..00000000 --- a/Penumbra.GameData/Data/ObjectIdentification.cs +++ /dev/null @@ -1,331 +0,0 @@ -using System; -using System.Collections.Concurrent; -using Dalamud; -using Dalamud.Data; -using Lumina.Excel.GeneratedSheets; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Dalamud.Game.ClientState.Objects.Enums; -using Dalamud.Plugin; -using Dalamud.Utility; -using FFXIVClientStructs.FFXIV.Client.Graphics.Scene; -using Penumbra.GameData.Actors; -using Action = Lumina.Excel.GeneratedSheets.Action; -using ObjectType = Penumbra.GameData.Enums.ObjectType; - -namespace Penumbra.GameData.Data; - -internal sealed class ObjectIdentification : DataSharer, IObjectIdentifier -{ - public const int IdentificationVersion = 3; - - public IGamePathParser GamePathParser { get; } = new GamePathParser(); - public readonly IReadOnlyList> BnpcNames; - public readonly IReadOnlyList> ModelCharaToObjects; - public readonly IReadOnlyDictionary> Actions; - private readonly ActorManager.ActorManagerData _actorData; - - private readonly EquipmentIdentificationList _equipment; - private readonly WeaponIdentificationList _weapons; - private readonly ModelIdentificationList _modelIdentifierToModelChara; - - public ObjectIdentification(DalamudPluginInterface pluginInterface, DataManager dataManager, ItemData itemData, ClientLanguage language) - : base(pluginInterface, language, IdentificationVersion) - { - _actorData = new ActorManager.ActorManagerData(pluginInterface, dataManager, language); - _equipment = new EquipmentIdentificationList(pluginInterface, language, itemData); - _weapons = new WeaponIdentificationList(pluginInterface, language, itemData); - Actions = TryCatchData("Actions", () => CreateActionList(dataManager)); - - _modelIdentifierToModelChara = new ModelIdentificationList(pluginInterface, language, dataManager); - BnpcNames = TryCatchData("BNpcNames", NpcNames.CreateNames); - ModelCharaToObjects = TryCatchData("ModelObjects", () => CreateModelObjects(_actorData, dataManager, language)); - } - - public void Identify(IDictionary set, string path) - { - if (path.EndsWith(".pap", StringComparison.OrdinalIgnoreCase) || path.EndsWith(".tmb", StringComparison.OrdinalIgnoreCase)) - if (IdentifyVfx(set, path)) - return; - - var info = GamePathParser.GetFileInfo(path); - IdentifyParsed(set, info); - } - - public Dictionary Identify(string path) - { - Dictionary ret = new(); - Identify(ret, path); - return ret; - } - - public IEnumerable Identify(SetId setId, WeaponType weaponType, ushort variant, EquipSlot slot) - => slot switch - { - EquipSlot.MainHand => _weapons.Between(setId, weaponType, (byte)variant), - EquipSlot.OffHand => _weapons.Between(setId, weaponType, (byte)variant), - _ => _equipment.Between(setId, slot, (byte)variant), - }; - - public IReadOnlyList GetBnpcNames(uint bNpcId) - => bNpcId >= BnpcNames.Count ? Array.Empty() : BnpcNames[(int)bNpcId]; - - public IReadOnlyList<(string Name, ObjectKind Kind, uint Id)> ModelCharaNames(uint modelId) - => modelId >= ModelCharaToObjects.Count ? Array.Empty<(string Name, ObjectKind Kind, uint Id)>() : ModelCharaToObjects[(int)modelId]; - - public int NumModelChara - => ModelCharaToObjects.Count; - - protected override void DisposeInternal() - { - _actorData.Dispose(); - _weapons.Dispose(PluginInterface, Language); - _equipment.Dispose(PluginInterface, Language); - DisposeTag("Actions"); - DisposeTag("Models"); - - _modelIdentifierToModelChara.Dispose(PluginInterface, Language); - DisposeTag("BNpcNames"); - DisposeTag("ModelObjects"); - } - - private IReadOnlyDictionary> CreateActionList(DataManager gameData) - { - var sheet = gameData.GetExcelSheet(Language)!; - var storage = new ConcurrentDictionary>(); - - void AddAction(string? key, Action action) - { - if (key.IsNullOrEmpty()) - return; - - key = key.ToLowerInvariant(); - if (storage.TryGetValue(key, out var actions)) - actions.Add(action); - else - storage[key] = new ConcurrentBag { action }; - } - - var options = new ParallelOptions - { - MaxDegreeOfParallelism = Environment.ProcessorCount, - }; - - Parallel.ForEach(sheet.Where(a => !a.Name.RawData.IsEmpty), options, action => - { - var startKey = action.AnimationStart?.Value?.Name?.Value?.Key.ToDalamudString().ToString(); - var endKey = action.AnimationEnd?.Value?.Key.ToDalamudString().ToString(); - var hitKey = action.ActionTimelineHit?.Value?.Key.ToDalamudString().ToString(); - AddAction(startKey, action); - AddAction(endKey, action); - AddAction(hitKey, action); - }); - - return storage.ToDictionary(kvp => kvp.Key, kvp => (IReadOnlyList)kvp.Value.ToArray()); - } - - private void FindEquipment(IDictionary set, GameObjectInfo info) - { - var items = _equipment.Between(info.PrimaryId, info.EquipSlot, info.Variant); - foreach (var item in items) - set[item.Name] = item; - } - - private void FindWeapon(IDictionary set, GameObjectInfo info) - { - var items = _weapons.Between(info.PrimaryId, info.SecondaryId, info.Variant); - foreach (var item in items) - set[item.Name] = item; - } - - private void FindModel(IDictionary set, GameObjectInfo info) - { - var type = info.ObjectType.ToModelType(); - if (type is 0 or CharacterBase.ModelType.Weapon) - return; - - var models = _modelIdentifierToModelChara.Between(type, info.PrimaryId, (byte)info.SecondaryId, info.Variant); - foreach (var model in models.Where(m => m.RowId != 0 && m.RowId < ModelCharaToObjects.Count)) - { - var objectList = ModelCharaToObjects[(int)model.RowId]; - foreach (var (name, kind, _) in objectList) - set[$"{name} ({kind.ToName()})"] = model; - } - } - - private static void AddCounterString(IDictionary set, string data) - { - if (set.TryGetValue(data, out var obj) && obj is int counter) - set[data] = counter + 1; - else - set[data] = 1; - } - - private void IdentifyParsed(IDictionary set, GameObjectInfo info) - { - switch (info.FileType) - { - case FileType.Sound: - AddCounterString(set, FileType.Sound.ToString()); - return; - case FileType.Animation: - case FileType.Pap: - AddCounterString(set, FileType.Animation.ToString()); - return; - case FileType.Shader: - AddCounterString(set, FileType.Shader.ToString()); - return; - } - - switch (info.ObjectType) - { - case ObjectType.LoadingScreen: - case ObjectType.Map: - case ObjectType.Interface: - case ObjectType.Vfx: - case ObjectType.World: - case ObjectType.Housing: - case ObjectType.Font: - AddCounterString(set, info.ObjectType.ToString()); - break; - case ObjectType.DemiHuman: - FindModel(set, info); - break; - case ObjectType.Monster: - FindModel(set, info); - break; - case ObjectType.Icon: - set[$"Icon: {info.IconId}"] = null; - break; - case ObjectType.Accessory: - case ObjectType.Equipment: - FindEquipment(set, info); - break; - case ObjectType.Weapon: - FindWeapon(set, info); - break; - case ObjectType.Character: - var (gender, race) = info.GenderRace.Split(); - var raceString = race != ModelRace.Unknown ? race.ToName() + " " : ""; - var genderString = gender != Gender.Unknown ? gender.ToName() + " " : "Player "; - switch (info.CustomizationType) - { - case CustomizationType.Skin: - set[$"Customization: {raceString}{genderString}Skin Textures"] = null; - break; - case CustomizationType.DecalFace: - set[$"Customization: Face Decal {info.PrimaryId}"] = null; - break; - case CustomizationType.Iris when race == ModelRace.Unknown: - set[$"Customization: All Eyes (Catchlight)"] = null; - break; - case CustomizationType.DecalEquip: - set[$"Equipment Decal {info.PrimaryId}"] = null; - break; - default: - { - var customizationString = race == ModelRace.Unknown - || info.BodySlot == BodySlot.Unknown - || info.CustomizationType == CustomizationType.Unknown - ? "Customization: Unknown" - : $"Customization: {race} {gender} {info.BodySlot} ({info.CustomizationType}) {info.PrimaryId}"; - set[customizationString] = null; - break; - } - } - - break; - } - } - - private bool IdentifyVfx(IDictionary set, string path) - { - var key = GamePathParser.VfxToKey(path); - if (key.Length == 0 || !Actions.TryGetValue(key, out var actions) || actions.Count == 0) - return false; - - foreach (var action in actions) - set[$"Action: {action.Name}"] = action; - return true; - } - - private IReadOnlyList> CreateModelObjects(ActorManager.ActorManagerData actors, - DataManager gameData, ClientLanguage language) - { - var modelSheet = gameData.GetExcelSheet(language)!; - var ret = new List>((int)modelSheet.RowCount); - - for (var i = -1; i < modelSheet.Last().RowId; ++i) - ret.Add(new ConcurrentBag<(string Name, ObjectKind Kind, uint Id)>()); - - void AddChara(int modelChara, ObjectKind kind, uint dataId, uint displayId) - { - if (modelChara >= ret.Count) - return; - - if (actors.TryGetName(kind, dataId, out var name)) - ret[modelChara].Add((name, kind, displayId)); - } - - var oTask = Task.Run(() => - { - foreach (var ornament in gameData.GetExcelSheet(language)!) - AddChara(ornament.Model, ObjectKind.Ornament, ornament.RowId, ornament.RowId); - }); - - var mTask = Task.Run(() => - { - foreach (var mount in gameData.GetExcelSheet(language)!) - AddChara((int)mount.ModelChara.Row, ObjectKind.MountType, mount.RowId, mount.RowId); - }); - - var cTask = Task.Run(() => - { - foreach (var companion in gameData.GetExcelSheet(language)!) - AddChara((int)companion.Model.Row, ObjectKind.Companion, companion.RowId, companion.RowId); - }); - - var eTask = Task.Run(() => - { - foreach (var eNpc in gameData.GetExcelSheet(language)!) - AddChara((int)eNpc.ModelChara.Row, ObjectKind.EventNpc, eNpc.RowId, eNpc.RowId); - }); - - var options = new ParallelOptions() - { - MaxDegreeOfParallelism = Math.Max(1, Environment.ProcessorCount / 2), - }; - - Parallel.ForEach(gameData.GetExcelSheet(language)!.Where(b => b.RowId < BnpcNames.Count), options, bNpc => - { - foreach (var name in BnpcNames[(int)bNpc.RowId]) - AddChara((int)bNpc.ModelChara.Row, ObjectKind.BattleNpc, name, bNpc.RowId); - }); - - Task.WaitAll(oTask, mTask, cTask, eTask); - - return ret.Select(s => !s.IsEmpty - ? s.ToArray() - : Array.Empty<(string Name, ObjectKind Kind, uint Id)>()).ToArray(); - } - - public static unsafe ulong KeyFromCharacterBase(CharacterBase* drawObject) - { - var type = (*(delegate* unmanaged**)drawObject)[Offsets.DrawObjectGetModelTypeVfunc](drawObject); - var unk = (ulong)*((byte*)drawObject + Offsets.DrawObjectModelUnk1) << 8; - return type switch - { - 1 => type | unk, - 2 => type | unk | ((ulong)*(ushort*)((byte*)drawObject + Offsets.DrawObjectModelUnk3) << 16), - 3 => type - | unk - | ((ulong)*(ushort*)((byte*)drawObject + Offsets.DrawObjectModelUnk2) << 16) - | ((ulong)**(ushort**)((byte*)drawObject + Offsets.DrawObjectModelUnk4) << 32) - | ((ulong)**(ushort**)((byte*)drawObject + Offsets.DrawObjectModelUnk3) << 40), - _ => 0u, - }; - } -} diff --git a/Penumbra.GameData/Data/RestrictedGear.cs b/Penumbra.GameData/Data/RestrictedGear.cs deleted file mode 100644 index 74fcd975..00000000 --- a/Penumbra.GameData/Data/RestrictedGear.cs +++ /dev/null @@ -1,433 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Dalamud; -using Dalamud.Data; -using Dalamud.Logging; -using Dalamud.Plugin; -using Dalamud.Utility; -using Lumina.Excel; -using Lumina.Excel.GeneratedSheets; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; -using Race = Penumbra.GameData.Enums.Race; - -namespace Penumbra.GameData.Data; - -/// -/// Handle gender- or race-locked gear in the draw model itself. -/// Racial gear gets swapped to the correct current race and gender (it is one set each). -/// Gender-locked gear gets swapped to the equivalent set if it exists (most of them do), -/// with some items getting send to emperor's new clothes and a few funny entries. -/// -public sealed class RestrictedGear : DataSharer -{ - private readonly ExcelSheet _items; - private readonly ExcelSheet _categories; - - public readonly IReadOnlySet RaceGenderSet; - public readonly IReadOnlyDictionary MaleToFemale; - public readonly IReadOnlyDictionary FemaleToMale; - - public RestrictedGear(DalamudPluginInterface pi, ClientLanguage language, DataManager gameData) - : base(pi, language, 2) - { - _items = gameData.GetExcelSheet()!; - _categories = gameData.GetExcelSheet()!; - (RaceGenderSet, MaleToFemale, FemaleToMale) = TryCatchData("RestrictedGear", CreateRestrictedGear); - } - - protected override void DisposeInternal() - => DisposeTag("RestrictedGear"); - - /// - /// Resolve a model given by its model id, variant and slot for your current race and gender. - /// - /// The equipment piece. - /// The equipment slot. - /// The intended race. - /// The intended gender. - /// True and the changed-to piece of gear or false and the same piece of gear. - public (bool Replaced, CharacterArmor Armor) ResolveRestricted(CharacterArmor armor, EquipSlot slot, Race race, Gender gender) - { - var quad = armor.Set.Value | ((uint)armor.Variant << 16); - // Check racial gear, this does not need slots. - if (RaceGenderGroup.Contains(quad)) - { - var idx = ((int)race - 1) * 2 + (gender is Gender.Female or Gender.FemaleNpc ? 1 : 0); - var value = RaceGenderGroup[idx]; - return (value != quad, new CharacterArmor((ushort)value, (byte)(value >> 16), armor.Stain)); - } - - // Check gender slots. If current gender is female, check if anything needs to be changed from male to female, - // and vice versa. - // Some items lead to the exact same model- and variant id just gender specified, - // so check for actual difference in the Replaced bool. - var needle = quad | ((uint)slot.ToSlot() << 24); - if (gender is Gender.Female or Gender.FemaleNpc && MaleToFemale.TryGetValue(needle, out var newValue) - || gender is Gender.Male or Gender.MaleNpc && FemaleToMale.TryGetValue(needle, out newValue)) - return (quad != newValue, new CharacterArmor((ushort)newValue, (byte)(newValue >> 16), armor.Stain)); - - // The gear is not restricted. - return (false, armor); - } - - private Tuple, IReadOnlyDictionary, IReadOnlyDictionary> CreateRestrictedGear() - { - var m2f = new Dictionary(); - var f2m = new Dictionary(); - var rg = RaceGenderGroup.Where(c => c is not 0 and not uint.MaxValue).ToHashSet(); - AddKnown(m2f, f2m); - UnhandledRestrictedGear(rg, m2f, f2m, false); // Set this to true to create a print of unassigned gear on launch. - return new Tuple, IReadOnlyDictionary, IReadOnlyDictionary>(rg, m2f, f2m); - } - - - // Add all unknown restricted gear and pair it with emperor's new gear on start up. - // Can also print unhandled items. - private void UnhandledRestrictedGear(IReadOnlySet rg, Dictionary m2f, Dictionary f2m, bool print) - { - if (print) - PluginLog.Information("#### MALE ONLY ######"); - - void AddEmperor(Item item, bool male, bool female) - { - var slot = ((EquipSlot)item.EquipSlotCategory.Row).ToSlot(); - var emperor = slot switch - { - EquipSlot.Head => 10032u, - EquipSlot.Body => 10033u, - EquipSlot.Hands => 10034u, - EquipSlot.Legs => 10035u, - EquipSlot.Feet => 10036u, - EquipSlot.Ears => 09293u, - EquipSlot.Neck => 09292u, - EquipSlot.Wrists => 09294u, - EquipSlot.RFinger => 09295u, - EquipSlot.LFinger => 09295u, - _ => 0u, - }; - if (emperor == 0) - return; - - if (male) - AddItem(m2f, f2m, item.RowId, emperor, true, false); - if (female) - AddItem(m2f, f2m, emperor, item.RowId, false, true); - } - - var unhandled = 0; - foreach (var item in _items.Where(i => i.EquipRestriction == 2)) - { - if (m2f.ContainsKey((uint)item.ModelMain | ((uint)((EquipSlot)item.EquipSlotCategory.Row).ToSlot() << 24))) - continue; - - ++unhandled; - AddEmperor(item, true, false); - - if (print) - PluginLog.Information($"{item.RowId:D5} {item.Name.ToDalamudString().TextValue}"); - } - - if (print) - PluginLog.Information("#### FEMALE ONLY ####"); - foreach (var item in _items.Where(i => i.EquipRestriction == 3)) - { - if (f2m.ContainsKey((uint)item.ModelMain | ((uint)((EquipSlot)item.EquipSlotCategory.Row).ToSlot() << 24))) - continue; - - ++unhandled; - AddEmperor(item, false, true); - - if (print) - PluginLog.Information($"{item.RowId:D5} {item.Name.ToDalamudString().TextValue}"); - } - - if (print) - PluginLog.Information("#### OTHER #########"); - - foreach (var item in _items.Where(i => i.EquipRestriction > 3)) - { - if (rg.Contains((uint)item.ModelMain)) - continue; - - ++unhandled; - if (print) - PluginLog.Information( - $"{item.RowId:D5} {item.Name.ToDalamudString().TextValue} RestrictionGroup {_categories.GetRow(item.EquipRestriction)!.RowId:D2}"); - } - - if (unhandled > 0) - PluginLog.Warning($"There were {unhandled} restricted items not handled and directed to Emperor's New Set."); - } - - // Add a item redirection by its item - NOT MODEL - id. - // This uses the items model as well as its slot. - // Creates a <-> redirection by default but can add -> or <- redirections by setting the corresponding bools to false. - // Prints warnings if anything does not make sense. - private void AddItem(Dictionary m2f, Dictionary f2m, uint itemIdMale, uint itemIdFemale, bool addMale = true, - bool addFemale = true) - { - if (!addMale && !addFemale) - return; - - var mItem = _items.GetRow(itemIdMale); - var fItem = _items.GetRow(itemIdFemale); - if (mItem == null || fItem == null) - { - PluginLog.Warning($"Could not add item {itemIdMale} or {itemIdFemale} to restricted items."); - return; - } - - if (mItem.EquipRestriction != 2 && addMale) - { - PluginLog.Warning($"{mItem.Name.ToDalamudString().TextValue} is not restricted anymore."); - return; - } - - if (fItem.EquipRestriction != 3 && addFemale) - { - PluginLog.Warning($"{fItem.Name.ToDalamudString().TextValue} is not restricted anymore."); - return; - } - - var mSlot = ((EquipSlot)mItem.EquipSlotCategory.Row).ToSlot(); - var fSlot = ((EquipSlot)fItem.EquipSlotCategory.Row).ToSlot(); - if (!mSlot.IsAccessory() && !mSlot.IsEquipment()) - { - PluginLog.Warning($"{mItem.Name.ToDalamudString().TextValue} is not equippable to a known slot."); - return; - } - - if (mSlot != fSlot) - { - PluginLog.Warning($"{mItem.Name.ToDalamudString().TextValue} and {fItem.Name.ToDalamudString().TextValue} are not compatible."); - return; - } - - var mModelIdSlot = (uint)mItem.ModelMain | ((uint)mSlot << 24); - var fModelIdSlot = (uint)fItem.ModelMain | ((uint)fSlot << 24); - - if (addMale) - m2f.TryAdd(mModelIdSlot, fModelIdSlot); - if (addFemale) - f2m.TryAdd(fModelIdSlot, mModelIdSlot); - } - - // @formatter:off - // Add all currently existing and known gender restricted items. - private void AddKnown(Dictionary m2f, Dictionary f2m) - { - AddItem(m2f, f2m, 02967, 02970); // Lord's Yukata (Blue) <-> Lady's Yukata (Red) - AddItem(m2f, f2m, 02968, 02971); // Lord's Yukata (Green) <-> Lady's Yukata (Blue) - AddItem(m2f, f2m, 02969, 02972); // Lord's Yukata (Grey) <-> Lady's Yukata (Black) - AddItem(m2f, f2m, 02973, 02978); // Red Summer Top <-> Red Summer Halter - AddItem(m2f, f2m, 02974, 02979); // Green Summer Top <-> Green Summer Halter - AddItem(m2f, f2m, 02975, 02980); // Blue Summer Top <-> Blue Summer Halter - AddItem(m2f, f2m, 02976, 02981); // Solar Summer Top <-> Solar Summer Halter - AddItem(m2f, f2m, 02977, 02982); // Lunar Summer Top <-> Lunar Summer Halter - AddItem(m2f, f2m, 02996, 02997); // Hempen Undershirt <-> Hempen Camise - AddItem(m2f, f2m, 03280, 03283); // Lord's Drawers (Black) <-> Lady's Knickers (Black) - AddItem(m2f, f2m, 03281, 03284); // Lord's Drawers (White) <-> Lady's Knickers (White) - AddItem(m2f, f2m, 03282, 03285); // Lord's Drawers (Gold) <-> Lady's Knickers (Gold) - AddItem(m2f, f2m, 03286, 03291); // Red Summer Trunks <-> Red Summer Tanga - AddItem(m2f, f2m, 03287, 03292); // Green Summer Trunks <-> Green Summer Tanga - AddItem(m2f, f2m, 03288, 03293); // Blue Summer Trunks <-> Blue Summer Tanga - AddItem(m2f, f2m, 03289, 03294); // Solar Summer Trunks <-> Solar Summer Tanga - AddItem(m2f, f2m, 03290, 03295); // Lunar Summer Trunks <-> Lunar Summer Tanga - AddItem(m2f, f2m, 03307, 03308); // Hempen Underpants <-> Hempen Pantalettes - AddItem(m2f, f2m, 03748, 03749); // Lord's Clogs <-> Lady's Clogs - AddItem(m2f, f2m, 06045, 06041); // Bohemian's Coat <-> Guardian Corps Coat - AddItem(m2f, f2m, 06046, 06042); // Bohemian's Gloves <-> Guardian Corps Gauntlets - AddItem(m2f, f2m, 06047, 06043); // Bohemian's Trousers <-> Guardian Corps Skirt - AddItem(m2f, f2m, 06048, 06044); // Bohemian's Boots <-> Guardian Corps Boots - AddItem(m2f, f2m, 06094, 06098); // Summer Evening Top <-> Summer Morning Halter - AddItem(m2f, f2m, 06095, 06099); // Summer Evening Trunks <-> Summer Morning Tanga - AddItem(m2f, f2m, 06096, 06100); // Striped Summer Top <-> Striped Summer Halter - AddItem(m2f, f2m, 06097, 06101); // Striped Summer Trunks <-> Striped Summer Tanga - AddItem(m2f, f2m, 06102, 06104); // Black Summer Top <-> Black Summer Halter - AddItem(m2f, f2m, 06103, 06105); // Black Summer Trunks <-> Black Summer Tanga - AddItem(m2f, f2m, 08532, 08535); // Lord's Yukata (Blackflame) <-> Lady's Yukata (Redfly) - AddItem(m2f, f2m, 08533, 08536); // Lord's Yukata (Whiteflame) <-> Lady's Yukata (Bluefly) - AddItem(m2f, f2m, 08534, 08537); // Lord's Yukata (Blueflame) <-> Lady's Yukata (Pinkfly) - AddItem(m2f, f2m, 08542, 08549); // Ti Leaf Lei <-> Coronal Summer Halter - AddItem(m2f, f2m, 08543, 08550); // Red Summer Maro <-> Red Summer Pareo - AddItem(m2f, f2m, 08544, 08551); // South Seas Talisman <-> Sea Breeze Summer Halter - AddItem(m2f, f2m, 08545, 08552); // Blue Summer Maro <-> Sea Breeze Summer Pareo - AddItem(m2f, f2m, 08546, 08553); // Coeurl Talisman <-> Coeurl Beach Halter - AddItem(m2f, f2m, 08547, 08554); // Coeurl Beach Maro <-> Coeurl Beach Pareo - AddItem(m2f, f2m, 08548, 08555); // Coeurl Beach Briefs <-> Coeurl Beach Tanga - AddItem(m2f, f2m, 10316, 10317); // Southern Seas Vest <-> Southern Seas Swimsuit - AddItem(m2f, f2m, 10318, 10319); // Southern Seas Trunks <-> Southern Seas Tanga - AddItem(m2f, f2m, 10320, 10321); // Striped Southern Seas Vest <-> Striped Southern Seas Swimsuit - AddItem(m2f, f2m, 13298, 13567); // Black-feathered Flat Hat <-> Red-feathered Flat Hat - AddItem(m2f, f2m, 13300, 13639); // Lord's Suikan <-> Lady's Suikan - AddItem(m2f, f2m, 13724, 13725); // Little Lord's Clogs <-> Little Lady's Clogs - AddItem(m2f, f2m, 14854, 14857); // Eastern Lord's Togi <-> Eastern Lady's Togi - AddItem(m2f, f2m, 14855, 14858); // Eastern Lord's Trousers <-> Eastern Lady's Loincloth - AddItem(m2f, f2m, 14856, 14859); // Eastern Lord's Crakows <-> Eastern Lady's Crakows - AddItem(m2f, f2m, 15639, 15642); // Far Eastern Patriarch's Hat <-> Far Eastern Matriarch's Sun Hat - AddItem(m2f, f2m, 15640, 15643); // Far Eastern Patriarch's Tunic <-> Far Eastern Matriarch's Dress - AddItem(m2f, f2m, 15641, 15644); // Far Eastern Patriarch's Longboots <-> Far Eastern Matriarch's Boots - AddItem(m2f, f2m, 15922, 15925); // Moonfire Vest <-> Moonfire Halter - AddItem(m2f, f2m, 15923, 15926); // Moonfire Trunks <-> Moonfire Tanga - AddItem(m2f, f2m, 15924, 15927); // Moonfire Caligae <-> Moonfire Sandals - AddItem(m2f, f2m, 16106, 16111); // Makai Mauler's Facemask <-> Makai Manhandler's Facemask - AddItem(m2f, f2m, 16107, 16112); // Makai Mauler's Oilskin <-> Makai Manhandler's Jerkin - AddItem(m2f, f2m, 16108, 16113); // Makai Mauler's Fingerless Gloves <-> Makai Manhandler's Fingerless Gloves - AddItem(m2f, f2m, 16109, 16114); // Makai Mauler's Leggings <-> Makai Manhandler's Quartertights - AddItem(m2f, f2m, 16110, 16115); // Makai Mauler's Boots <-> Makai Manhandler's Longboots - AddItem(m2f, f2m, 16116, 16121); // Makai Marksman's Eyepatch <-> Makai Markswoman's Ribbon - AddItem(m2f, f2m, 16117, 16122); // Makai Marksman's Battlegarb <-> Makai Markswoman's Battledress - AddItem(m2f, f2m, 16118, 16123); // Makai Marksman's Fingerless Gloves <-> Makai Markswoman's Fingerless Gloves - AddItem(m2f, f2m, 16119, 16124); // Makai Marksman's Slops <-> Makai Markswoman's Quartertights - AddItem(m2f, f2m, 16120, 16125); // Makai Marksman's Boots <-> Makai Markswoman's Longboots - AddItem(m2f, f2m, 16126, 16131); // Makai Sun Guide's Circlet <-> Makai Moon Guide's Circlet - AddItem(m2f, f2m, 16127, 16132); // Makai Sun Guide's Oilskin <-> Makai Moon Guide's Gown - AddItem(m2f, f2m, 16128, 16133); // Makai Sun Guide's Fingerless Gloves <-> Makai Moon Guide's Fingerless Gloves - AddItem(m2f, f2m, 16129, 16134); // Makai Sun Guide's Slops <-> Makai Moon Guide's Quartertights - AddItem(m2f, f2m, 16130, 16135); // Makai Sun Guide's Boots <-> Makai Moon Guide's Longboots - AddItem(m2f, f2m, 16136, 16141); // Makai Priest's Coronet <-> Makai Priestess's Headdress - AddItem(m2f, f2m, 16137, 16142); // Makai Priest's Doublet Robe <-> Makai Priestess's Jerkin - AddItem(m2f, f2m, 16138, 16143); // Makai Priest's Fingerless Gloves <-> Makai Priestess's Fingerless Gloves - AddItem(m2f, f2m, 16139, 16144); // Makai Priest's Slops <-> Makai Priestess's Skirt - AddItem(m2f, f2m, 16140, 16145); // Makai Priest's Boots <-> Makai Priestess's Longboots - AddItem(m2f, f2m, 16588, 16592); // Far Eastern Gentleman's Hat <-> Far Eastern Beauty's Hairpin - AddItem(m2f, f2m, 16589, 16593); // Far Eastern Gentleman's Robe <-> Far Eastern Beauty's Robe - AddItem(m2f, f2m, 16590, 16594); // Far Eastern Gentleman's Haidate <-> Far Eastern Beauty's Koshita - AddItem(m2f, f2m, 16591, 16595); // Far Eastern Gentleman's Boots <-> Far Eastern Beauty's Boots - AddItem(m2f, f2m, 17204, 17209); // Common Makai Mauler's Facemask <-> Common Makai Manhandler's Facemask - AddItem(m2f, f2m, 17205, 17210); // Common Makai Mauler's Oilskin <-> Common Makai Manhandler's Jerkin - AddItem(m2f, f2m, 17206, 17211); // Common Makai Mauler's Fingerless Gloves <-> Common Makai Manhandler's Fingerless Glove - AddItem(m2f, f2m, 17207, 17212); // Common Makai Mauler's Leggings <-> Common Makai Manhandler's Quartertights - AddItem(m2f, f2m, 17208, 17213); // Common Makai Mauler's Boots <-> Common Makai Manhandler's Longboots - AddItem(m2f, f2m, 17214, 17219); // Common Makai Marksman's Eyepatch <-> Common Makai Markswoman's Ribbon - AddItem(m2f, f2m, 17215, 17220); // Common Makai Marksman's Battlegarb <-> Common Makai Markswoman's Battledress - AddItem(m2f, f2m, 17216, 17221); // Common Makai Marksman's Fingerless Gloves <-> Common Makai Markswoman's Fingerless Glove - AddItem(m2f, f2m, 17217, 17222); // Common Makai Marksman's Slops <-> Common Makai Markswoman's Quartertights - AddItem(m2f, f2m, 17218, 17223); // Common Makai Marksman's Boots <-> Common Makai Markswoman's Longboots - AddItem(m2f, f2m, 17224, 17229); // Common Makai Sun Guide's Circlet <-> Common Makai Moon Guide's Circlet - AddItem(m2f, f2m, 17225, 17230); // Common Makai Sun Guide's Oilskin <-> Common Makai Moon Guide's Gown - AddItem(m2f, f2m, 17226, 17231); // Common Makai Sun Guide's Fingerless Gloves <-> Common Makai Moon Guide's Fingerless Glove - AddItem(m2f, f2m, 17227, 17232); // Common Makai Sun Guide's Slops <-> Common Makai Moon Guide's Quartertights - AddItem(m2f, f2m, 17228, 17233); // Common Makai Sun Guide's Boots <-> Common Makai Moon Guide's Longboots - AddItem(m2f, f2m, 17234, 17239); // Common Makai Priest's Coronet <-> Common Makai Priestess's Headdress - AddItem(m2f, f2m, 17235, 17240); // Common Makai Priest's Doublet Robe <-> Common Makai Priestess's Jerkin - AddItem(m2f, f2m, 17236, 17241); // Common Makai Priest's Fingerless Gloves <-> Common Makai Priestess's Fingerless Gloves - AddItem(m2f, f2m, 17237, 17242); // Common Makai Priest's Slops <-> Common Makai Priestess's Skirt - AddItem(m2f, f2m, 17238, 17243); // Common Makai Priest's Boots <-> Common Makai Priestess's Longboots - AddItem(m2f, f2m, 20479, 20484); // Star of the Nezha Lord <-> Star of the Nezha Lady - AddItem(m2f, f2m, 20480, 20485); // Nezha Lord's Togi <-> Nezha Lady's Togi - AddItem(m2f, f2m, 20481, 20486); // Nezha Lord's Gloves <-> Nezha Lady's Gloves - AddItem(m2f, f2m, 20482, 20487); // Nezha Lord's Slops <-> Nezha Lady's Slops - AddItem(m2f, f2m, 20483, 20488); // Nezha Lord's Boots <-> Nezha Lady's Kneeboots - AddItem(m2f, f2m, 22367, 22372); // Faerie Tale Prince's Circlet <-> Faerie Tale Princess's Tiara - AddItem(m2f, f2m, 22368, 22373); // Faerie Tale Prince's Vest <-> Faerie Tale Princess's Dress - AddItem(m2f, f2m, 22369, 22374); // Faerie Tale Prince's Gloves <-> Faerie Tale Princess's Gloves - AddItem(m2f, f2m, 22370, 22375); // Faerie Tale Prince's Slops <-> Faerie Tale Princess's Long Skirt - AddItem(m2f, f2m, 22371, 22376); // Faerie Tale Prince's Boots <-> Faerie Tale Princess's Heels - AddItem(m2f, f2m, 24599, 24602); // Far Eastern Schoolboy's Hat <-> Far Eastern Schoolgirl's Hair Ribbon - AddItem(m2f, f2m, 24600, 24603); // Far Eastern Schoolboy's Hakama <-> Far Eastern Schoolgirl's Hakama - AddItem(m2f, f2m, 24601, 24604); // Far Eastern Schoolboy's Zori <-> Far Eastern Schoolgirl's Boots - AddItem(m2f, f2m, 28600, 28605); // Eastern Lord Errant's Hat <-> Eastern Lady Errant's Hat - AddItem(m2f, f2m, 28601, 28606); // Eastern Lord Errant's Jacket <-> Eastern Lady Errant's Coat - AddItem(m2f, f2m, 28602, 28607); // Eastern Lord Errant's Wristbands <-> Eastern Lady Errant's Gloves - AddItem(m2f, f2m, 28603, 28608); // Eastern Lord Errant's Trousers <-> Eastern Lady Errant's Skirt - AddItem(m2f, f2m, 28604, 28609); // Eastern Lord Errant's Shoes <-> Eastern Lady Errant's Boots - AddItem(m2f, f2m, 36336, 36337); // Omega-M Attire <-> Omega-F Attire - AddItem(m2f, f2m, 36338, 36339); // Omega-M Ear Cuffs <-> Omega-F Earrings - AddItem(m2f, f2m, 37442, 37447); // Makai Vanguard's Monocle <-> Makai Vanbreaker's Ribbon - AddItem(m2f, f2m, 37443, 37448); // Makai Vanguard's Battlegarb <-> Makai Vanbreaker's Battledress - AddItem(m2f, f2m, 37444, 37449); // Makai Vanguard's Fingerless Gloves <-> Makai Vanbreaker's Fingerless Gloves - AddItem(m2f, f2m, 37445, 37450); // Makai Vanguard's Leggings <-> Makai Vanbreaker's Quartertights - AddItem(m2f, f2m, 37446, 37451); // Makai Vanguard's Boots <-> Makai Vanbreaker's Longboots - AddItem(m2f, f2m, 37452, 37457); // Makai Harbinger's Facemask <-> Makai Harrower's Facemask - AddItem(m2f, f2m, 37453, 37458); // Makai Harbinger's Battlegarb <-> Makai Harrower's Jerkin - AddItem(m2f, f2m, 37454, 37459); // Makai Harbinger's Fingerless Gloves <-> Makai Harrower's Fingerless Gloves - AddItem(m2f, f2m, 37455, 37460); // Makai Harbinger's Leggings <-> Makai Harrower's Quartertights - AddItem(m2f, f2m, 37456, 37461); // Makai Harbinger's Boots <-> Makai Harrower's Longboots - AddItem(m2f, f2m, 37462, 37467); // Common Makai Vanguard's Monocle <-> Common Makai Vanbreaker's Ribbon - AddItem(m2f, f2m, 37463, 37468); // Common Makai Vanguard's Battlegarb <-> Common Makai Vanbreaker's Battledress - AddItem(m2f, f2m, 37464, 37469); // Common Makai Vanguard's Fingerless Gloves <-> Common Makai Vanbreaker's Fingerless Gloves - AddItem(m2f, f2m, 37465, 37470); // Common Makai Vanguard's Leggings <-> Common Makai Vanbreaker's Quartertights - AddItem(m2f, f2m, 37466, 37471); // Common Makai Vanguard's Boots <-> Common Makai Vanbreaker's Longboots - AddItem(m2f, f2m, 37472, 37477); // Common Makai Harbinger's Facemask <-> Common Makai Harrower's Facemask - AddItem(m2f, f2m, 37473, 37478); // Common Makai Harbinger's Battlegarb <-> Common Makai Harrower's Jerkin - AddItem(m2f, f2m, 37474, 37479); // Common Makai Harbinger's Fingerless Gloves <-> Common Makai Harrower's Fingerless Gloves - AddItem(m2f, f2m, 37475, 37480); // Common Makai Harbinger's Leggings <-> Common Makai Harrower's Quartertights - AddItem(m2f, f2m, 37476, 37481); // Common Makai Harbinger's Boots <-> Common Makai Harrower's Longboots - AddItem(m2f, f2m, 13323, 13322); // Scion Thief's Tunic <-> Scion Conjurer's Dalmatica - AddItem(m2f, f2m, 13693, 10034, true, false); // Scion Thief's Halfgloves -> The Emperor's New Gloves - AddItem(m2f, f2m, 13694, 13691); // Scion Thief's Gaskins <-> Scion Conjurer's Chausses - AddItem(m2f, f2m, 13695, 13692); // Scion Thief's Armored Caligae <-> Scion Conjurer's Pattens - AddItem(m2f, f2m, 13326, 30063); // Scion Thaumaturge's Robe <-> Scion Sorceress's Headdress - AddItem(m2f, f2m, 13696, 30062); // Scion Thaumaturge's Monocle <-> Scion Sorceress's Robe - AddItem(m2f, f2m, 13697, 30064); // Scion Thaumaturge's Gauntlets <-> Scion Sorceress's Shadowtalons - AddItem(m2f, f2m, 13698, 10035, true, false); // Scion Thaumaturge's Gaskins -> The Emperor's New Breeches - AddItem(m2f, f2m, 13699, 30065); // Scion Thaumaturge's Moccasins <-> Scion Sorceress's High Boots - AddItem(m2f, f2m, 13327, 15942); // Scion Chronocler's Cowl <-> Scion Healer's Robe - AddItem(m2f, f2m, 13700, 10034, true, false); // Scion Chronocler's Ringbands -> The Emperor's New Gloves - AddItem(m2f, f2m, 13701, 15943); // Scion Chronocler's Tights <-> Scion Healer's Halftights - AddItem(m2f, f2m, 13702, 15944); // Scion Chronocler's Caligae <-> Scion Healer's Highboots - AddItem(m2f, f2m, 14861, 13324); // Head Engineer's Goggles <-> Scion Striker's Visor - AddItem(m2f, f2m, 14862, 13325); // Head Engineer's Attire <-> Scion Striker's Attire - AddItem(m2f, f2m, 15938, 33751); // Scion Rogue's Jacket <-> Oracle Top - AddItem(m2f, f2m, 15939, 10034, true, false); // Scion Rogue's Armguards -> The Emperor's New Gloves - AddItem(m2f, f2m, 15940, 33752); // Scion Rogue's Gaskins <-> Oracle Leggings - AddItem(m2f, f2m, 15941, 33753); // Scion Rogue's Boots <-> Oracle Pantalettes - AddItem(m2f, f2m, 16042, 16046); // Abes Jacket <-> High Summoner's Dress - AddItem(m2f, f2m, 16043, 16047); // Abes Gloves <-> High Summoner's Armlets - AddItem(m2f, f2m, 16044, 10035, true, false); // Abes Halfslops -> The Emperor's New Breeches - AddItem(m2f, f2m, 16045, 16048); // Abes Boots <-> High Summoner's Boots - AddItem(m2f, f2m, 17473, 28553); // Lord Commander's Coat <-> Majestic Dress - AddItem(m2f, f2m, 17474, 28554); // Lord Commander's Gloves <-> Majestic Wristdresses - AddItem(m2f, f2m, 10036, 28555, false); // Emperor's New Boots <- Majestic Boots - AddItem(m2f, f2m, 21021, 21026); // Werewolf Feet <-> Werewolf Legs - AddItem(m2f, f2m, 22452, 20633); // Cracked Manderville Monocle <-> Blackbosom Hat - AddItem(m2f, f2m, 22453, 20634); // Torn Manderville Coatee <-> Blackbosom Dress - AddItem(m2f, f2m, 22454, 20635); // Singed Manderville Gloves <-> Blackbosom Dress Gloves - AddItem(m2f, f2m, 22455, 10035, true, false); // Stained Manderville Bottoms -> The Emperor's New Breeches - AddItem(m2f, f2m, 22456, 20636); // Scuffed Manderville Gaiters <-> Blackbosom Boots - AddItem(m2f, f2m, 23013, 21302); // Doman Liege's Dogi <-> Scion Liberator's Jacket - AddItem(m2f, f2m, 23014, 21303); // Doman Liege's Kote <-> Scion Liberator's Fingerless Gloves - AddItem(m2f, f2m, 23015, 21304); // Doman Liege's Kyakui <-> Scion Liberator's Pantalettes - AddItem(m2f, f2m, 23016, 21305); // Doman Liege's Kyahan <-> Scion Liberator's Sabatons - AddItem(m2f, f2m, 09293, 21306, false); // The Emperor's New Earrings <- Scion Liberator's Earrings - AddItem(m2f, f2m, 24158, 23008, true, false); // Leal Samurai's Kasa -> Eastern Socialite's Hat - AddItem(m2f, f2m, 24159, 23009, true, false); // Leal Samurai's Dogi -> Eastern Socialite's Cheongsam - AddItem(m2f, f2m, 24160, 23010, true, false); // Leal Samurai's Tekko -> Eastern Socialite's Gloves - AddItem(m2f, f2m, 24161, 23011, true, false); // Leal Samurai's Tsutsu-hakama -> Eastern Socialite's Skirt - AddItem(m2f, f2m, 24162, 23012, true, false); // Leal Samurai's Geta -> Eastern Socialite's Boots - AddItem(m2f, f2m, 02966, 13321, false); // Reindeer Suit <- Antecedent's Attire - AddItem(m2f, f2m, 15479, 36843, false); // Swine Body <- Lyse's Leadership Attire - AddItem(m2f, f2m, 21941, 24999, false); // Ala Mhigan Gown <- Gown of Light - AddItem(m2f, f2m, 30757, 25000, false); // Southern Seas Skirt <- Skirt of Light - AddItem(m2f, f2m, 36821, 27933, false); // Archfiend Helm <- Scion Hearer's Hood - AddItem(m2f, f2m, 36822, 27934, false); // Archfiend Armor <- Scion Hearer's Coat - AddItem(m2f, f2m, 36825, 27935, false); // Archfiend Sabatons <- Scion Hearer's Shoes - AddItem(m2f, f2m, 32393, 39302, false); // Edenmete Gown of Casting <- Gaia's Attire - } - - // The racial starter sets are available for all 4 slots each, - // but have no associated accessories or hats. - private static readonly uint[] RaceGenderGroup = - { - 0x020054, - 0x020055, - 0x020056, - 0x020057, - 0x02005C, - 0x02005D, - 0x020058, - 0x020059, - 0x02005A, - 0x02005B, - 0x020101, - 0x020102, - 0x010255, - uint.MaxValue, // TODO: Female Hrothgar - 0x0102E8, - 0x010245, - }; - // @Formatter:on -} diff --git a/Penumbra.GameData/Data/StainData.cs b/Penumbra.GameData/Data/StainData.cs deleted file mode 100644 index 0e602307..00000000 --- a/Penumbra.GameData/Data/StainData.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using Dalamud; -using Dalamud.Data; -using Dalamud.Plugin; -using Penumbra.GameData.Structs; - -namespace Penumbra.GameData.Data; - -public sealed class StainData : DataSharer, IReadOnlyDictionary -{ - public readonly IReadOnlyDictionary Data; - - public StainData(DalamudPluginInterface pluginInterface, DataManager dataManager, ClientLanguage language) - : base(pluginInterface, language, 2) - { - Data = TryCatchData("Stains", () => CreateStainData(dataManager)); - } - - protected override void DisposeInternal() - => DisposeTag("Stains"); - - private IReadOnlyDictionary CreateStainData(DataManager dataManager) - { - var stainSheet = dataManager.GetExcelSheet(Language)!; - return stainSheet.Where(s => s.Color != 0 && s.Name.RawData.Length > 0) - .ToDictionary(s => (byte)s.RowId, s => - { - var stain = new Stain(s); - return (stain.Name, stain.RgbaColor, stain.Gloss); - }); - } - - public IEnumerator> GetEnumerator() - => Data.Select(kvp - => new KeyValuePair(new StainId(kvp.Key), new Stain(kvp.Value.Name, kvp.Value.Dye, kvp.Key, kvp.Value.Gloss))) - .GetEnumerator(); - - IEnumerator IEnumerable.GetEnumerator() - => GetEnumerator(); - - public int Count - => Data.Count; - - public bool ContainsKey(StainId key) - => Data.ContainsKey(key.Value); - - public bool TryGetValue(StainId key, out Stain value) - { - if (!Data.TryGetValue(key.Value, out var data)) - { - value = default; - return false; - } - - value = new Stain(data.Name, data.Dye, key.Value, data.Gloss); - return true; - } - - public Stain this[StainId key] - => TryGetValue(key, out var data) ? data : throw new ArgumentOutOfRangeException(nameof(key)); - - public IEnumerable Keys - => Data.Keys.Select(k => new StainId(k)); - - public IEnumerable Values - => Data.Select(kvp => new Stain(kvp.Value.Name, kvp.Value.Dye, kvp.Key, kvp.Value.Gloss)); -} diff --git a/Penumbra.GameData/Data/WeaponIdentificationList.cs b/Penumbra.GameData/Data/WeaponIdentificationList.cs deleted file mode 100644 index e4566769..00000000 --- a/Penumbra.GameData/Data/WeaponIdentificationList.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Dalamud; -using Dalamud.Plugin; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; -using PseudoEquipItem = System.ValueTuple; - -namespace Penumbra.GameData.Data; - -internal sealed class WeaponIdentificationList : KeyList -{ - private const string Tag = "WeaponIdentification"; - private const int Version = 2; - - public WeaponIdentificationList(DalamudPluginInterface pi, ClientLanguage language, ItemData data) - : base(pi, Tag, language, Version, CreateWeaponList(data)) - { } - - public IEnumerable Between(SetId modelId) - => Between(ToKey(modelId, 0, 0), ToKey(modelId, 0xFFFF, 0xFF)).Select(e => (EquipItem)e); - - public IEnumerable Between(SetId modelId, WeaponType type, byte variant = 0) - { - if (type == 0) - return Between(ToKey(modelId, 0, 0), ToKey(modelId, 0xFFFF, 0xFF)).Select(e => (EquipItem)e); - if (variant == 0) - return Between(ToKey(modelId, type, 0), ToKey(modelId, type, 0xFF)).Select(e => (EquipItem)e); - - return Between(ToKey(modelId, type, variant), ToKey(modelId, type, variant)).Select(e => (EquipItem)e); - } - - public void Dispose(DalamudPluginInterface pi, ClientLanguage language) - => DataSharer.DisposeTag(pi, Tag, language, Version); - - public static ulong ToKey(SetId modelId, WeaponType type, byte variant) - => ((ulong)modelId << 32) | ((ulong)type << 16) | variant; - - public static ulong ToKey(EquipItem i) - => ToKey(i.ModelId, i.WeaponType, i.Variant); - - protected override IEnumerable ToKeys(PseudoEquipItem data) - { - yield return ToKey(data); - } - - protected override bool ValidKey(ulong key) - => key != 0; - - protected override int ValueKeySelector(PseudoEquipItem data) - => (int)data.Item2; - - private static IEnumerable CreateWeaponList(ItemData data) - => data.Where(kvp => !kvp.Key.IsEquipment() && !kvp.Key.IsAccessory()) - .SelectMany(kvp => kvp.Value) - .Select(i => (PseudoEquipItem)i); -} diff --git a/Penumbra.GameData/Enums/BodySlot.cs b/Penumbra.GameData/Enums/BodySlot.cs deleted file mode 100644 index 92b4c6ce..00000000 --- a/Penumbra.GameData/Enums/BodySlot.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; - -namespace Penumbra.GameData.Enums; - -public enum BodySlot : byte -{ - Unknown, - Hair, - Face, - Tail, - Body, - Zear, -} - -public static class BodySlotEnumExtension -{ - public static string ToSuffix( this BodySlot value ) - => value switch - { - BodySlot.Zear => "zear", - BodySlot.Face => "face", - BodySlot.Hair => "hair", - BodySlot.Body => "body", - BodySlot.Tail => "tail", - _ => throw new InvalidEnumArgumentException(), - }; - - public static char ToAbbreviation(this BodySlot value) - => value switch - { - BodySlot.Hair => 'h', - BodySlot.Face => 'f', - BodySlot.Tail => 't', - BodySlot.Body => 'b', - BodySlot.Zear => 'z', - _ => throw new InvalidEnumArgumentException(), - }; - - public static CustomizationType ToCustomizationType(this BodySlot value) - => value switch - { - BodySlot.Hair => CustomizationType.Hair, - BodySlot.Face => CustomizationType.Face, - BodySlot.Tail => CustomizationType.Tail, - BodySlot.Body => CustomizationType.Body, - BodySlot.Zear => CustomizationType.Zear, - _ => throw new ArgumentOutOfRangeException(nameof(value), value, null) - }; -} - -public static partial class Names -{ - public static readonly Dictionary< string, BodySlot > StringToBodySlot = new() - { - { BodySlot.Zear.ToSuffix(), BodySlot.Zear }, - { BodySlot.Face.ToSuffix(), BodySlot.Face }, - { BodySlot.Hair.ToSuffix(), BodySlot.Hair }, - { BodySlot.Body.ToSuffix(), BodySlot.Body }, - { BodySlot.Tail.ToSuffix(), BodySlot.Tail }, - }; -} \ No newline at end of file diff --git a/Penumbra.GameData/Enums/ChangedItemExtensions.cs b/Penumbra.GameData/Enums/ChangedItemExtensions.cs deleted file mode 100644 index f2b531d6..00000000 --- a/Penumbra.GameData/Enums/ChangedItemExtensions.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using Dalamud.Data; -using Lumina.Excel.GeneratedSheets; -using Penumbra.Api.Enums; -using Action = Lumina.Excel.GeneratedSheets.Action; - -namespace Penumbra.GameData.Enums; - -public static class ChangedItemExtensions -{ - public static (ChangedItemType, uint) ChangedItemToTypeAndId(object? item) - { - return item switch - { - null => (ChangedItemType.None, 0), - Item i => (ChangedItemType.Item, i.RowId), - Action a => (ChangedItemType.Action, a.RowId), - _ => (ChangedItemType.Customization, 0), - }; - } - - public static object? GetObject(this ChangedItemType type, DataManager manager, uint id) - { - return type switch - { - ChangedItemType.None => null, - ChangedItemType.Item => manager.GetExcelSheet()?.GetRow(id), - ChangedItemType.Action => manager.GetExcelSheet()?.GetRow(id), - ChangedItemType.Customization => null, - _ => throw new ArgumentOutOfRangeException(nameof(type), type, null), - }; - } -} diff --git a/Penumbra.GameData/Enums/CustomizationType.cs b/Penumbra.GameData/Enums/CustomizationType.cs deleted file mode 100644 index 60cf23dd..00000000 --- a/Penumbra.GameData/Enums/CustomizationType.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; - -namespace Penumbra.GameData.Enums -{ - public enum CustomizationType : byte - { - Unknown, - Body, - Tail, - Face, - Iris, - Accessory, - Hair, - Zear, - DecalFace, - DecalEquip, - Skin, - Etc, - } - - public static class CustomizationTypeEnumExtension - { - public static string ToSuffix( this CustomizationType value ) - { - return value switch - { - CustomizationType.Body => "top", - CustomizationType.Face => "fac", - CustomizationType.Iris => "iri", - CustomizationType.Accessory => "acc", - CustomizationType.Hair => "hir", - CustomizationType.Tail => "til", - CustomizationType.Zear => "zer", - CustomizationType.Etc => "etc", - _ => throw new InvalidEnumArgumentException(), - }; - } - } - - public static partial class Names - { - public static readonly Dictionary< string, CustomizationType > SuffixToCustomizationType = new() - { - { CustomizationType.Body.ToSuffix(), CustomizationType.Body }, - { CustomizationType.Face.ToSuffix(), CustomizationType.Face }, - { CustomizationType.Iris.ToSuffix(), CustomizationType.Iris }, - { CustomizationType.Accessory.ToSuffix(), CustomizationType.Accessory }, - { CustomizationType.Hair.ToSuffix(), CustomizationType.Hair }, - { CustomizationType.Tail.ToSuffix(), CustomizationType.Tail }, - { CustomizationType.Zear.ToSuffix(), CustomizationType.Zear }, - { CustomizationType.Etc.ToSuffix(), CustomizationType.Etc }, - }; - } -} \ No newline at end of file diff --git a/Penumbra.GameData/Enums/EquipSlot.cs b/Penumbra.GameData/Enums/EquipSlot.cs deleted file mode 100644 index 27e5a92c..00000000 --- a/Penumbra.GameData/Enums/EquipSlot.cs +++ /dev/null @@ -1,232 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Penumbra.GameData.Enums; - -public enum EquipSlot : byte -{ - Unknown = 0, - MainHand = 1, - OffHand = 2, - Head = 3, - Body = 4, - Hands = 5, - Belt = 6, - Legs = 7, - Feet = 8, - Ears = 9, - Neck = 10, - Wrists = 11, - RFinger = 12, - BothHand = 13, - LFinger = 14, // Not officially existing, means "weapon could be equipped in either hand" for the game. - HeadBody = 15, - BodyHandsLegsFeet = 16, - SoulCrystal = 17, - LegsFeet = 18, - FullBody = 19, - BodyHands = 20, - BodyLegsFeet = 21, - ChestHands = 22, - Nothing = 23, - All = 24, // Not officially existing -} - -public static class EquipSlotExtensions -{ - public static EquipSlot ToEquipSlot(this uint value) - => value switch - { - 0 => EquipSlot.Head, - 1 => EquipSlot.Body, - 2 => EquipSlot.Hands, - 3 => EquipSlot.Legs, - 4 => EquipSlot.Feet, - 5 => EquipSlot.Ears, - 6 => EquipSlot.Neck, - 7 => EquipSlot.Wrists, - 8 => EquipSlot.RFinger, - 9 => EquipSlot.LFinger, - 10 => EquipSlot.MainHand, - 11 => EquipSlot.OffHand, - _ => EquipSlot.Unknown, - }; - - public static uint ToIndex(this EquipSlot slot) - => slot switch - { - EquipSlot.Head => 0, - EquipSlot.Body => 1, - EquipSlot.Hands => 2, - EquipSlot.Legs => 3, - EquipSlot.Feet => 4, - EquipSlot.Ears => 5, - EquipSlot.Neck => 6, - EquipSlot.Wrists => 7, - EquipSlot.RFinger => 8, - EquipSlot.LFinger => 9, - EquipSlot.MainHand => 10, - EquipSlot.OffHand => 11, - _ => uint.MaxValue, - }; - - public static string ToSuffix(this EquipSlot value) - { - return value switch - { - EquipSlot.Head => "met", - EquipSlot.Hands => "glv", - EquipSlot.Legs => "dwn", - EquipSlot.Feet => "sho", - EquipSlot.Body => "top", - EquipSlot.Ears => "ear", - EquipSlot.Neck => "nek", - EquipSlot.RFinger => "rir", - EquipSlot.LFinger => "ril", - EquipSlot.Wrists => "wrs", - _ => "unk", - }; - } - - public static EquipSlot ToSlot(this EquipSlot value) - { - return value switch - { - EquipSlot.MainHand => EquipSlot.MainHand, - EquipSlot.OffHand => EquipSlot.OffHand, - EquipSlot.Head => EquipSlot.Head, - EquipSlot.Body => EquipSlot.Body, - EquipSlot.Hands => EquipSlot.Hands, - EquipSlot.Belt => EquipSlot.Belt, - EquipSlot.Legs => EquipSlot.Legs, - EquipSlot.Feet => EquipSlot.Feet, - EquipSlot.Ears => EquipSlot.Ears, - EquipSlot.Neck => EquipSlot.Neck, - EquipSlot.Wrists => EquipSlot.Wrists, - EquipSlot.RFinger => EquipSlot.RFinger, - EquipSlot.BothHand => EquipSlot.MainHand, - EquipSlot.LFinger => EquipSlot.RFinger, - EquipSlot.HeadBody => EquipSlot.Body, - EquipSlot.BodyHandsLegsFeet => EquipSlot.Body, - EquipSlot.SoulCrystal => EquipSlot.SoulCrystal, - EquipSlot.LegsFeet => EquipSlot.Legs, - EquipSlot.FullBody => EquipSlot.Body, - EquipSlot.BodyHands => EquipSlot.Body, - EquipSlot.BodyLegsFeet => EquipSlot.Body, - EquipSlot.ChestHands => EquipSlot.Body, - _ => EquipSlot.Unknown, - }; - } - - public static string ToName(this EquipSlot value) - { - return value switch - { - EquipSlot.Head => "Head", - EquipSlot.Hands => "Hands", - EquipSlot.Legs => "Legs", - EquipSlot.Feet => "Feet", - EquipSlot.Body => "Body", - EquipSlot.Ears => "Earrings", - EquipSlot.Neck => "Necklace", - EquipSlot.RFinger => "Right Ring", - EquipSlot.LFinger => "Left Ring", - EquipSlot.Wrists => "Bracelets", - EquipSlot.MainHand => "Primary Weapon", - EquipSlot.OffHand => "Secondary Weapon", - EquipSlot.Belt => "Belt", - EquipSlot.BothHand => "Primary Weapon", - EquipSlot.HeadBody => "Head and Body", - EquipSlot.BodyHandsLegsFeet => "Costume", - EquipSlot.SoulCrystal => "Soul Crystal", - EquipSlot.LegsFeet => "Bottom", - EquipSlot.FullBody => "Costume", - EquipSlot.BodyHands => "Top", - EquipSlot.BodyLegsFeet => "Costume", - EquipSlot.All => "Costume", - _ => "Unknown", - }; - } - - public static bool IsEquipment(this EquipSlot value) - { - return value switch - { - EquipSlot.Head => true, - EquipSlot.Hands => true, - EquipSlot.Legs => true, - EquipSlot.Feet => true, - EquipSlot.Body => true, - _ => false, - }; - } - - public static bool IsAccessory(this EquipSlot value) - { - return value switch - { - EquipSlot.Ears => true, - EquipSlot.Neck => true, - EquipSlot.RFinger => true, - EquipSlot.LFinger => true, - EquipSlot.Wrists => true, - _ => false, - }; - } - - public static bool IsEquipmentPiece(this EquipSlot value) - { - return value switch - { - // Accessories - EquipSlot.RFinger => true, - EquipSlot.Wrists => true, - EquipSlot.Ears => true, - EquipSlot.Neck => true, - // Equipment - EquipSlot.Head => true, - EquipSlot.Body => true, - EquipSlot.Hands => true, - EquipSlot.Legs => true, - EquipSlot.Feet => true, - EquipSlot.BodyHands => true, - EquipSlot.BodyHandsLegsFeet => true, - EquipSlot.BodyLegsFeet => true, - EquipSlot.FullBody => true, - EquipSlot.HeadBody => true, - EquipSlot.LegsFeet => true, - EquipSlot.ChestHands => true, - _ => false, - }; - } - - public static readonly EquipSlot[] EquipmentSlots = Enum.GetValues().Where(e => e.IsEquipment()).ToArray(); - public static readonly EquipSlot[] AccessorySlots = Enum.GetValues().Where(e => e.IsAccessory()).ToArray(); - public static readonly EquipSlot[] EqdpSlots = EquipmentSlots.Concat(AccessorySlots).ToArray(); - - public static readonly EquipSlot[] WeaponSlots = - { - EquipSlot.MainHand, - EquipSlot.OffHand, - }; - - public static readonly EquipSlot[] FullSlots = WeaponSlots.Concat(EqdpSlots).ToArray(); -} - -public static partial class Names -{ - public static readonly Dictionary SuffixToEquipSlot = new() - { - { EquipSlot.Head.ToSuffix(), EquipSlot.Head }, - { EquipSlot.Hands.ToSuffix(), EquipSlot.Hands }, - { EquipSlot.Legs.ToSuffix(), EquipSlot.Legs }, - { EquipSlot.Feet.ToSuffix(), EquipSlot.Feet }, - { EquipSlot.Body.ToSuffix(), EquipSlot.Body }, - { EquipSlot.Ears.ToSuffix(), EquipSlot.Ears }, - { EquipSlot.Neck.ToSuffix(), EquipSlot.Neck }, - { EquipSlot.RFinger.ToSuffix(), EquipSlot.RFinger }, - { EquipSlot.LFinger.ToSuffix(), EquipSlot.LFinger }, - { EquipSlot.Wrists.ToSuffix(), EquipSlot.Wrists }, - }; -} diff --git a/Penumbra.GameData/Enums/FileType.cs b/Penumbra.GameData/Enums/FileType.cs deleted file mode 100644 index 14c077b8..00000000 --- a/Penumbra.GameData/Enums/FileType.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; - -namespace Penumbra.GameData.Enums; - -public enum FileType : byte -{ - Unknown, - Sound, - Imc, - Vfx, - Animation, - Pap, - MetaInfo, - Material, - Texture, - Model, - Shader, - Font, - Environment, -} - -public static partial class Names -{ - public static readonly Dictionary< string, FileType > ExtensionToFileType = new() - { - { ".mdl", FileType.Model }, - { ".tex", FileType.Texture }, - { ".mtrl", FileType.Material }, - { ".atex", FileType.Animation }, - { ".avfx", FileType.Vfx }, - { ".scd", FileType.Sound }, - { ".imc", FileType.Imc }, - { ".pap", FileType.Pap }, - { ".eqp", FileType.MetaInfo }, - { ".eqdp", FileType.MetaInfo }, - { ".est", FileType.MetaInfo }, - { ".exd", FileType.MetaInfo }, - { ".exh", FileType.MetaInfo }, - { ".shpk", FileType.Shader }, - { ".shcd", FileType.Shader }, - { ".fdt", FileType.Font }, - { ".envb", FileType.Environment }, - }; -} \ No newline at end of file diff --git a/Penumbra.GameData/Enums/FullEquipType.cs b/Penumbra.GameData/Enums/FullEquipType.cs deleted file mode 100644 index 7d7ae512..00000000 --- a/Penumbra.GameData/Enums/FullEquipType.cs +++ /dev/null @@ -1,450 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Lumina.Excel.GeneratedSheets; - -namespace Penumbra.GameData.Enums; - -public enum FullEquipType : byte -{ - Unknown, - - Head, - Body, - Hands, - Legs, - Feet, - - Ears, - Neck, - Wrists, - Finger, - - Fists, // PGL, MNK - FistsOff, - Sword, // GLA, PLD Main - Axe, // MRD, WAR - Bow, // ARC, BRD - BowOff, - Lance, // LNC, DRG, - Staff, // THM, BLM, CNJ, WHM - Wand, // THM, BLM, CNJ, WHM Main - Book, // ACN, SMN, SCH - Daggers, // ROG, NIN - DaggersOff, - Broadsword, // DRK, - Gun, // MCH, - GunOff, - Orrery, // AST, - OrreryOff, - Katana, // SAM - KatanaOff, - Rapier, // RDM - RapierOff, - Cane, // BLU - Gunblade, // GNB, - Glaives, // DNC, - GlaivesOff, - Scythe, // RPR, - Nouliths, // SGE - Shield, // GLA, PLD, THM, BLM, CNJ, WHM Off - - Saw, // CRP - CrossPeinHammer, // BSM - RaisingHammer, // ARM - LapidaryHammer, // GSM - Knife, // LTW - Needle, // WVR - Alembic, // ALC - Frypan, // CUL - Pickaxe, // MIN - Hatchet, // BTN - FishingRod, // FSH - - ClawHammer, // CRP Off - File, // BSM Off - Pliers, // ARM Off - GrindingWheel, // GSM Off - Awl, // LTW Off - SpinningWheel, // WVR Off - Mortar, // ALC Off - CulinaryKnife, // CUL Off - Sledgehammer, // MIN Off - GardenScythe, // BTN Off - Gig, // FSH Off -} - -public static class FullEquipTypeExtensions -{ - internal static FullEquipType ToEquipType(this Item item) - { - var slot = (EquipSlot)item.EquipSlotCategory.Row; - var weapon = (WeaponCategory)item.ItemUICategory.Row; - return slot.ToEquipType(weapon); - } - - public static bool IsWeapon(this FullEquipType type) - => type switch - { - FullEquipType.Fists => true, - FullEquipType.Sword => true, - FullEquipType.Axe => true, - FullEquipType.Bow => true, - FullEquipType.Lance => true, - FullEquipType.Staff => true, - FullEquipType.Wand => true, - FullEquipType.Book => true, - FullEquipType.Daggers => true, - FullEquipType.Broadsword => true, - FullEquipType.Gun => true, - FullEquipType.Orrery => true, - FullEquipType.Katana => true, - FullEquipType.Rapier => true, - FullEquipType.Cane => true, - FullEquipType.Gunblade => true, - FullEquipType.Glaives => true, - FullEquipType.Scythe => true, - FullEquipType.Nouliths => true, - FullEquipType.Shield => true, - _ => false, - }; - - public static bool IsTool(this FullEquipType type) - => type switch - { - FullEquipType.Saw => true, - FullEquipType.CrossPeinHammer => true, - FullEquipType.RaisingHammer => true, - FullEquipType.LapidaryHammer => true, - FullEquipType.Knife => true, - FullEquipType.Needle => true, - FullEquipType.Alembic => true, - FullEquipType.Frypan => true, - FullEquipType.Pickaxe => true, - FullEquipType.Hatchet => true, - FullEquipType.FishingRod => true, - FullEquipType.ClawHammer => true, - FullEquipType.File => true, - FullEquipType.Pliers => true, - FullEquipType.GrindingWheel => true, - FullEquipType.Awl => true, - FullEquipType.SpinningWheel => true, - FullEquipType.Mortar => true, - FullEquipType.CulinaryKnife => true, - FullEquipType.Sledgehammer => true, - FullEquipType.GardenScythe => true, - FullEquipType.Gig => true, - _ => false, - }; - - public static bool IsEquipment(this FullEquipType type) - => type switch - { - FullEquipType.Head => true, - FullEquipType.Body => true, - FullEquipType.Hands => true, - FullEquipType.Legs => true, - FullEquipType.Feet => true, - _ => false, - }; - - public static bool IsAccessory(this FullEquipType type) - => type switch - { - FullEquipType.Ears => true, - FullEquipType.Neck => true, - FullEquipType.Wrists => true, - FullEquipType.Finger => true, - _ => false, - }; - - public static string ToName(this FullEquipType type) - => type switch - { - FullEquipType.Head => EquipSlot.Head.ToName(), - FullEquipType.Body => EquipSlot.Body.ToName(), - FullEquipType.Hands => EquipSlot.Hands.ToName(), - FullEquipType.Legs => EquipSlot.Legs.ToName(), - FullEquipType.Feet => EquipSlot.Feet.ToName(), - FullEquipType.Ears => EquipSlot.Ears.ToName(), - FullEquipType.Neck => EquipSlot.Neck.ToName(), - FullEquipType.Wrists => EquipSlot.Wrists.ToName(), - FullEquipType.Finger => "Ring", - FullEquipType.Fists => "Fist Weapon", - FullEquipType.FistsOff => "Fist Weapon (Offhand)", - FullEquipType.Sword => "Sword", - FullEquipType.Axe => "Axe", - FullEquipType.Bow => "Bow", - FullEquipType.BowOff => "Quiver", - FullEquipType.Lance => "Lance", - FullEquipType.Staff => "Staff", - FullEquipType.Wand => "Mace", - FullEquipType.Book => "Book", - FullEquipType.Daggers => "Dagger", - FullEquipType.DaggersOff => "Dagger (Offhand)", - FullEquipType.Broadsword => "Broadsword", - FullEquipType.Gun => "Gun", - FullEquipType.GunOff => "Aetherotransformer", - FullEquipType.Orrery => "Orrery", - FullEquipType.OrreryOff => "Card Holder", - FullEquipType.Katana => "Katana", - FullEquipType.KatanaOff => "Sheathe", - FullEquipType.Rapier => "Rapier", - FullEquipType.RapierOff => "Focus", - FullEquipType.Cane => "Cane", - FullEquipType.Gunblade => "Gunblade", - FullEquipType.Glaives => "Glaive", - FullEquipType.GlaivesOff => "Glaive (Offhand)", - FullEquipType.Scythe => "Scythe", - FullEquipType.Nouliths => "Nouliths", - FullEquipType.Shield => "Shield", - FullEquipType.Saw => "Saw", - FullEquipType.CrossPeinHammer => "Cross Pein Hammer", - FullEquipType.RaisingHammer => "Raising Hammer", - FullEquipType.LapidaryHammer => "Lapidary Hammer", - FullEquipType.Knife => "Round Knife", - FullEquipType.Needle => "Needle", - FullEquipType.Alembic => "Alembic", - FullEquipType.Frypan => "Frypan", - FullEquipType.Pickaxe => "Pickaxe", - FullEquipType.Hatchet => "Hatchet", - FullEquipType.FishingRod => "Fishing Rod", - FullEquipType.ClawHammer => "Clawhammer", - FullEquipType.File => "File", - FullEquipType.Pliers => "Pliers", - FullEquipType.GrindingWheel => "Grinding Wheel", - FullEquipType.Awl => "Awl", - FullEquipType.SpinningWheel => "Spinning Wheel", - FullEquipType.Mortar => "Mortar", - FullEquipType.CulinaryKnife => "Culinary Knife", - FullEquipType.Sledgehammer => "Sledgehammer", - FullEquipType.GardenScythe => "Garden Scythe", - FullEquipType.Gig => "Gig", - _ => "Unknown", - }; - - public static EquipSlot ToSlot(this FullEquipType type) - => type switch - { - FullEquipType.Head => EquipSlot.Head, - FullEquipType.Body => EquipSlot.Body, - FullEquipType.Hands => EquipSlot.Hands, - FullEquipType.Legs => EquipSlot.Legs, - FullEquipType.Feet => EquipSlot.Feet, - FullEquipType.Ears => EquipSlot.Ears, - FullEquipType.Neck => EquipSlot.Neck, - FullEquipType.Wrists => EquipSlot.Wrists, - FullEquipType.Finger => EquipSlot.RFinger, - FullEquipType.Fists => EquipSlot.MainHand, - FullEquipType.FistsOff => EquipSlot.OffHand, - FullEquipType.Sword => EquipSlot.MainHand, - FullEquipType.Axe => EquipSlot.MainHand, - FullEquipType.Bow => EquipSlot.MainHand, - FullEquipType.BowOff => EquipSlot.OffHand, - FullEquipType.Lance => EquipSlot.MainHand, - FullEquipType.Staff => EquipSlot.MainHand, - FullEquipType.Wand => EquipSlot.MainHand, - FullEquipType.Book => EquipSlot.MainHand, - FullEquipType.Daggers => EquipSlot.MainHand, - FullEquipType.DaggersOff => EquipSlot.OffHand, - FullEquipType.Broadsword => EquipSlot.MainHand, - FullEquipType.Gun => EquipSlot.MainHand, - FullEquipType.GunOff => EquipSlot.OffHand, - FullEquipType.Orrery => EquipSlot.MainHand, - FullEquipType.OrreryOff => EquipSlot.OffHand, - FullEquipType.Katana => EquipSlot.MainHand, - FullEquipType.KatanaOff => EquipSlot.OffHand, - FullEquipType.Rapier => EquipSlot.MainHand, - FullEquipType.RapierOff => EquipSlot.OffHand, - FullEquipType.Cane => EquipSlot.MainHand, - FullEquipType.Gunblade => EquipSlot.MainHand, - FullEquipType.Glaives => EquipSlot.MainHand, - FullEquipType.GlaivesOff => EquipSlot.OffHand, - FullEquipType.Scythe => EquipSlot.MainHand, - FullEquipType.Nouliths => EquipSlot.MainHand, - FullEquipType.Shield => EquipSlot.OffHand, - FullEquipType.Saw => EquipSlot.MainHand, - FullEquipType.CrossPeinHammer => EquipSlot.MainHand, - FullEquipType.RaisingHammer => EquipSlot.MainHand, - FullEquipType.LapidaryHammer => EquipSlot.MainHand, - FullEquipType.Knife => EquipSlot.MainHand, - FullEquipType.Needle => EquipSlot.MainHand, - FullEquipType.Alembic => EquipSlot.MainHand, - FullEquipType.Frypan => EquipSlot.MainHand, - FullEquipType.Pickaxe => EquipSlot.MainHand, - FullEquipType.Hatchet => EquipSlot.MainHand, - FullEquipType.FishingRod => EquipSlot.MainHand, - FullEquipType.ClawHammer => EquipSlot.OffHand, - FullEquipType.File => EquipSlot.OffHand, - FullEquipType.Pliers => EquipSlot.OffHand, - FullEquipType.GrindingWheel => EquipSlot.OffHand, - FullEquipType.Awl => EquipSlot.OffHand, - FullEquipType.SpinningWheel => EquipSlot.OffHand, - FullEquipType.Mortar => EquipSlot.OffHand, - FullEquipType.CulinaryKnife => EquipSlot.OffHand, - FullEquipType.Sledgehammer => EquipSlot.OffHand, - FullEquipType.GardenScythe => EquipSlot.OffHand, - FullEquipType.Gig => EquipSlot.OffHand, - _ => EquipSlot.Unknown, - }; - - public static FullEquipType ToEquipType(this EquipSlot slot, WeaponCategory category = WeaponCategory.Unknown, bool mainhand = true) - => slot switch - { - EquipSlot.Head => FullEquipType.Head, - EquipSlot.Body => FullEquipType.Body, - EquipSlot.Hands => FullEquipType.Hands, - EquipSlot.Legs => FullEquipType.Legs, - EquipSlot.Feet => FullEquipType.Feet, - EquipSlot.Ears => FullEquipType.Ears, - EquipSlot.Neck => FullEquipType.Neck, - EquipSlot.Wrists => FullEquipType.Wrists, - EquipSlot.RFinger => FullEquipType.Finger, - EquipSlot.LFinger => FullEquipType.Finger, - EquipSlot.HeadBody => FullEquipType.Body, - EquipSlot.BodyHandsLegsFeet => FullEquipType.Body, - EquipSlot.LegsFeet => FullEquipType.Legs, - EquipSlot.FullBody => FullEquipType.Body, - EquipSlot.BodyHands => FullEquipType.Body, - EquipSlot.BodyLegsFeet => FullEquipType.Body, - EquipSlot.ChestHands => FullEquipType.Body, - EquipSlot.MainHand => category.ToEquipType(mainhand), - EquipSlot.OffHand => category.ToEquipType(mainhand), - EquipSlot.BothHand => category.ToEquipType(mainhand), - _ => FullEquipType.Unknown, - }; - - public static FullEquipType ToEquipType(this WeaponCategory category, bool mainhand = true) - => category switch - { - WeaponCategory.Pugilist when mainhand => FullEquipType.Fists, - WeaponCategory.Pugilist => FullEquipType.FistsOff, - WeaponCategory.Gladiator => FullEquipType.Sword, - WeaponCategory.Marauder => FullEquipType.Axe, - WeaponCategory.Archer when mainhand => FullEquipType.Bow, - WeaponCategory.Archer => FullEquipType.BowOff, - WeaponCategory.Lancer => FullEquipType.Lance, - WeaponCategory.Thaumaturge1 => FullEquipType.Wand, - WeaponCategory.Thaumaturge2 => FullEquipType.Staff, - WeaponCategory.Conjurer1 => FullEquipType.Wand, - WeaponCategory.Conjurer2 => FullEquipType.Staff, - WeaponCategory.Arcanist => FullEquipType.Book, - WeaponCategory.Shield => FullEquipType.Shield, - WeaponCategory.CarpenterMain => FullEquipType.Saw, - WeaponCategory.CarpenterOff => FullEquipType.ClawHammer, - WeaponCategory.BlacksmithMain => FullEquipType.CrossPeinHammer, - WeaponCategory.BlacksmithOff => FullEquipType.File, - WeaponCategory.ArmorerMain => FullEquipType.RaisingHammer, - WeaponCategory.ArmorerOff => FullEquipType.Pliers, - WeaponCategory.GoldsmithMain => FullEquipType.LapidaryHammer, - WeaponCategory.GoldsmithOff => FullEquipType.GrindingWheel, - WeaponCategory.LeatherworkerMain => FullEquipType.Knife, - WeaponCategory.LeatherworkerOff => FullEquipType.Awl, - WeaponCategory.WeaverMain => FullEquipType.Needle, - WeaponCategory.WeaverOff => FullEquipType.SpinningWheel, - WeaponCategory.AlchemistMain => FullEquipType.Alembic, - WeaponCategory.AlchemistOff => FullEquipType.Mortar, - WeaponCategory.CulinarianMain => FullEquipType.Frypan, - WeaponCategory.CulinarianOff => FullEquipType.CulinaryKnife, - WeaponCategory.MinerMain => FullEquipType.Pickaxe, - WeaponCategory.MinerOff => FullEquipType.Sledgehammer, - WeaponCategory.BotanistMain => FullEquipType.Hatchet, - WeaponCategory.BotanistOff => FullEquipType.GardenScythe, - WeaponCategory.FisherMain => FullEquipType.FishingRod, - WeaponCategory.FisherOff => FullEquipType.Gig, - WeaponCategory.Rogue when mainhand => FullEquipType.Daggers, - WeaponCategory.Rogue => FullEquipType.DaggersOff, - WeaponCategory.DarkKnight => FullEquipType.Broadsword, - WeaponCategory.Machinist when mainhand => FullEquipType.Gun, - WeaponCategory.Machinist => FullEquipType.GunOff, - WeaponCategory.Astrologian when mainhand => FullEquipType.Orrery, - WeaponCategory.Astrologian => FullEquipType.OrreryOff, - WeaponCategory.Samurai when mainhand => FullEquipType.Katana, - WeaponCategory.Samurai => FullEquipType.KatanaOff, - WeaponCategory.RedMage when mainhand => FullEquipType.Rapier, - WeaponCategory.RedMage => FullEquipType.RapierOff, - WeaponCategory.Scholar => FullEquipType.Book, - WeaponCategory.BlueMage => FullEquipType.Cane, - WeaponCategory.Gunbreaker => FullEquipType.Gunblade, - WeaponCategory.Dancer when mainhand => FullEquipType.Glaives, - WeaponCategory.Dancer => FullEquipType.GlaivesOff, - WeaponCategory.Reaper => FullEquipType.Scythe, - WeaponCategory.Sage => FullEquipType.Nouliths, - _ => FullEquipType.Unknown, - }; - - public static FullEquipType ValidOffhand(this FullEquipType type) - => type switch - { - FullEquipType.Fists => FullEquipType.FistsOff, - FullEquipType.Sword => FullEquipType.Shield, - FullEquipType.Wand => FullEquipType.Shield, - FullEquipType.Daggers => FullEquipType.DaggersOff, - FullEquipType.Gun => FullEquipType.GunOff, - FullEquipType.Orrery => FullEquipType.OrreryOff, - FullEquipType.Rapier => FullEquipType.RapierOff, - FullEquipType.Glaives => FullEquipType.GlaivesOff, - FullEquipType.Bow => FullEquipType.BowOff, - FullEquipType.Katana => FullEquipType.KatanaOff, - _ => FullEquipType.Unknown, - }; - - public static FullEquipType Offhand(this FullEquipType type) - => type switch - { - FullEquipType.Fists => FullEquipType.FistsOff, - FullEquipType.Sword => FullEquipType.Shield, - FullEquipType.Wand => FullEquipType.Shield, - FullEquipType.Daggers => FullEquipType.DaggersOff, - FullEquipType.Gun => FullEquipType.GunOff, - FullEquipType.Orrery => FullEquipType.OrreryOff, - FullEquipType.Rapier => FullEquipType.RapierOff, - FullEquipType.Glaives => FullEquipType.GlaivesOff, - FullEquipType.Bow => FullEquipType.BowOff, - FullEquipType.Katana => FullEquipType.KatanaOff, - FullEquipType.Saw => FullEquipType.ClawHammer, - FullEquipType.CrossPeinHammer => FullEquipType.File, - FullEquipType.RaisingHammer => FullEquipType.Pliers, - FullEquipType.LapidaryHammer => FullEquipType.GrindingWheel, - FullEquipType.Knife => FullEquipType.Awl, - FullEquipType.Needle => FullEquipType.SpinningWheel, - FullEquipType.Alembic => FullEquipType.Mortar, - FullEquipType.Frypan => FullEquipType.CulinaryKnife, - FullEquipType.Pickaxe => FullEquipType.Sledgehammer, - FullEquipType.Hatchet => FullEquipType.GardenScythe, - FullEquipType.FishingRod => FullEquipType.Gig, - _ => FullEquipType.Unknown, - }; - - internal static string OffhandTypeSuffix(this FullEquipType type) - => type switch - { - FullEquipType.FistsOff => " (Offhand)", - FullEquipType.DaggersOff => " (Offhand)", - FullEquipType.GunOff => " (Aetherotransformer)", - FullEquipType.OrreryOff => " (Card Holder)", - FullEquipType.RapierOff => " (Focus)", - FullEquipType.GlaivesOff => " (Offhand)", - FullEquipType.BowOff => " (Quiver)", - FullEquipType.KatanaOff => " (Sheathe)", - _ => string.Empty, - }; - - public static bool IsOffhandType(this FullEquipType type) - => type.OffhandTypeSuffix().Length > 0; - - public static readonly IReadOnlyList WeaponTypes - = Enum.GetValues().Where(v => v.IsWeapon()).ToArray(); - - public static readonly IReadOnlyList ToolTypes - = Enum.GetValues().Where(v => v.IsTool()).ToArray(); - - public static readonly IReadOnlyList EquipmentTypes - = Enum.GetValues().Where(v => v.IsEquipment()).ToArray(); - - public static readonly IReadOnlyList AccessoryTypes - = Enum.GetValues().Where(v => v.IsAccessory()).ToArray(); - - public static readonly IReadOnlyList OffhandTypes - = Enum.GetValues().Where(v => v.OffhandTypeSuffix().Length > 0).ToArray(); -} diff --git a/Penumbra.GameData/Enums/ModelTypeExtensions.cs b/Penumbra.GameData/Enums/ModelTypeExtensions.cs deleted file mode 100644 index e872aef8..00000000 --- a/Penumbra.GameData/Enums/ModelTypeExtensions.cs +++ /dev/null @@ -1,26 +0,0 @@ -using FFXIVClientStructs.FFXIV.Client.Graphics.Scene; - -namespace Penumbra.GameData.Enums; - -public static class ModelTypeExtensions -{ - public static string ToName(this CharacterBase.ModelType type) - => type switch - { - CharacterBase.ModelType.DemiHuman => "Demihuman", - CharacterBase.ModelType.Monster => "Monster", - CharacterBase.ModelType.Human => "Human", - CharacterBase.ModelType.Weapon => "Weapon", - _ => string.Empty, - }; - - public static CharacterBase.ModelType ToModelType(this ObjectType type) - => type switch - { - ObjectType.DemiHuman => CharacterBase.ModelType.DemiHuman, - ObjectType.Monster => CharacterBase.ModelType.Monster, - ObjectType.Character => CharacterBase.ModelType.Human, - ObjectType.Weapon => CharacterBase.ModelType.Weapon, - _ => 0, - }; -} diff --git a/Penumbra.GameData/Enums/ObjectType.cs b/Penumbra.GameData/Enums/ObjectType.cs deleted file mode 100644 index d081e6a6..00000000 --- a/Penumbra.GameData/Enums/ObjectType.cs +++ /dev/null @@ -1,53 +0,0 @@ -namespace Penumbra.GameData.Enums; - -public enum ObjectType : byte -{ - Unknown, - Vfx, - DemiHuman, - Accessory, - World, - Housing, - Monster, - Icon, - LoadingScreen, - Map, - Interface, - Equipment, - Character, - Weapon, - Font, -} - -public static class ObjectTypeExtensions -{ - public static string ToName( this ObjectType type ) - => type switch - { - ObjectType.Vfx => "Visual Effect", - ObjectType.DemiHuman => "Demi Human", - ObjectType.Accessory => "Accessory", - ObjectType.World => "Doodad", - ObjectType.Housing => "Housing Object", - ObjectType.Monster => "Monster", - ObjectType.Icon => "Icon", - ObjectType.LoadingScreen => "Loading Screen", - ObjectType.Map => "Map", - ObjectType.Interface => "UI Element", - ObjectType.Equipment => "Equipment", - ObjectType.Character => "Character", - ObjectType.Weapon => "Weapon", - ObjectType.Font => "Font", - _ => "Unknown", - }; - - - public static readonly ObjectType[] ValidImcTypes = - { - ObjectType.Equipment, - ObjectType.Accessory, - ObjectType.DemiHuman, - ObjectType.Monster, - ObjectType.Weapon, - }; -} \ No newline at end of file diff --git a/Penumbra.GameData/Enums/Race.cs b/Penumbra.GameData/Enums/Race.cs deleted file mode 100644 index d1d859b7..00000000 --- a/Penumbra.GameData/Enums/Race.cs +++ /dev/null @@ -1,510 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using static Penumbra.GameData.Enums.GenderRace; - -namespace Penumbra.GameData.Enums; - -public enum Race : byte -{ - Unknown, - Hyur, - Elezen, - Lalafell, - Miqote, - Roegadyn, - AuRa, - Hrothgar, - Viera, -} - -public enum Gender : byte -{ - Unknown, - Male, - Female, - MaleNpc, - FemaleNpc, -} - -public enum ModelRace : byte -{ - Unknown, - Midlander, - Highlander, - Elezen, - Lalafell, - Miqote, - Roegadyn, - AuRa, - Hrothgar, - Viera, -} - -public enum SubRace : byte -{ - Unknown, - Midlander, - Highlander, - Wildwood, - Duskwight, - Plainsfolk, - Dunesfolk, - SeekerOfTheSun, - KeeperOfTheMoon, - Seawolf, - Hellsguard, - Raen, - Xaela, - Helion, - Lost, - Rava, - Veena, -} - -// The combined gender-race-npc numerical code as used by the game. -public enum GenderRace : ushort -{ - Unknown = 0, - MidlanderMale = 0101, - MidlanderMaleNpc = 0104, - MidlanderFemale = 0201, - MidlanderFemaleNpc = 0204, - HighlanderMale = 0301, - HighlanderMaleNpc = 0304, - HighlanderFemale = 0401, - HighlanderFemaleNpc = 0404, - ElezenMale = 0501, - ElezenMaleNpc = 0504, - ElezenFemale = 0601, - ElezenFemaleNpc = 0604, - MiqoteMale = 0701, - MiqoteMaleNpc = 0704, - MiqoteFemale = 0801, - MiqoteFemaleNpc = 0804, - RoegadynMale = 0901, - RoegadynMaleNpc = 0904, - RoegadynFemale = 1001, - RoegadynFemaleNpc = 1004, - LalafellMale = 1101, - LalafellMaleNpc = 1104, - LalafellFemale = 1201, - LalafellFemaleNpc = 1204, - AuRaMale = 1301, - AuRaMaleNpc = 1304, - AuRaFemale = 1401, - AuRaFemaleNpc = 1404, - HrothgarMale = 1501, - HrothgarMaleNpc = 1504, - HrothgarFemale = 1601, - HrothgarFemaleNpc = 1604, - VieraMale = 1701, - VieraMaleNpc = 1704, - VieraFemale = 1801, - VieraFemaleNpc = 1804, - UnknownMaleNpc = 9104, - UnknownFemaleNpc = 9204, -} - -public static class RaceEnumExtensions -{ - public static Race ToRace(this ModelRace race) - { - return race switch - { - ModelRace.Unknown => Race.Unknown, - ModelRace.Midlander => Race.Hyur, - ModelRace.Highlander => Race.Hyur, - ModelRace.Elezen => Race.Elezen, - ModelRace.Lalafell => Race.Lalafell, - ModelRace.Miqote => Race.Miqote, - ModelRace.Roegadyn => Race.Roegadyn, - ModelRace.AuRa => Race.AuRa, - ModelRace.Hrothgar => Race.Hrothgar, - ModelRace.Viera => Race.Viera, - _ => throw new ArgumentOutOfRangeException(nameof(race), race, null), - }; - } - - public static Race ToRace(this SubRace subRace) - { - return subRace switch - { - SubRace.Unknown => Race.Unknown, - SubRace.Midlander => Race.Hyur, - SubRace.Highlander => Race.Hyur, - SubRace.Wildwood => Race.Elezen, - SubRace.Duskwight => Race.Elezen, - SubRace.Plainsfolk => Race.Lalafell, - SubRace.Dunesfolk => Race.Lalafell, - SubRace.SeekerOfTheSun => Race.Miqote, - SubRace.KeeperOfTheMoon => Race.Miqote, - SubRace.Seawolf => Race.Roegadyn, - SubRace.Hellsguard => Race.Roegadyn, - SubRace.Raen => Race.AuRa, - SubRace.Xaela => Race.AuRa, - SubRace.Helion => Race.Hrothgar, - SubRace.Lost => Race.Hrothgar, - SubRace.Rava => Race.Viera, - SubRace.Veena => Race.Viera, - _ => throw new ArgumentOutOfRangeException(nameof(subRace), subRace, null), - }; - } - - public static string ToName(this ModelRace modelRace) - { - return modelRace switch - { - ModelRace.Midlander => SubRace.Midlander.ToName(), - ModelRace.Highlander => SubRace.Highlander.ToName(), - ModelRace.Elezen => Race.Elezen.ToName(), - ModelRace.Lalafell => Race.Lalafell.ToName(), - ModelRace.Miqote => Race.Miqote.ToName(), - ModelRace.Roegadyn => Race.Roegadyn.ToName(), - ModelRace.AuRa => Race.AuRa.ToName(), - ModelRace.Hrothgar => Race.Hrothgar.ToName(), - ModelRace.Viera => Race.Viera.ToName(), - _ => Race.Unknown.ToName(), - }; - } - - public static string ToName(this Race race) - { - return race switch - { - Race.Hyur => "Hyur", - Race.Elezen => "Elezen", - Race.Lalafell => "Lalafell", - Race.Miqote => "Miqo'te", - Race.Roegadyn => "Roegadyn", - Race.AuRa => "Au Ra", - Race.Hrothgar => "Hrothgar", - Race.Viera => "Viera", - _ => "Unknown", - }; - } - - public static string ToName(this Gender gender) - { - return gender switch - { - Gender.Male => "Male", - Gender.Female => "Female", - Gender.MaleNpc => "Male (NPC)", - Gender.FemaleNpc => "Female (NPC)", - _ => "Unknown", - }; - } - - public static string ToName(this SubRace subRace) - { - return subRace switch - { - SubRace.Midlander => "Midlander", - SubRace.Highlander => "Highlander", - SubRace.Wildwood => "Wildwood", - SubRace.Duskwight => "Duskwight", - SubRace.Plainsfolk => "Plainsfolk", - SubRace.Dunesfolk => "Dunesfolk", - SubRace.SeekerOfTheSun => "Seeker Of The Sun", - SubRace.KeeperOfTheMoon => "Keeper Of The Moon", - SubRace.Seawolf => "Seawolf", - SubRace.Hellsguard => "Hellsguard", - SubRace.Raen => "Raen", - SubRace.Xaela => "Xaela", - SubRace.Helion => "Hellion", - SubRace.Lost => "Lost", - SubRace.Rava => "Rava", - SubRace.Veena => "Veena", - _ => "Unknown", - }; - } - - public static string ToShortName(this SubRace subRace) - { - return subRace switch - { - SubRace.SeekerOfTheSun => "Sunseeker", - SubRace.KeeperOfTheMoon => "Moonkeeper", - _ => subRace.ToName(), - }; - } - - public static bool FitsRace(this SubRace subRace, Race race) - => subRace.ToRace() == race; - - public static byte ToByte(this Gender gender, ModelRace modelRace) - => (byte)((int)gender | ((int)modelRace << 3)); - - public static byte ToByte(this ModelRace modelRace, Gender gender) - => gender.ToByte(modelRace); - - public static byte ToByte(this GenderRace value) - { - var (gender, race) = value.Split(); - return gender.ToByte(race); - } - - public static (Gender, ModelRace) Split(this GenderRace value) - { - return value switch - { - Unknown => (Gender.Unknown, ModelRace.Unknown), - MidlanderMale => (Gender.Male, ModelRace.Midlander), - MidlanderMaleNpc => (Gender.MaleNpc, ModelRace.Midlander), - MidlanderFemale => (Gender.Female, ModelRace.Midlander), - MidlanderFemaleNpc => (Gender.FemaleNpc, ModelRace.Midlander), - HighlanderMale => (Gender.Male, ModelRace.Highlander), - HighlanderMaleNpc => (Gender.MaleNpc, ModelRace.Highlander), - HighlanderFemale => (Gender.Female, ModelRace.Highlander), - HighlanderFemaleNpc => (Gender.FemaleNpc, ModelRace.Highlander), - ElezenMale => (Gender.Male, ModelRace.Elezen), - ElezenMaleNpc => (Gender.MaleNpc, ModelRace.Elezen), - ElezenFemale => (Gender.Female, ModelRace.Elezen), - ElezenFemaleNpc => (Gender.FemaleNpc, ModelRace.Elezen), - LalafellMale => (Gender.Male, ModelRace.Lalafell), - LalafellMaleNpc => (Gender.MaleNpc, ModelRace.Lalafell), - LalafellFemale => (Gender.Female, ModelRace.Lalafell), - LalafellFemaleNpc => (Gender.FemaleNpc, ModelRace.Lalafell), - MiqoteMale => (Gender.Male, ModelRace.Miqote), - MiqoteMaleNpc => (Gender.MaleNpc, ModelRace.Miqote), - MiqoteFemale => (Gender.Female, ModelRace.Miqote), - MiqoteFemaleNpc => (Gender.FemaleNpc, ModelRace.Miqote), - RoegadynMale => (Gender.Male, ModelRace.Roegadyn), - RoegadynMaleNpc => (Gender.MaleNpc, ModelRace.Roegadyn), - RoegadynFemale => (Gender.Female, ModelRace.Roegadyn), - RoegadynFemaleNpc => (Gender.FemaleNpc, ModelRace.Roegadyn), - AuRaMale => (Gender.Male, ModelRace.AuRa), - AuRaMaleNpc => (Gender.MaleNpc, ModelRace.AuRa), - AuRaFemale => (Gender.Female, ModelRace.AuRa), - AuRaFemaleNpc => (Gender.FemaleNpc, ModelRace.AuRa), - HrothgarMale => (Gender.Male, ModelRace.Hrothgar), - HrothgarMaleNpc => (Gender.MaleNpc, ModelRace.Hrothgar), - HrothgarFemale => (Gender.Female, ModelRace.Hrothgar), - HrothgarFemaleNpc => (Gender.FemaleNpc, ModelRace.Hrothgar), - VieraMale => (Gender.Male, ModelRace.Viera), - VieraMaleNpc => (Gender.Male, ModelRace.Viera), - VieraFemale => (Gender.Female, ModelRace.Viera), - VieraFemaleNpc => (Gender.FemaleNpc, ModelRace.Viera), - UnknownMaleNpc => (Gender.MaleNpc, ModelRace.Unknown), - UnknownFemaleNpc => (Gender.FemaleNpc, ModelRace.Unknown), - _ => throw new InvalidEnumArgumentException(), - }; - } - - public static bool IsValid(this GenderRace value) - => value != Unknown && Enum.IsDefined(typeof(GenderRace), value); - - public static string ToRaceCode(this GenderRace value) - { - return value switch - { - MidlanderMale => "0101", - MidlanderMaleNpc => "0104", - MidlanderFemale => "0201", - MidlanderFemaleNpc => "0204", - HighlanderMale => "0301", - HighlanderMaleNpc => "0304", - HighlanderFemale => "0401", - HighlanderFemaleNpc => "0404", - ElezenMale => "0501", - ElezenMaleNpc => "0504", - ElezenFemale => "0601", - ElezenFemaleNpc => "0604", - MiqoteMale => "0701", - MiqoteMaleNpc => "0704", - MiqoteFemale => "0801", - MiqoteFemaleNpc => "0804", - RoegadynMale => "0901", - RoegadynMaleNpc => "0904", - RoegadynFemale => "1001", - RoegadynFemaleNpc => "1004", - LalafellMale => "1101", - LalafellMaleNpc => "1104", - LalafellFemale => "1201", - LalafellFemaleNpc => "1204", - AuRaMale => "1301", - AuRaMaleNpc => "1304", - AuRaFemale => "1401", - AuRaFemaleNpc => "1404", - HrothgarMale => "1501", - HrothgarMaleNpc => "1504", - HrothgarFemale => "1601", - HrothgarFemaleNpc => "1604", - VieraMale => "1701", - VieraMaleNpc => "1704", - VieraFemale => "1801", - VieraFemaleNpc => "1804", - UnknownMaleNpc => "9104", - UnknownFemaleNpc => "9204", - _ => string.Empty, - }; - } - - public static GenderRace[] Dependencies(this GenderRace raceCode) - => DependencyList.TryGetValue(raceCode, out var dep) ? dep : Array.Empty(); - - public static IEnumerable OnlyDependencies(this GenderRace raceCode) - => DependencyList.TryGetValue(raceCode, out var dep) ? dep.Skip(1) : Array.Empty(); - - private static readonly Dictionary DependencyList = new() - { - // @formatter:off - [MidlanderMale] = new[]{ MidlanderMale }, - [HighlanderMale] = new[]{ HighlanderMale, MidlanderMale }, - [ElezenMale] = new[]{ ElezenMale, MidlanderMale }, - [MiqoteMale] = new[]{ MiqoteMale, MidlanderMale }, - [RoegadynMale] = new[]{ RoegadynMale, MidlanderMale }, - [LalafellMale] = new[]{ LalafellMale, MidlanderMale }, - [AuRaMale] = new[]{ AuRaMale, MidlanderMale }, - [HrothgarMale] = new[]{ HrothgarMale, RoegadynMale, MidlanderMale }, - [VieraMale] = new[]{ VieraMale, MidlanderMale }, - [MidlanderFemale] = new[]{ MidlanderFemale, MidlanderMale }, - [HighlanderFemale] = new[]{ HighlanderFemale, MidlanderFemale, MidlanderMale }, - [ElezenFemale] = new[]{ ElezenFemale, MidlanderFemale, MidlanderMale }, - [MiqoteFemale] = new[]{ MiqoteFemale, MidlanderFemale, MidlanderMale }, - [RoegadynFemale] = new[]{ RoegadynFemale, MidlanderFemale, MidlanderMale }, - [LalafellFemale] = new[]{ LalafellFemale, LalafellMale, MidlanderMale }, - [AuRaFemale] = new[]{ AuRaFemale, MidlanderFemale, MidlanderMale }, - [HrothgarFemale] = new[]{ HrothgarFemale, RoegadynFemale, MidlanderFemale, MidlanderMale }, - [VieraFemale] = new[]{ VieraFemale, MidlanderFemale, MidlanderMale }, - [MidlanderMaleNpc] = new[]{ MidlanderMaleNpc, MidlanderMale }, - [HighlanderMaleNpc] = new[]{ HighlanderMaleNpc, HighlanderMale, MidlanderMaleNpc, MidlanderMale }, - [ElezenMaleNpc] = new[]{ ElezenMaleNpc, ElezenMale, MidlanderMaleNpc, MidlanderMale }, - [MiqoteMaleNpc] = new[]{ MiqoteMaleNpc, MiqoteMale, MidlanderMaleNpc, MidlanderMale }, - [RoegadynMaleNpc] = new[]{ RoegadynMaleNpc, RoegadynMale, MidlanderMaleNpc, MidlanderMale }, - [LalafellMaleNpc] = new[]{ LalafellMaleNpc, LalafellMale, MidlanderMaleNpc, MidlanderMale }, - [AuRaMaleNpc] = new[]{ AuRaMaleNpc, AuRaMale, MidlanderMaleNpc, MidlanderMale }, - [HrothgarMaleNpc] = new[]{ HrothgarMaleNpc, HrothgarMale, RoegadynMaleNpc, RoegadynMale, MidlanderMaleNpc, MidlanderMale }, - [VieraMaleNpc] = new[]{ VieraMaleNpc, VieraMale, MidlanderMaleNpc, MidlanderMale }, - [MidlanderFemaleNpc] = new[]{ MidlanderFemaleNpc, MidlanderFemale, MidlanderMaleNpc, MidlanderMale }, - [HighlanderFemaleNpc] = new[]{ HighlanderFemaleNpc, HighlanderFemale, MidlanderFemaleNpc, MidlanderFemale, MidlanderMaleNpc, MidlanderMale }, - [ElezenFemaleNpc] = new[]{ ElezenFemaleNpc, ElezenFemale, MidlanderFemaleNpc, MidlanderFemale, MidlanderMaleNpc, MidlanderMale }, - [MiqoteFemaleNpc] = new[]{ MiqoteFemaleNpc, MiqoteFemale, MidlanderFemaleNpc, MidlanderFemale, MidlanderMaleNpc, MidlanderMale }, - [RoegadynFemaleNpc] = new[]{ RoegadynFemaleNpc, RoegadynFemale, MidlanderFemaleNpc, MidlanderFemale, MidlanderMaleNpc, MidlanderMale }, - [LalafellFemaleNpc] = new[]{ LalafellFemaleNpc, LalafellFemale, LalafellMaleNpc, LalafellMale, MidlanderMaleNpc, MidlanderMale }, - [AuRaFemaleNpc] = new[]{ AuRaFemaleNpc, AuRaFemale, MidlanderFemaleNpc, MidlanderFemale, MidlanderMaleNpc, MidlanderMale }, - [HrothgarFemaleNpc] = new[]{ HrothgarFemaleNpc, HrothgarFemale, RoegadynFemaleNpc, RoegadynFemale, MidlanderFemaleNpc, MidlanderFemale, MidlanderMaleNpc, MidlanderMale }, - [VieraFemaleNpc] = new[]{ VieraFemaleNpc, VieraFemale, MidlanderFemaleNpc, MidlanderFemale, MidlanderMaleNpc, MidlanderMale }, - [UnknownMaleNpc] = new[]{ UnknownMaleNpc, MidlanderMaleNpc, MidlanderMale }, - [UnknownFemaleNpc] = new[]{ UnknownFemaleNpc, MidlanderFemaleNpc, MidlanderFemale, MidlanderMaleNpc, MidlanderMale }, - // @formatter:on - }; -} - -public static partial class Names -{ - public static GenderRace GenderRaceFromCode(string code) - { - return code switch - { - "0101" => MidlanderMale, - "0104" => MidlanderMaleNpc, - "0201" => MidlanderFemale, - "0204" => MidlanderFemaleNpc, - "0301" => HighlanderMale, - "0304" => HighlanderMaleNpc, - "0401" => HighlanderFemale, - "0404" => HighlanderFemaleNpc, - "0501" => ElezenMale, - "0504" => ElezenMaleNpc, - "0601" => ElezenFemale, - "0604" => ElezenFemaleNpc, - "0701" => MiqoteMale, - "0704" => MiqoteMaleNpc, - "0801" => MiqoteFemale, - "0804" => MiqoteFemaleNpc, - "0901" => RoegadynMale, - "0904" => RoegadynMaleNpc, - "1001" => RoegadynFemale, - "1004" => RoegadynFemaleNpc, - "1101" => LalafellMale, - "1104" => LalafellMaleNpc, - "1201" => LalafellFemale, - "1204" => LalafellFemaleNpc, - "1301" => AuRaMale, - "1304" => AuRaMaleNpc, - "1401" => AuRaFemale, - "1404" => AuRaFemaleNpc, - "1501" => HrothgarMale, - "1504" => HrothgarMaleNpc, - "1601" => HrothgarFemale, - "1604" => HrothgarFemaleNpc, - "1701" => VieraMale, - "1704" => VieraMaleNpc, - "1801" => VieraFemale, - "1804" => VieraFemaleNpc, - "9104" => UnknownMaleNpc, - "9204" => UnknownFemaleNpc, - _ => Unknown, - }; - } - - public static GenderRace GenderRaceFromByte(byte value) - { - var gender = (Gender)(value & 0b111); - var race = (ModelRace)(value >> 3); - return CombinedRace(gender, race); - } - - public static GenderRace CombinedRace(Gender gender, ModelRace modelRace) - { - return gender switch - { - Gender.Male => modelRace switch - { - ModelRace.Midlander => MidlanderMale, - ModelRace.Highlander => HighlanderMale, - ModelRace.Elezen => ElezenMale, - ModelRace.Lalafell => LalafellMale, - ModelRace.Miqote => MiqoteMale, - ModelRace.Roegadyn => RoegadynMale, - ModelRace.AuRa => AuRaMale, - ModelRace.Hrothgar => HrothgarMale, - ModelRace.Viera => VieraMale, - _ => Unknown, - }, - Gender.MaleNpc => modelRace switch - { - ModelRace.Midlander => MidlanderMaleNpc, - ModelRace.Highlander => HighlanderMaleNpc, - ModelRace.Elezen => ElezenMaleNpc, - ModelRace.Lalafell => LalafellMaleNpc, - ModelRace.Miqote => MiqoteMaleNpc, - ModelRace.Roegadyn => RoegadynMaleNpc, - ModelRace.AuRa => AuRaMaleNpc, - ModelRace.Hrothgar => HrothgarMaleNpc, - ModelRace.Viera => VieraMaleNpc, - _ => Unknown, - }, - Gender.Female => modelRace switch - { - ModelRace.Midlander => MidlanderFemale, - ModelRace.Highlander => HighlanderFemale, - ModelRace.Elezen => ElezenFemale, - ModelRace.Lalafell => LalafellFemale, - ModelRace.Miqote => MiqoteFemale, - ModelRace.Roegadyn => RoegadynFemale, - ModelRace.AuRa => AuRaFemale, - ModelRace.Hrothgar => HrothgarFemale, - ModelRace.Viera => VieraFemale, - _ => Unknown, - }, - Gender.FemaleNpc => modelRace switch - { - ModelRace.Midlander => MidlanderFemaleNpc, - ModelRace.Highlander => HighlanderFemaleNpc, - ModelRace.Elezen => ElezenFemaleNpc, - ModelRace.Lalafell => LalafellFemaleNpc, - ModelRace.Miqote => MiqoteFemaleNpc, - ModelRace.Roegadyn => RoegadynFemaleNpc, - ModelRace.AuRa => AuRaFemaleNpc, - ModelRace.Hrothgar => HrothgarFemaleNpc, - ModelRace.Viera => VieraFemaleNpc, - _ => Unknown, - }, - _ => Unknown, - }; - } -} diff --git a/Penumbra.GameData/Enums/ResourceType.cs b/Penumbra.GameData/Enums/ResourceType.cs deleted file mode 100644 index 80ba03e9..00000000 --- a/Penumbra.GameData/Enums/ResourceType.cs +++ /dev/null @@ -1,319 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using FFXIVClientStructs.FFXIV.Client.System.Resource; -using Penumbra.String; -using Penumbra.String.Functions; - -namespace Penumbra.GameData.Enums; - -public enum ResourceType : uint -{ - Unknown = 0, - Aet = 0x00616574, - Amb = 0x00616D62, - Atch = 0x61746368, - Atex = 0x61746578, - Avfx = 0x61766678, - Awt = 0x00617774, - Cmp = 0x00636D70, - Dic = 0x00646963, - Eid = 0x00656964, - Envb = 0x656E7662, - Eqdp = 0x65716470, - Eqp = 0x00657170, - Essb = 0x65737362, - Est = 0x00657374, - Evp = 0x00657670, - Exd = 0x00657864, - Exh = 0x00657868, - Exl = 0x0065786C, - Fdt = 0x00666474, - Gfd = 0x00676664, - Ggd = 0x00676764, - Gmp = 0x00676D70, - Gzd = 0x00677A64, - Imc = 0x00696D63, - Lcb = 0x006C6362, - Lgb = 0x006C6762, - Luab = 0x6C756162, - Lvb = 0x006C7662, - Mdl = 0x006D646C, - Mlt = 0x006D6C74, - Mtrl = 0x6D74726C, - Obsb = 0x6F627362, - Pap = 0x00706170, - Pbd = 0x00706264, - Pcb = 0x00706362, - Phyb = 0x70687962, - Plt = 0x00706C74, - Scd = 0x00736364, - Sgb = 0x00736762, - Shcd = 0x73686364, - Shpk = 0x7368706B, - Sklb = 0x736B6C62, - Skp = 0x00736B70, - Stm = 0x0073746D, - Svb = 0x00737662, - Tera = 0x74657261, - Tex = 0x00746578, - Tmb = 0x00746D62, - Ugd = 0x00756764, - Uld = 0x00756C64, - Waoe = 0x77616F65, - Wtd = 0x00777464, -} - -[Flags] -public enum ResourceTypeFlag : ulong -{ - Aet = 0x0000_0000_0000_0001, - Amb = 0x0000_0000_0000_0002, - Atch = 0x0000_0000_0000_0004, - Atex = 0x0000_0000_0000_0008, - Avfx = 0x0000_0000_0000_0010, - Awt = 0x0000_0000_0000_0020, - Cmp = 0x0000_0000_0000_0040, - Dic = 0x0000_0000_0000_0080, - Eid = 0x0000_0000_0000_0100, - Envb = 0x0000_0000_0000_0200, - Eqdp = 0x0000_0000_0000_0400, - Eqp = 0x0000_0000_0000_0800, - Essb = 0x0000_0000_0000_1000, - Est = 0x0000_0000_0000_2000, - Evp = 0x0000_0000_0000_4000, - Exd = 0x0000_0000_0000_8000, - Exh = 0x0000_0000_0001_0000, - Exl = 0x0000_0000_0002_0000, - Fdt = 0x0000_0000_0004_0000, - Gfd = 0x0000_0000_0008_0000, - Ggd = 0x0000_0000_0010_0000, - Gmp = 0x0000_0000_0020_0000, - Gzd = 0x0000_0000_0040_0000, - Imc = 0x0000_0000_0080_0000, - Lcb = 0x0000_0000_0100_0000, - Lgb = 0x0000_0000_0200_0000, - Luab = 0x0000_0000_0400_0000, - Lvb = 0x0000_0000_0800_0000, - Mdl = 0x0000_0000_1000_0000, - Mlt = 0x0000_0000_2000_0000, - Mtrl = 0x0000_0000_4000_0000, - Obsb = 0x0000_0000_8000_0000, - Pap = 0x0000_0001_0000_0000, - Pbd = 0x0000_0002_0000_0000, - Pcb = 0x0000_0004_0000_0000, - Phyb = 0x0000_0008_0000_0000, - Plt = 0x0000_0010_0000_0000, - Scd = 0x0000_0020_0000_0000, - Sgb = 0x0000_0040_0000_0000, - Shcd = 0x0000_0080_0000_0000, - Shpk = 0x0000_0100_0000_0000, - Sklb = 0x0000_0200_0000_0000, - Skp = 0x0000_0400_0000_0000, - Stm = 0x0000_0800_0000_0000, - Svb = 0x0000_1000_0000_0000, - Tera = 0x0000_2000_0000_0000, - Tex = 0x0000_4000_0000_0000, - Tmb = 0x0000_8000_0000_0000, - Ugd = 0x0001_0000_0000_0000, - Uld = 0x0002_0000_0000_0000, - Waoe = 0x0004_0000_0000_0000, - Wtd = 0x0008_0000_0000_0000, -} - -[Flags] -public enum ResourceCategoryFlag : ushort -{ - Common = 0x0001, - BgCommon = 0x0002, - Bg = 0x0004, - Cut = 0x0008, - Chara = 0x0010, - Shader = 0x0020, - Ui = 0x0040, - Sound = 0x0080, - Vfx = 0x0100, - UiScript = 0x0200, - Exd = 0x0400, - GameScript = 0x0800, - Music = 0x1000, - SqpackTest = 0x2000, -} - -public static class ResourceExtensions -{ - public static readonly ResourceTypeFlag AllResourceTypes = Enum.GetValues().Aggregate((v, f) => v | f); - public static readonly ResourceCategoryFlag AllResourceCategories = Enum.GetValues().Aggregate((v, f) => v | f); - - public static ResourceTypeFlag ToFlag(this ResourceType type) - => type switch - { - ResourceType.Aet => ResourceTypeFlag.Aet, - ResourceType.Amb => ResourceTypeFlag.Amb, - ResourceType.Atch => ResourceTypeFlag.Atch, - ResourceType.Atex => ResourceTypeFlag.Atex, - ResourceType.Avfx => ResourceTypeFlag.Avfx, - ResourceType.Awt => ResourceTypeFlag.Awt, - ResourceType.Cmp => ResourceTypeFlag.Cmp, - ResourceType.Dic => ResourceTypeFlag.Dic, - ResourceType.Eid => ResourceTypeFlag.Eid, - ResourceType.Envb => ResourceTypeFlag.Envb, - ResourceType.Eqdp => ResourceTypeFlag.Eqdp, - ResourceType.Eqp => ResourceTypeFlag.Eqp, - ResourceType.Essb => ResourceTypeFlag.Essb, - ResourceType.Est => ResourceTypeFlag.Est, - ResourceType.Evp => ResourceTypeFlag.Evp, - ResourceType.Exd => ResourceTypeFlag.Exd, - ResourceType.Exh => ResourceTypeFlag.Exh, - ResourceType.Exl => ResourceTypeFlag.Exl, - ResourceType.Fdt => ResourceTypeFlag.Fdt, - ResourceType.Gfd => ResourceTypeFlag.Gfd, - ResourceType.Ggd => ResourceTypeFlag.Ggd, - ResourceType.Gmp => ResourceTypeFlag.Gmp, - ResourceType.Gzd => ResourceTypeFlag.Gzd, - ResourceType.Imc => ResourceTypeFlag.Imc, - ResourceType.Lcb => ResourceTypeFlag.Lcb, - ResourceType.Lgb => ResourceTypeFlag.Lgb, - ResourceType.Luab => ResourceTypeFlag.Luab, - ResourceType.Lvb => ResourceTypeFlag.Lvb, - ResourceType.Mdl => ResourceTypeFlag.Mdl, - ResourceType.Mlt => ResourceTypeFlag.Mlt, - ResourceType.Mtrl => ResourceTypeFlag.Mtrl, - ResourceType.Obsb => ResourceTypeFlag.Obsb, - ResourceType.Pap => ResourceTypeFlag.Pap, - ResourceType.Pbd => ResourceTypeFlag.Pbd, - ResourceType.Pcb => ResourceTypeFlag.Pcb, - ResourceType.Phyb => ResourceTypeFlag.Phyb, - ResourceType.Plt => ResourceTypeFlag.Plt, - ResourceType.Scd => ResourceTypeFlag.Scd, - ResourceType.Sgb => ResourceTypeFlag.Sgb, - ResourceType.Shcd => ResourceTypeFlag.Shcd, - ResourceType.Shpk => ResourceTypeFlag.Shpk, - ResourceType.Sklb => ResourceTypeFlag.Sklb, - ResourceType.Skp => ResourceTypeFlag.Skp, - ResourceType.Stm => ResourceTypeFlag.Stm, - ResourceType.Svb => ResourceTypeFlag.Svb, - ResourceType.Tera => ResourceTypeFlag.Tera, - ResourceType.Tex => ResourceTypeFlag.Tex, - ResourceType.Tmb => ResourceTypeFlag.Tmb, - ResourceType.Ugd => ResourceTypeFlag.Ugd, - ResourceType.Uld => ResourceTypeFlag.Uld, - ResourceType.Waoe => ResourceTypeFlag.Waoe, - ResourceType.Wtd => ResourceTypeFlag.Wtd, - _ => 0, - }; - - public static bool FitsFlag(this ResourceType type, ResourceTypeFlag flags) - => (type.ToFlag() & flags) != 0; - - public static ResourceCategoryFlag ToFlag(this ResourceCategory type) - => type switch - { - ResourceCategory.Common => ResourceCategoryFlag.Common, - ResourceCategory.BgCommon => ResourceCategoryFlag.BgCommon, - ResourceCategory.Bg => ResourceCategoryFlag.Bg, - ResourceCategory.Cut => ResourceCategoryFlag.Cut, - ResourceCategory.Chara => ResourceCategoryFlag.Chara, - ResourceCategory.Shader => ResourceCategoryFlag.Shader, - ResourceCategory.Ui => ResourceCategoryFlag.Ui, - ResourceCategory.Sound => ResourceCategoryFlag.Sound, - ResourceCategory.Vfx => ResourceCategoryFlag.Vfx, - ResourceCategory.UiScript => ResourceCategoryFlag.UiScript, - ResourceCategory.Exd => ResourceCategoryFlag.Exd, - ResourceCategory.GameScript => ResourceCategoryFlag.GameScript, - ResourceCategory.Music => ResourceCategoryFlag.Music, - ResourceCategory.SqpackTest => ResourceCategoryFlag.SqpackTest, - _ => 0, - }; - - public static bool FitsFlag(this ResourceCategory type, ResourceCategoryFlag flags) - => (type.ToFlag() & flags) != 0; - - public static ResourceType FromBytes(byte a1, byte a2, byte a3) - => (ResourceType)(((uint)ByteStringFunctions.AsciiToLower(a1) << 16) - | ((uint)ByteStringFunctions.AsciiToLower(a2) << 8) - | ByteStringFunctions.AsciiToLower(a3)); - - public static ResourceType FromBytes(byte a1, byte a2, byte a3, byte a4) - => (ResourceType)(((uint)ByteStringFunctions.AsciiToLower(a1) << 24) - | ((uint)ByteStringFunctions.AsciiToLower(a2) << 16) - | ((uint)ByteStringFunctions.AsciiToLower(a3) << 8) - | ByteStringFunctions.AsciiToLower(a4)); - - public static ResourceType FromBytes(char a1, char a2, char a3) - => FromBytes((byte)a1, (byte)a2, (byte)a3); - - public static ResourceType FromBytes(char a1, char a2, char a3, char a4) - => FromBytes((byte)a1, (byte)a2, (byte)a3, (byte)a4); - - public static ResourceType Type(string path) - { - var ext = Path.GetExtension(path.AsSpan()); - ext = ext.Length == 0 ? path.AsSpan() : ext[1..]; - - return ext.Length switch - { - 0 => 0, - 1 => (ResourceType)ext[^1], - 2 => FromBytes('\0', ext[^2], ext[^1]), - 3 => FromBytes(ext[^3], ext[^2], ext[^1]), - _ => FromBytes(ext[^4], ext[^3], ext[^2], ext[^1]), - }; - } - - public static ResourceType Type(ByteString path) - { - var extIdx = path.LastIndexOf((byte)'.'); - var ext = extIdx == -1 ? path : extIdx == path.Length - 1 ? ByteString.Empty : path.Substring(extIdx + 1); - - return ext.Length switch - { - 0 => 0, - 1 => (ResourceType)ext[^1], - 2 => FromBytes(0, ext[^2], ext[^1]), - 3 => FromBytes(ext[^3], ext[^2], ext[^1]), - _ => FromBytes(ext[^4], ext[^3], ext[^2], ext[^1]), - }; - } - - public static ResourceCategory Category(ByteString path) - { - if (path.Length < 3) - return ResourceCategory.Debug; - - return ByteStringFunctions.AsciiToUpper(path[0]) switch - { - (byte)'C' => ByteStringFunctions.AsciiToUpper(path[1]) switch - { - (byte)'O' => ResourceCategory.Common, - (byte)'U' => ResourceCategory.Cut, - (byte)'H' => ResourceCategory.Chara, - _ => ResourceCategory.Debug, - }, - (byte)'B' => ByteStringFunctions.AsciiToUpper(path[2]) switch - { - (byte)'C' => ResourceCategory.BgCommon, - (byte)'/' => ResourceCategory.Bg, - _ => ResourceCategory.Debug, - }, - (byte)'S' => ByteStringFunctions.AsciiToUpper(path[1]) switch - { - (byte)'H' => ResourceCategory.Shader, - (byte)'O' => ResourceCategory.Sound, - (byte)'Q' => ResourceCategory.SqpackTest, - _ => ResourceCategory.Debug, - }, - (byte)'U' => ByteStringFunctions.AsciiToUpper(path[2]) switch - { - (byte)'/' => ResourceCategory.Ui, - (byte)'S' => ResourceCategory.UiScript, - _ => ResourceCategory.Debug, - }, - (byte)'V' => ResourceCategory.Vfx, - (byte)'E' => ResourceCategory.Exd, - (byte)'G' => ResourceCategory.GameScript, - (byte)'M' => ResourceCategory.Music, - _ => ResourceCategory.Debug, - }; - } -} diff --git a/Penumbra.GameData/Enums/RspAttribute.cs b/Penumbra.GameData/Enums/RspAttribute.cs deleted file mode 100644 index c4016bb6..00000000 --- a/Penumbra.GameData/Enums/RspAttribute.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.ComponentModel; - -namespace Penumbra.GameData.Enums; - -public enum RspAttribute : byte -{ - MaleMinSize, - MaleMaxSize, - MaleMinTail, - MaleMaxTail, - FemaleMinSize, - FemaleMaxSize, - FemaleMinTail, - FemaleMaxTail, - BustMinX, - BustMinY, - BustMinZ, - BustMaxX, - BustMaxY, - BustMaxZ, - NumAttributes, -} - -public static class RspAttributeExtensions -{ - public static Gender ToGender( this RspAttribute attribute ) - { - return attribute switch - { - RspAttribute.MaleMinSize => Gender.Male, - RspAttribute.MaleMaxSize => Gender.Male, - RspAttribute.MaleMinTail => Gender.Male, - RspAttribute.MaleMaxTail => Gender.Male, - RspAttribute.FemaleMinSize => Gender.Female, - RspAttribute.FemaleMaxSize => Gender.Female, - RspAttribute.FemaleMinTail => Gender.Female, - RspAttribute.FemaleMaxTail => Gender.Female, - RspAttribute.BustMinX => Gender.Female, - RspAttribute.BustMinY => Gender.Female, - RspAttribute.BustMinZ => Gender.Female, - RspAttribute.BustMaxX => Gender.Female, - RspAttribute.BustMaxY => Gender.Female, - RspAttribute.BustMaxZ => Gender.Female, - _ => Gender.Unknown, - }; - } - - public static string ToUngenderedString( this RspAttribute attribute ) - { - return attribute switch - { - RspAttribute.MaleMinSize => "MinSize", - RspAttribute.MaleMaxSize => "MaxSize", - RspAttribute.MaleMinTail => "MinTail", - RspAttribute.MaleMaxTail => "MaxTail", - RspAttribute.FemaleMinSize => "MinSize", - RspAttribute.FemaleMaxSize => "MaxSize", - RspAttribute.FemaleMinTail => "MinTail", - RspAttribute.FemaleMaxTail => "MaxTail", - RspAttribute.BustMinX => "BustMinX", - RspAttribute.BustMinY => "BustMinY", - RspAttribute.BustMinZ => "BustMinZ", - RspAttribute.BustMaxX => "BustMaxX", - RspAttribute.BustMaxY => "BustMaxY", - RspAttribute.BustMaxZ => "BustMaxZ", - _ => "", - }; - } - - public static string ToFullString( this RspAttribute attribute ) - { - return attribute switch - { - RspAttribute.MaleMinSize => "Male Minimum Size", - RspAttribute.MaleMaxSize => "Male Maximum Size", - RspAttribute.FemaleMinSize => "Female Minimum Size", - RspAttribute.FemaleMaxSize => "Female Maximum Size", - RspAttribute.BustMinX => "Bust Minimum X-Axis", - RspAttribute.BustMaxX => "Bust Maximum X-Axis", - RspAttribute.BustMinY => "Bust Minimum Y-Axis", - RspAttribute.BustMaxY => "Bust Maximum Y-Axis", - RspAttribute.BustMinZ => "Bust Minimum Z-Axis", - RspAttribute.BustMaxZ => "Bust Maximum Z-Axis", - RspAttribute.MaleMinTail => "Male Minimum Tail Length", - RspAttribute.MaleMaxTail => "Male Maximum Tail Length", - RspAttribute.FemaleMinTail => "Female Minimum Tail Length", - RspAttribute.FemaleMaxTail => "Female Maximum Tail Length", - _ => throw new InvalidEnumArgumentException(), - }; - } -} \ No newline at end of file diff --git a/Penumbra.GameData/Enums/WeaponCategory.cs b/Penumbra.GameData/Enums/WeaponCategory.cs deleted file mode 100644 index 4128361f..00000000 --- a/Penumbra.GameData/Enums/WeaponCategory.cs +++ /dev/null @@ -1,51 +0,0 @@ -namespace Penumbra.GameData.Enums; - -public enum WeaponCategory : byte -{ - Unknown = 0, - Pugilist, - Gladiator, - Marauder, - Archer, - Lancer, - Thaumaturge1, - Thaumaturge2, - Conjurer1, - Conjurer2, - Arcanist, - Shield, - CarpenterMain, - CarpenterOff, - BlacksmithMain, - BlacksmithOff, - ArmorerMain, - ArmorerOff, - GoldsmithMain, - GoldsmithOff, - LeatherworkerMain, - LeatherworkerOff, - WeaverMain, - WeaverOff, - AlchemistMain, - AlchemistOff, - CulinarianMain, - CulinarianOff, - MinerMain, - MinerOff, - BotanistMain, - BotanistOff, - FisherMain, - Rogue = 84, - DarkKnight = 87, - Machinist = 88, - Astrologian = 89, - Samurai = 96, - RedMage = 97, - Scholar = 98, - FisherOff = 99, - BlueMage = 105, - Gunbreaker = 106, - Dancer = 107, - Reaper = 108, - Sage = 109, -} \ No newline at end of file diff --git a/Penumbra.GameData/Files/AvfxFile.cs b/Penumbra.GameData/Files/AvfxFile.cs deleted file mode 100644 index 330a8416..00000000 --- a/Penumbra.GameData/Files/AvfxFile.cs +++ /dev/null @@ -1,283 +0,0 @@ -using System; -using System.IO; -using System.Numerics; -using System.Text; - -namespace Penumbra.GameData.Files; - -public class AvfxFile : IWritable -{ - public struct Block - { - public uint Name; - public uint Size; - public byte[] Data; - - public Block(BinaryReader r) - { - Name = r.ReadUInt32(); - Size = r.ReadUInt32(); - Data = r.ReadBytes((int)Size.RoundTo4()); - } - - public byte ToBool() - => BitConverter.ToBoolean(Data) ? (byte)1 : (byte)0; - - public uint ToUint() - => BitConverter.ToUInt32(Data); - - public float ToFloat() - => BitConverter.ToSingle(Data); - - public new string ToString() - { - var span = Data.AsSpan(0, (int)Size - 1); - return Encoding.UTF8.GetString(span); - } - } - - public static readonly Vector3 BadVector = new(float.NaN); - - public Vector3 ClipBox = BadVector; - public Vector3 ClipBoxSize = BadVector; - public Vector3 RevisedValuesPos = BadVector; - public Vector3 RevisedValuesRot = BadVector; - public Vector3 RevisedValuesScale = BadVector; - public Vector3 RevisedValuesColor = BadVector; - - public uint Version = uint.MaxValue; - public uint DrawLayerType = uint.MaxValue; - public uint DrawOrderType = uint.MaxValue; - public uint DirectionalLightSourceType = uint.MaxValue; - public uint PointLightsType1 = uint.MaxValue; - public uint PointLightsType2 = uint.MaxValue; - - public float BiasZmaxScale = float.NaN; - public float BiasZmaxDistance = float.NaN; - public float NearClipBegin = float.NaN; - public float NearClipEnd = float.NaN; - public float FadeInnerX = float.NaN; - public float FadeOuterX = float.NaN; - public float FadeInnerY = float.NaN; - public float FadeOuterY = float.NaN; - public float FadeInnerZ = float.NaN; - public float FadeOuterZ = float.NaN; - public float FarClipBegin = float.NaN; - public float FarClipEnd = float.NaN; - public float SoftParticleFadeRange = float.NaN; - public float SoftKeyOffset = float.NaN; - public float GlobalFogInfluence = float.NaN; - - public byte IsDelayFastParticle = byte.MaxValue; - public byte IsFitGround = byte.MaxValue; - public byte IsTransformSkip = byte.MaxValue; - public byte IsAllStopOnHide = byte.MaxValue; - public byte CanBeClippedOut = byte.MaxValue; - public byte ClipBoxEnabled = byte.MaxValue; - public byte IsCameraSpace = byte.MaxValue; - public byte IsFullEnvLight = byte.MaxValue; - public byte IsClipOwnSetting = byte.MaxValue; - public byte FadeEnabledX = byte.MaxValue; - public byte FadeEnabledY = byte.MaxValue; - public byte FadeEnabledZ = byte.MaxValue; - public byte GlobalFogEnabled = byte.MaxValue; - public byte LtsEnabled = byte.MaxValue; - - public Block[] Schedulers = Array.Empty(); - public Block[] Timelines = Array.Empty(); - public Block[] Emitters = Array.Empty(); - public Block[] Particles = Array.Empty(); - public Block[] Effectors = Array.Empty(); - public Block[] Binders = Array.Empty(); - public string[] Textures = Array.Empty(); - public Block[] Models = Array.Empty(); - - public bool Valid - => true; - - public AvfxFile(byte[] data) - { - using var stream = new MemoryStream(data); - using var r = new BinaryReader(stream); - - var name = r.ReadUInt32(); - var size = r.ReadUInt32(); - var schedulerCount = 0; - var timelineCount = 0; - var emitterCount = 0; - var particleCount = 0; - var effectorCount = 0; - var binderCount = 0; - var textureCount = 0; - var modelCount = 0; - while (r.BaseStream.Position < size) - { - var block = new Block(r); - switch (block.Name) - { - // @formatter:off - case AvfxMagic.Version: Version = block.ToUint(); break; - case AvfxMagic.IsDelayFastParticle: IsDelayFastParticle = block.ToBool(); break; - case AvfxMagic.IsFitGround: IsFitGround = block.ToBool(); break; - case AvfxMagic.IsTransformSkip: IsTransformSkip = block.ToBool(); break; - case AvfxMagic.IsAllStopOnHide: IsAllStopOnHide = block.ToBool(); break; - case AvfxMagic.CanBeClippedOut: CanBeClippedOut = block.ToBool(); break; - case AvfxMagic.ClipBoxEnabled: ClipBoxEnabled = block.ToBool(); break; - case AvfxMagic.ClipBoxX: ClipBox.X = block.ToFloat(); break; - case AvfxMagic.ClipBoxY: ClipBox.Y = block.ToFloat(); break; - case AvfxMagic.ClipBoxZ: ClipBox.Z = block.ToFloat(); break; - case AvfxMagic.ClipBoxSizeX: ClipBoxSize.X = block.ToFloat(); break; - case AvfxMagic.ClipBoxSizeY: ClipBoxSize.Y = block.ToFloat(); break; - case AvfxMagic.ClipBoxSizeZ: ClipBoxSize.Z = block.ToFloat(); break; - case AvfxMagic.BiasZmaxScale: BiasZmaxScale = block.ToFloat(); break; - case AvfxMagic.BiasZmaxDistance: BiasZmaxDistance = block.ToFloat(); break; - case AvfxMagic.IsCameraSpace: IsCameraSpace = block.ToBool(); break; - case AvfxMagic.IsFullEnvLight: IsFullEnvLight = block.ToBool(); break; - case AvfxMagic.IsClipOwnSetting: IsClipOwnSetting = block.ToBool(); break; - case AvfxMagic.NearClipBegin: NearClipBegin = block.ToFloat(); break; - case AvfxMagic.NearClipEnd: NearClipEnd = block.ToFloat(); break; - case AvfxMagic.FarClipBegin: FarClipBegin = block.ToFloat(); break; - case AvfxMagic.FarClipEnd: FarClipEnd = block.ToFloat(); break; - case AvfxMagic.SoftParticleFadeRange: SoftParticleFadeRange = block.ToFloat(); break; - case AvfxMagic.SoftKeyOffset: SoftKeyOffset = block.ToFloat(); break; - case AvfxMagic.DrawLayerType: DrawLayerType = block.ToUint(); break; - case AvfxMagic.DrawOrderType: DrawOrderType = block.ToUint(); break; - case AvfxMagic.DirectionalLightSourceType: DirectionalLightSourceType = block.ToUint(); break; - case AvfxMagic.PointLightsType1: PointLightsType1 = block.ToUint(); break; - case AvfxMagic.PointLightsType2: PointLightsType2 = block.ToUint(); break; - case AvfxMagic.RevisedValuesPosX: RevisedValuesPos.X = block.ToFloat(); break; - case AvfxMagic.RevisedValuesPosY: RevisedValuesPos.Y = block.ToFloat(); break; - case AvfxMagic.RevisedValuesPosZ: RevisedValuesPos.Z = block.ToFloat(); break; - case AvfxMagic.RevisedValuesRotX: RevisedValuesRot.X = block.ToFloat(); break; - case AvfxMagic.RevisedValuesRotY: RevisedValuesRot.Y = block.ToFloat(); break; - case AvfxMagic.RevisedValuesRotZ: RevisedValuesRot.Z = block.ToFloat(); break; - case AvfxMagic.RevisedValuesScaleX: RevisedValuesScale.X = block.ToFloat(); break; - case AvfxMagic.RevisedValuesScaleY: RevisedValuesScale.Y = block.ToFloat(); break; - case AvfxMagic.RevisedValuesScaleZ: RevisedValuesScale.Z = block.ToFloat(); break; - case AvfxMagic.RevisedValuesColorR: RevisedValuesColor.X = block.ToFloat(); break; - case AvfxMagic.RevisedValuesColorG: RevisedValuesColor.Y = block.ToFloat(); break; - case AvfxMagic.RevisedValuesColorB: RevisedValuesColor.Z = block.ToFloat(); break; - case AvfxMagic.FadeEnabledX: FadeEnabledX = block.ToBool(); break; - case AvfxMagic.FadeInnerX: FadeInnerX = block.ToFloat(); break; - case AvfxMagic.FadeOuterX: FadeOuterX = block.ToFloat(); break; - case AvfxMagic.FadeEnabledY: FadeEnabledY = block.ToBool(); break; - case AvfxMagic.FadeInnerY: FadeInnerY = block.ToFloat(); break; - case AvfxMagic.FadeOuterY: FadeOuterY = block.ToFloat(); break; - case AvfxMagic.FadeEnabledZ: FadeEnabledZ = block.ToBool(); break; - case AvfxMagic.FadeInnerZ: FadeInnerZ = block.ToFloat(); break; - case AvfxMagic.FadeOuterZ: FadeOuterZ = block.ToFloat(); break; - case AvfxMagic.GlobalFogEnabled: GlobalFogEnabled = block.ToBool(); break; - case AvfxMagic.GlobalFogInfluence: GlobalFogInfluence = block.ToFloat(); break; - case AvfxMagic.LtsEnabled: LtsEnabled = block.ToBool(); break; - case AvfxMagic.NumSchedulers: Schedulers = new Block[block.ToUint()]; break; - case AvfxMagic.NumTimelines: Timelines = new Block[block.ToUint()]; break; - case AvfxMagic.NumEmitters: Emitters = new Block[block.ToUint()]; break; - case AvfxMagic.NumParticles: Particles = new Block[block.ToUint()]; break; - case AvfxMagic.NumEffectors: Effectors = new Block[block.ToUint()]; break; - case AvfxMagic.NumBinders: Binders = new Block[block.ToUint()]; break; - case AvfxMagic.NumTextures: Textures = new string[block.ToUint()]; break; - case AvfxMagic.NumModels: Models = new Block[block.ToUint()]; break; - case AvfxMagic.Scheduler: Schedulers[schedulerCount++] = block; break; - case AvfxMagic.Timeline: Timelines[timelineCount++] = block; break; - case AvfxMagic.Emitter: Emitters[emitterCount++] = block; break; - case AvfxMagic.Particle: Particles[particleCount++] = block; break; - case AvfxMagic.Effector: Effectors[effectorCount++] = block; break; - case AvfxMagic.Binder: Binders[binderCount++] = block; break; - case AvfxMagic.Texture: Textures[textureCount++] = block.ToString(); break; - case AvfxMagic.Model: Models[modelCount++] = block; break; - // @formatter:on - } - } - } - - - public byte[] Write() - { - using var m = new MemoryStream(512 * 1024); - using var w = new BinaryWriter(m); - - w.Write(AvfxMagic.AvfxBase); - var sizePos = w.BaseStream.Position; - w.Write(0u); - w.WriteBlock(AvfxMagic.Version, Version) - .WriteBlock(AvfxMagic.IsDelayFastParticle, IsDelayFastParticle) - .WriteBlock(AvfxMagic.IsFitGround, IsFitGround) - .WriteBlock(AvfxMagic.IsTransformSkip, IsTransformSkip) - .WriteBlock(AvfxMagic.IsAllStopOnHide, IsAllStopOnHide) - .WriteBlock(AvfxMagic.CanBeClippedOut, CanBeClippedOut) - .WriteBlock(AvfxMagic.ClipBoxEnabled, ClipBoxEnabled) - .WriteBlock(AvfxMagic.ClipBoxX, ClipBox.X) - .WriteBlock(AvfxMagic.ClipBoxY, ClipBox.Y) - .WriteBlock(AvfxMagic.ClipBoxZ, ClipBox.Z) - .WriteBlock(AvfxMagic.ClipBoxSizeX, ClipBoxSize.X) - .WriteBlock(AvfxMagic.ClipBoxSizeY, ClipBoxSize.Y) - .WriteBlock(AvfxMagic.ClipBoxSizeZ, ClipBoxSize.Z) - .WriteBlock(AvfxMagic.BiasZmaxScale, BiasZmaxScale) - .WriteBlock(AvfxMagic.BiasZmaxDistance, BiasZmaxDistance) - .WriteBlock(AvfxMagic.IsCameraSpace, IsCameraSpace) - .WriteBlock(AvfxMagic.IsFullEnvLight, IsFullEnvLight) - .WriteBlock(AvfxMagic.IsClipOwnSetting, IsClipOwnSetting) - .WriteBlock(AvfxMagic.NearClipBegin, NearClipBegin) - .WriteBlock(AvfxMagic.NearClipEnd, NearClipEnd) - .WriteBlock(AvfxMagic.FarClipBegin, FarClipBegin) - .WriteBlock(AvfxMagic.FarClipEnd, FarClipEnd) - .WriteBlock(AvfxMagic.SoftParticleFadeRange, SoftParticleFadeRange) - .WriteBlock(AvfxMagic.SoftKeyOffset, SoftKeyOffset) - .WriteBlock(AvfxMagic.DrawLayerType, DrawLayerType) - .WriteBlock(AvfxMagic.DrawOrderType, DrawOrderType) - .WriteBlock(AvfxMagic.DirectionalLightSourceType, DirectionalLightSourceType) - .WriteBlock(AvfxMagic.PointLightsType1, PointLightsType1) - .WriteBlock(AvfxMagic.PointLightsType2, PointLightsType2) - .WriteBlock(AvfxMagic.RevisedValuesPosX, RevisedValuesPos.X) - .WriteBlock(AvfxMagic.RevisedValuesPosY, RevisedValuesPos.Y) - .WriteBlock(AvfxMagic.RevisedValuesPosZ, RevisedValuesPos.Z) - .WriteBlock(AvfxMagic.RevisedValuesRotX, RevisedValuesRot.X) - .WriteBlock(AvfxMagic.RevisedValuesRotY, RevisedValuesRot.Y) - .WriteBlock(AvfxMagic.RevisedValuesRotZ, RevisedValuesRot.Z) - .WriteBlock(AvfxMagic.RevisedValuesScaleX, RevisedValuesScale.X) - .WriteBlock(AvfxMagic.RevisedValuesScaleY, RevisedValuesScale.Y) - .WriteBlock(AvfxMagic.RevisedValuesScaleZ, RevisedValuesScale.Z) - .WriteBlock(AvfxMagic.RevisedValuesColorR, RevisedValuesColor.X) - .WriteBlock(AvfxMagic.RevisedValuesColorG, RevisedValuesColor.Y) - .WriteBlock(AvfxMagic.RevisedValuesColorB, RevisedValuesColor.Z) - .WriteBlock(AvfxMagic.FadeEnabledX, FadeEnabledX) - .WriteBlock(AvfxMagic.FadeInnerX, FadeInnerX) - .WriteBlock(AvfxMagic.FadeOuterX, FadeOuterX) - .WriteBlock(AvfxMagic.FadeEnabledY, FadeEnabledY) - .WriteBlock(AvfxMagic.FadeInnerY, FadeInnerY) - .WriteBlock(AvfxMagic.FadeOuterY, FadeOuterY) - .WriteBlock(AvfxMagic.FadeEnabledZ, FadeEnabledZ) - .WriteBlock(AvfxMagic.FadeInnerZ, FadeInnerZ) - .WriteBlock(AvfxMagic.FadeOuterZ, FadeOuterZ) - .WriteBlock(AvfxMagic.GlobalFogEnabled, GlobalFogEnabled) - .WriteBlock(AvfxMagic.GlobalFogInfluence, GlobalFogInfluence) - .WriteBlock(AvfxMagic.LtsEnabled, LtsEnabled) - .WriteBlock(AvfxMagic.NumSchedulers, (uint)Schedulers.Length) - .WriteBlock(AvfxMagic.NumTimelines, (uint)Timelines.Length) - .WriteBlock(AvfxMagic.NumEmitters, (uint)Emitters.Length) - .WriteBlock(AvfxMagic.NumParticles, (uint)Particles.Length) - .WriteBlock(AvfxMagic.NumEffectors, (uint)Effectors.Length) - .WriteBlock(AvfxMagic.NumBinders, (uint)Binders.Length) - .WriteBlock(AvfxMagic.NumTextures, (uint)Textures.Length) - .WriteBlock(AvfxMagic.NumModels, (uint)Models.Length); - foreach (var block in Schedulers) - w.WriteBlock(block); - foreach (var block in Timelines) - w.WriteBlock(block); - foreach (var block in Emitters) - w.WriteBlock(block); - foreach (var block in Particles) - w.WriteBlock(block); - foreach (var block in Effectors) - w.WriteBlock(block); - foreach (var block in Binders) - w.WriteBlock(block); - foreach (var texture in Textures) - w.WriteTextureBlock(texture); - foreach (var block in Models) - w.WriteBlock(block); - w.Seek((int)sizePos, SeekOrigin.Begin); - w.Write((uint)w.BaseStream.Length - 8u); - return m.ToArray(); - } -} diff --git a/Penumbra.GameData/Files/AvfxMagic.cs b/Penumbra.GameData/Files/AvfxMagic.cs deleted file mode 100644 index 0a78b4fb..00000000 --- a/Penumbra.GameData/Files/AvfxMagic.cs +++ /dev/null @@ -1,149 +0,0 @@ -using System.IO; -using System.Numerics; -using System.Text; - -// ReSharper disable ShiftExpressionZeroLeftOperand - -namespace Penumbra.GameData.Files; - -public static class AvfxMagic -{ - public const uint AvfxBase = ('A' << 24) | ('V' << 16) | ('F' << 8) | (uint)'X'; - public const uint Version = (000 << 24) | ('V' << 16) | ('e' << 8) | (uint)'r'; - public const uint IsDelayFastParticle = ('b' << 24) | ('D' << 16) | ('F' << 8) | (uint)'P'; - public const uint IsFitGround = (000 << 24) | ('b' << 16) | ('F' << 8) | (uint)'G'; - public const uint IsTransformSkip = (000 << 24) | ('b' << 16) | ('T' << 8) | (uint)'S'; - public const uint IsAllStopOnHide = ('b' << 24) | ('A' << 16) | ('S' << 8) | (uint)'H'; - public const uint CanBeClippedOut = ('b' << 24) | ('C' << 16) | ('B' << 8) | (uint)'C'; - public const uint ClipBoxEnabled = ('b' << 24) | ('C' << 16) | ('u' << 8) | (uint)'l'; - public const uint ClipBoxX = ('C' << 24) | ('B' << 16) | ('P' << 8) | (uint)'x'; - public const uint ClipBoxY = ('C' << 24) | ('B' << 16) | ('P' << 8) | (uint)'y'; - public const uint ClipBoxZ = ('C' << 24) | ('B' << 16) | ('P' << 8) | (uint)'z'; - public const uint ClipBoxSizeX = ('C' << 24) | ('B' << 16) | ('S' << 8) | (uint)'x'; - public const uint ClipBoxSizeY = ('C' << 24) | ('B' << 16) | ('S' << 8) | (uint)'y'; - public const uint ClipBoxSizeZ = ('C' << 24) | ('B' << 16) | ('S' << 8) | (uint)'z'; - public const uint BiasZmaxScale = ('Z' << 24) | ('B' << 16) | ('M' << 8) | (uint)'s'; - public const uint BiasZmaxDistance = ('Z' << 24) | ('B' << 16) | ('M' << 8) | (uint)'d'; - public const uint IsCameraSpace = ('b' << 24) | ('C' << 16) | ('m' << 8) | (uint)'S'; - public const uint IsFullEnvLight = ('b' << 24) | ('F' << 16) | ('E' << 8) | (uint)'L'; - public const uint IsClipOwnSetting = ('b' << 24) | ('O' << 16) | ('S' << 8) | (uint)'t'; - public const uint NearClipBegin = (000 << 24) | ('N' << 16) | ('C' << 8) | (uint)'B'; - public const uint NearClipEnd = (000 << 24) | ('N' << 16) | ('C' << 8) | (uint)'E'; - public const uint FarClipBegin = (000 << 24) | ('F' << 16) | ('C' << 8) | (uint)'B'; - public const uint FarClipEnd = (000 << 24) | ('F' << 16) | ('C' << 8) | (uint)'E'; - public const uint SoftParticleFadeRange = ('S' << 24) | ('P' << 16) | ('F' << 8) | (uint)'R'; - public const uint SoftKeyOffset = (000 << 24) | ('S' << 16) | ('K' << 8) | (uint)'O'; - public const uint DrawLayerType = ('D' << 24) | ('w' << 16) | ('L' << 8) | (uint)'y'; - public const uint DrawOrderType = ('D' << 24) | ('w' << 16) | ('O' << 8) | (uint)'T'; - public const uint DirectionalLightSourceType = ('D' << 24) | ('L' << 16) | ('S' << 8) | (uint)'T'; - public const uint PointLightsType1 = ('P' << 24) | ('L' << 16) | ('1' << 8) | (uint)'S'; - public const uint PointLightsType2 = ('P' << 24) | ('L' << 16) | ('2' << 8) | (uint)'S'; - public const uint RevisedValuesPosX = ('R' << 24) | ('v' << 16) | ('P' << 8) | (uint)'x'; - public const uint RevisedValuesPosY = ('R' << 24) | ('v' << 16) | ('P' << 8) | (uint)'y'; - public const uint RevisedValuesPosZ = ('R' << 24) | ('v' << 16) | ('P' << 8) | (uint)'z'; - public const uint RevisedValuesRotX = ('R' << 24) | ('v' << 16) | ('R' << 8) | (uint)'x'; - public const uint RevisedValuesRotY = ('R' << 24) | ('v' << 16) | ('R' << 8) | (uint)'y'; - public const uint RevisedValuesRotZ = ('R' << 24) | ('v' << 16) | ('R' << 8) | (uint)'z'; - public const uint RevisedValuesScaleX = ('R' << 24) | ('v' << 16) | ('S' << 8) | (uint)'x'; - public const uint RevisedValuesScaleY = ('R' << 24) | ('v' << 16) | ('S' << 8) | (uint)'y'; - public const uint RevisedValuesScaleZ = ('R' << 24) | ('v' << 16) | ('S' << 8) | (uint)'z'; - public const uint RevisedValuesColorR = (000 << 24) | ('R' << 16) | ('v' << 8) | (uint)'R'; - public const uint RevisedValuesColorG = (000 << 24) | ('R' << 16) | ('v' << 8) | (uint)'G'; - public const uint RevisedValuesColorB = (000 << 24) | ('R' << 16) | ('v' << 8) | (uint)'B'; - public const uint FadeEnabledX = ('A' << 24) | ('F' << 16) | ('X' << 8) | (uint)'e'; - public const uint FadeInnerX = ('A' << 24) | ('F' << 16) | ('X' << 8) | (uint)'i'; - public const uint FadeOuterX = ('A' << 24) | ('F' << 16) | ('X' << 8) | (uint)'o'; - public const uint FadeEnabledY = ('A' << 24) | ('F' << 16) | ('Y' << 8) | (uint)'e'; - public const uint FadeInnerY = ('A' << 24) | ('F' << 16) | ('Y' << 8) | (uint)'i'; - public const uint FadeOuterY = ('A' << 24) | ('F' << 16) | ('Y' << 8) | (uint)'o'; - public const uint FadeEnabledZ = ('A' << 24) | ('F' << 16) | ('Z' << 8) | (uint)'e'; - public const uint FadeInnerZ = ('A' << 24) | ('F' << 16) | ('Z' << 8) | (uint)'i'; - public const uint FadeOuterZ = ('A' << 24) | ('F' << 16) | ('Z' << 8) | (uint)'o'; - public const uint GlobalFogEnabled = ('b' << 24) | ('G' << 16) | ('F' << 8) | (uint)'E'; - public const uint GlobalFogInfluence = ('G' << 24) | ('F' << 16) | ('I' << 8) | (uint)'M'; - public const uint LtsEnabled = ('b' << 24) | ('L' << 16) | ('T' << 8) | (uint)'S'; - public const uint NumSchedulers = ('S' << 24) | ('c' << 16) | ('C' << 8) | (uint)'n'; - public const uint NumTimelines = ('T' << 24) | ('l' << 16) | ('C' << 8) | (uint)'n'; - public const uint NumEmitters = ('E' << 24) | ('m' << 16) | ('C' << 8) | (uint)'n'; - public const uint NumParticles = ('P' << 24) | ('r' << 16) | ('C' << 8) | (uint)'n'; - public const uint NumEffectors = ('E' << 24) | ('f' << 16) | ('C' << 8) | (uint)'n'; - public const uint NumBinders = ('B' << 24) | ('d' << 16) | ('C' << 8) | (uint)'n'; - public const uint NumTextures = ('T' << 24) | ('x' << 16) | ('C' << 8) | (uint)'n'; - public const uint NumModels = ('M' << 24) | ('d' << 16) | ('C' << 8) | (uint)'n'; - public const uint Scheduler = ('S' << 24) | ('c' << 16) | ('h' << 8) | (uint)'d'; - public const uint Timeline = ('T' << 24) | ('m' << 16) | ('L' << 8) | (uint)'n'; - public const uint Emitter = ('E' << 24) | ('m' << 16) | ('i' << 8) | (uint)'t'; - public const uint Particle = ('P' << 24) | ('t' << 16) | ('c' << 8) | (uint)'l'; - public const uint Effector = ('E' << 24) | ('f' << 16) | ('c' << 8) | (uint)'t'; - public const uint Binder = ('B' << 24) | ('i' << 16) | ('n' << 8) | (uint)'d'; - public const uint Texture = (000 << 24) | ('T' << 16) | ('e' << 8) | (uint)'x'; - public const uint Model = ('M' << 24) | ('o' << 16) | ('d' << 8) | (uint)'l'; - - internal static uint RoundTo4(this uint size) - { - var rest = size & 0b11u; - return rest > 0 ? (size & ~0b11u) + 4u : size; - } - - internal static BinaryWriter WriteTextureBlock(this BinaryWriter bw, string texture) - { - bw.Write(Texture); - var bytes = Encoding.UTF8.GetBytes(texture); - var size = (uint)bytes.Length + 1u; - bw.Write(size); - bw.Write(bytes); - bw.Write((byte)0); - for (var end = size.RoundTo4(); size < end; ++size) - bw.Write((byte)0); - return bw; - } - - internal static BinaryWriter WriteBlock(this BinaryWriter bw, AvfxFile.Block block) - { - bw.Write(block.Name); - bw.Write(block.Size); - bw.Write(block.Data); - return bw; - } - - internal static BinaryWriter WriteBlock(this BinaryWriter bw, uint magic, uint value) - { - if (value != uint.MaxValue) - { - bw.Write(magic); - bw.Write(4u); - bw.Write(value); - } - - return bw; - } - - internal static BinaryWriter WriteBlock(this BinaryWriter bw, uint magic, byte value) - { - if (value != byte.MaxValue) - { - bw.Write(magic); - bw.Write(4u); - bw.Write(value == 1 ? 1u : 0u); - } - - return bw; - } - - internal static BinaryWriter WriteBlock(this BinaryWriter bw, uint magic, float value) - { - if (!float.IsNaN(value)) - { - bw.Write(magic); - bw.Write(4u); - bw.Write(value); - } - - return bw; - } - - internal static BinaryWriter WriteBlock(this BinaryWriter bw, uint magicX, uint magicY, uint magicZ, Vector3 value) - => bw.WriteBlock(magicX, value.X) - .WriteBlock(magicY, value.Y) - .WriteBlock(magicZ, value.Z); -} diff --git a/Penumbra.GameData/Files/IWritable.cs b/Penumbra.GameData/Files/IWritable.cs deleted file mode 100644 index 0a170af9..00000000 --- a/Penumbra.GameData/Files/IWritable.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Penumbra.GameData.Files; - -public interface IWritable -{ - public bool Valid { get; } - public byte[] Write(); -} \ No newline at end of file diff --git a/Penumbra.GameData/Files/MdlFile.Write.cs b/Penumbra.GameData/Files/MdlFile.Write.cs deleted file mode 100644 index 7db29954..00000000 --- a/Penumbra.GameData/Files/MdlFile.Write.cs +++ /dev/null @@ -1,285 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using Lumina.Data.Parsing; - -namespace Penumbra.GameData.Files; - -public partial class MdlFile -{ - private static uint Write(BinaryWriter w, string s, long basePos) - { - var currentPos = w.BaseStream.Position; - w.Write(Encoding.UTF8.GetBytes(s)); - w.Write((byte)0); - return (uint)(currentPos - basePos); - } - - private List WriteStrings(BinaryWriter w) - { - var startPos = (int)w.BaseStream.Position; - var basePos = startPos + 8; - var count = (ushort)(Attributes.Length + Bones.Length + Materials.Length + Shapes.Length); - - w.Write(count); - w.Seek(basePos, SeekOrigin.Begin); - var ret = Attributes.Concat(Bones) - .Concat(Materials) - .Concat(Shapes.Select(s => s.ShapeName)) - .Select(attribute => Write(w, attribute, basePos)).ToList(); - - var padding = (w.BaseStream.Position & 0b111) > 0 ? (w.BaseStream.Position & ~0b111) + 8 : w.BaseStream.Position; - for (var i = w.BaseStream.Position; i < padding; ++i) - w.Write((byte)0); - var size = (int)w.BaseStream.Position - basePos; - w.Seek(startPos + 4, SeekOrigin.Begin); - w.Write((uint)size); - w.Seek(basePos + size, SeekOrigin.Begin); - return ret; - } - - private void WriteModelFileHeader(BinaryWriter w, uint runtimeSize) - { - w.Write(Version); - w.Write(StackSize); - w.Write(runtimeSize); - w.Write((ushort)VertexDeclarations.Length); - w.Write((ushort)Materials.Length); - w.Write(VertexOffset[0] > 0 ? VertexOffset[0] + runtimeSize : 0u); - w.Write(VertexOffset[1] > 0 ? VertexOffset[1] + runtimeSize : 0u); - w.Write(VertexOffset[2] > 0 ? VertexOffset[2] + runtimeSize : 0u); - w.Write(IndexOffset[0] > 0 ? IndexOffset[0] + runtimeSize : 0u); - w.Write(IndexOffset[1] > 0 ? IndexOffset[1] + runtimeSize : 0u); - w.Write(IndexOffset[2] > 0 ? IndexOffset[2] + runtimeSize : 0u); - w.Write(VertexBufferSize[0]); - w.Write(VertexBufferSize[1]); - w.Write(VertexBufferSize[2]); - w.Write(IndexBufferSize[0]); - w.Write(IndexBufferSize[1]); - w.Write(IndexBufferSize[2]); - w.Write(LodCount); - w.Write(EnableIndexBufferStreaming); - w.Write(EnableEdgeGeometry); - w.Write((byte)0); // Padding - } - - private void WriteModelHeader(BinaryWriter w) - { - w.Write(Radius); - w.Write((ushort)Meshes.Length); - w.Write((ushort)Attributes.Length); - w.Write((ushort)SubMeshes.Length); - w.Write((ushort)Materials.Length); - w.Write((ushort)Bones.Length); - w.Write((ushort)BoneTables.Length); - w.Write((ushort)Shapes.Length); - w.Write((ushort)ShapeMeshes.Length); - w.Write((ushort)ShapeValues.Length); - w.Write(LodCount); - w.Write((byte)Flags1); - w.Write((ushort)ElementIds.Length); - w.Write((byte)TerrainShadowMeshes.Length); - w.Write((byte)Flags2); - w.Write(ModelClipOutDistance); - w.Write(ShadowClipOutDistance); - w.Write(Unknown4); - w.Write((ushort)TerrainShadowSubMeshes.Length); - w.Write(Unknown5); - w.Write(BgChangeMaterialIndex); - w.Write(BgCrestChangeMaterialIndex); - w.Write(Unknown6); - w.Write(Unknown7); - w.Write(Unknown8); - w.Write(Unknown9); - w.Write((uint)0); // 6 byte padding - w.Write((ushort)0); - } - - - private static void Write(BinaryWriter w, in MdlStructs.VertexElement vertex) - { - w.Write(vertex.Stream); - w.Write(vertex.Offset); - w.Write(vertex.Type); - w.Write(vertex.Usage); - w.Write(vertex.UsageIndex); - w.Write((ushort)0); // 3 byte padding - w.Write((byte)0); - } - - private static void Write(BinaryWriter w, in MdlStructs.VertexDeclarationStruct vertexDecl) - { - foreach (var vertex in vertexDecl.VertexElements) - Write(w, vertex); - - Write(w, new MdlStructs.VertexElement() { Stream = 255 }); - w.Seek((int)(NumVertices - 1 - vertexDecl.VertexElements.Length) * 8, SeekOrigin.Current); - } - - private static void Write(BinaryWriter w, in MdlStructs.ElementIdStruct elementId) - { - w.Write(elementId.ElementId); - w.Write(elementId.ParentBoneName); - w.Write(elementId.Translate[0]); - w.Write(elementId.Translate[1]); - w.Write(elementId.Translate[2]); - w.Write(elementId.Rotate[0]); - w.Write(elementId.Rotate[1]); - w.Write(elementId.Rotate[2]); - } - - private static unsafe void Write(BinaryWriter w, in T data) where T : unmanaged - { - fixed (T* ptr = &data) - { - var bytePtr = (byte*)ptr; - var size = sizeof(T); - var span = new ReadOnlySpan(bytePtr, size); - w.Write(span); - } - } - - private static void Write(BinaryWriter w, MdlStructs.MeshStruct mesh) - { - w.Write(mesh.VertexCount); - w.Write((ushort)0); // padding - w.Write(mesh.IndexCount); - w.Write(mesh.MaterialIndex); - w.Write(mesh.SubMeshIndex); - w.Write(mesh.SubMeshCount); - w.Write(mesh.BoneTableIndex); - w.Write(mesh.StartIndex); - w.Write(mesh.VertexBufferOffset[0]); - w.Write(mesh.VertexBufferOffset[1]); - w.Write(mesh.VertexBufferOffset[2]); - w.Write(mesh.VertexBufferStride[0]); - w.Write(mesh.VertexBufferStride[1]); - w.Write(mesh.VertexBufferStride[2]); - w.Write(mesh.VertexStreamCount); - } - - private static void Write(BinaryWriter w, MdlStructs.BoneTableStruct bone) - { - foreach (var index in bone.BoneIndex) - w.Write(index); - - w.Write(bone.BoneCount); - w.Write((ushort)0); // 3 bytes padding - w.Write((byte)0); - } - - private void Write(BinaryWriter w, int shapeIdx, IReadOnlyList offsets) - { - var shape = Shapes[shapeIdx]; - var offset = offsets[Attributes.Length + Bones.Length + Materials.Length + shapeIdx]; - w.Write(offset); - w.Write(shape.ShapeMeshStartIndex[0]); - w.Write(shape.ShapeMeshStartIndex[1]); - w.Write(shape.ShapeMeshStartIndex[2]); - w.Write(shape.ShapeMeshCount[0]); - w.Write(shape.ShapeMeshCount[1]); - w.Write(shape.ShapeMeshCount[2]); - } - - private static void Write(BinaryWriter w, MdlStructs.BoundingBoxStruct box) - { - w.Write(box.Min[0]); - w.Write(box.Min[1]); - w.Write(box.Min[2]); - w.Write(box.Min[3]); - w.Write(box.Max[0]); - w.Write(box.Max[1]); - w.Write(box.Max[2]); - w.Write(box.Max[3]); - } - - public byte[] Write() - { - using var stream = new MemoryStream(); - using (var w = new BinaryWriter(stream)) - { - // Skip and write this later when we actually know it. - w.Seek((int)FileHeaderSize, SeekOrigin.Begin); - - foreach (var vertexDecl in VertexDeclarations) - Write(w, vertexDecl); - - var offsets = WriteStrings(w); - WriteModelHeader(w); - - foreach (var elementId in ElementIds) - Write(w, elementId); - - foreach (var lod in Lods) - Write(w, lod); - - if (Flags2.HasFlag(MdlStructs.ModelFlags2.ExtraLodEnabled)) - foreach (var extraLod in ExtraLods) - Write(w, extraLod); - - foreach (var mesh in Meshes) - Write(w, mesh); - - for (var i = 0; i < Attributes.Length; ++i) - w.Write(offsets[i]); - - foreach (var terrainShadowMesh in TerrainShadowMeshes) - Write(w, terrainShadowMesh); - - foreach (var subMesh in SubMeshes) - Write(w, subMesh); - - foreach (var terrainShadowSubMesh in TerrainShadowSubMeshes) - Write(w, terrainShadowSubMesh); - - for (var i = 0; i < Materials.Length; ++i) - w.Write(offsets[Attributes.Length + Bones.Length + i]); - - for (var i = 0; i < Bones.Length; ++i) - w.Write(offsets[Attributes.Length + i]); - - foreach (var boneTable in BoneTables) - Write(w, boneTable); - - for (var i = 0; i < Shapes.Length; ++i) - Write(w, i, offsets); - - foreach (var shapeMesh in ShapeMeshes) - Write(w, shapeMesh); - - foreach (var shapeValue in ShapeValues) - Write(w, shapeValue); - - w.Write(SubMeshBoneMap.Length * 2); - foreach (var bone in SubMeshBoneMap) - w.Write(bone); - - var pos = w.BaseStream.Position + 1; - var padding = (byte) (pos & 0b111); - if (padding > 0) - padding = (byte) (8 - padding); - w.Write(padding); - for (var i = 0; i < padding; ++i) - w.Write((byte) (0xDEADBEEFF00DCAFEu >> (8 * (7 - i)))); - - Write(w, BoundingBoxes); - Write(w, ModelBoundingBoxes); - Write(w, WaterBoundingBoxes); - Write(w, VerticalFogBoundingBoxes); - foreach (var box in BoneBoundingBoxes) - Write(w, box); - - var totalSize = w.BaseStream.Position; - var runtimeSize = (uint)(totalSize - StackSize - FileHeaderSize); - w.Write(RemainingData); - - // Write header data. - w.Seek(0, SeekOrigin.Begin); - WriteModelFileHeader(w, runtimeSize); - } - - return stream.ToArray(); - } -} diff --git a/Penumbra.GameData/Files/MdlFile.cs b/Penumbra.GameData/Files/MdlFile.cs deleted file mode 100644 index 6cde07f5..00000000 --- a/Penumbra.GameData/Files/MdlFile.cs +++ /dev/null @@ -1,249 +0,0 @@ -using System; -using System.IO; -using System.Reflection; -using System.Text; -using Lumina.Data; -using Lumina.Data.Parsing; -using Lumina.Extensions; - -namespace Penumbra.GameData.Files; - -public partial class MdlFile : IWritable -{ - public const uint NumVertices = 17; - public const uint FileHeaderSize = 0x44; - - // Refers to string, thus not Lumina struct. - public struct Shape - { - public string ShapeName = string.Empty; - public ushort[] ShapeMeshStartIndex; - public ushort[] ShapeMeshCount; - - public Shape(MdlStructs.ShapeStruct data, uint[] offsets, string[] strings) - { - var idx = offsets.AsSpan().IndexOf(data.StringOffset); - ShapeName = idx >= 0 ? strings[idx] : string.Empty; - ShapeMeshStartIndex = data.ShapeMeshStartIndex; - ShapeMeshCount = data.ShapeMeshCount; - } - } - - // Raw data to write back. - public uint Version; - public float Radius; - public float ModelClipOutDistance; - public float ShadowClipOutDistance; - public byte BgChangeMaterialIndex; - public byte BgCrestChangeMaterialIndex; - public ushort Unknown4; - public byte Unknown5; - public byte Unknown6; - public ushort Unknown7; - public ushort Unknown8; - public ushort Unknown9; - - // Offsets are stored relative to RuntimeSize instead of file start. - public uint[] VertexOffset; - public uint[] IndexOffset; - - public uint[] VertexBufferSize; - public uint[] IndexBufferSize; - public byte LodCount; - public bool EnableIndexBufferStreaming; - public bool EnableEdgeGeometry; - - - public MdlStructs.ModelFlags1 Flags1; - public MdlStructs.ModelFlags2 Flags2; - - public MdlStructs.BoundingBoxStruct BoundingBoxes; - public MdlStructs.BoundingBoxStruct ModelBoundingBoxes; - public MdlStructs.BoundingBoxStruct WaterBoundingBoxes; - public MdlStructs.BoundingBoxStruct VerticalFogBoundingBoxes; - - public MdlStructs.VertexDeclarationStruct[] VertexDeclarations; - public MdlStructs.ElementIdStruct[] ElementIds; - public MdlStructs.MeshStruct[] Meshes; - public MdlStructs.BoneTableStruct[] BoneTables; - public MdlStructs.BoundingBoxStruct[] BoneBoundingBoxes; - public MdlStructs.SubmeshStruct[] SubMeshes; - public MdlStructs.ShapeMeshStruct[] ShapeMeshes; - public MdlStructs.ShapeValueStruct[] ShapeValues; - public MdlStructs.TerrainShadowMeshStruct[] TerrainShadowMeshes; - public MdlStructs.TerrainShadowSubmeshStruct[] TerrainShadowSubMeshes; - public MdlStructs.LodStruct[] Lods; - public MdlStructs.ExtraLodStruct[] ExtraLods; - public ushort[] SubMeshBoneMap; - - // Strings are written in order - public string[] Attributes; - public string[] Bones; - public string[] Materials; - public Shape[] Shapes; - - // Raw, unparsed data. - public byte[] RemainingData; - - public bool Valid { get; } - - public MdlFile(byte[] data) - { - using var stream = new MemoryStream(data); - using var r = new LuminaBinaryReader(stream); - - var header = LoadModelFileHeader(r); - LodCount = header.LodCount; - VertexBufferSize = header.VertexBufferSize; - IndexBufferSize = header.IndexBufferSize; - VertexOffset = header.VertexOffset; - IndexOffset = header.IndexOffset; - for (var i = 0; i < 3; ++i) - { - if (VertexOffset[i] > 0) - VertexOffset[i] -= header.RuntimeSize; - - if (IndexOffset[i] > 0) - IndexOffset[i] -= header.RuntimeSize; - } - - VertexDeclarations = new MdlStructs.VertexDeclarationStruct[header.VertexDeclarationCount]; - for (var i = 0; i < header.VertexDeclarationCount; ++i) - VertexDeclarations[i] = MdlStructs.VertexDeclarationStruct.Read(r); - - var (offsets, strings) = LoadStrings(r); - - var modelHeader = LoadModelHeader(r); - ElementIds = new MdlStructs.ElementIdStruct[modelHeader.ElementIdCount]; - for (var i = 0; i < modelHeader.ElementIdCount; i++) - ElementIds[i] = MdlStructs.ElementIdStruct.Read(r); - - Lods = r.ReadStructuresAsArray(3); - ExtraLods = modelHeader.ExtraLodEnabled - ? r.ReadStructuresAsArray(3) - : Array.Empty(); - - Meshes = new MdlStructs.MeshStruct[modelHeader.MeshCount]; - for (var i = 0; i < modelHeader.MeshCount; i++) - Meshes[i] = MdlStructs.MeshStruct.Read(r); - - Attributes = new string[modelHeader.AttributeCount]; - for (var i = 0; i < modelHeader.AttributeCount; ++i) - { - var offset = r.ReadUInt32(); - var stringIdx = offsets.AsSpan().IndexOf(offset); - Attributes[i] = stringIdx >= 0 ? strings[stringIdx] : string.Empty; - } - - TerrainShadowMeshes = r.ReadStructuresAsArray(modelHeader.TerrainShadowMeshCount); - SubMeshes = r.ReadStructuresAsArray(modelHeader.SubmeshCount); - TerrainShadowSubMeshes = r.ReadStructuresAsArray(modelHeader.TerrainShadowSubmeshCount); - - Materials = new string[modelHeader.MaterialCount]; - for (var i = 0; i < modelHeader.MaterialCount; ++i) - { - var offset = r.ReadUInt32(); - var stringIdx = offsets.AsSpan().IndexOf(offset); - Materials[i] = stringIdx >= 0 ? strings[stringIdx] : string.Empty; - } - - Bones = new string[modelHeader.BoneCount]; - for (var i = 0; i < modelHeader.BoneCount; ++i) - { - var offset = r.ReadUInt32(); - var stringIdx = offsets.AsSpan().IndexOf(offset); - Bones[i] = stringIdx >= 0 ? strings[stringIdx] : string.Empty; - } - - BoneTables = new MdlStructs.BoneTableStruct[modelHeader.BoneTableCount]; - for (var i = 0; i < modelHeader.BoneTableCount; i++) - BoneTables[i] = MdlStructs.BoneTableStruct.Read(r); - - Shapes = new Shape[modelHeader.ShapeCount]; - for (var i = 0; i < modelHeader.ShapeCount; i++) - Shapes[i] = new Shape(MdlStructs.ShapeStruct.Read(r), offsets, strings); - - ShapeMeshes = r.ReadStructuresAsArray(modelHeader.ShapeMeshCount); - ShapeValues = r.ReadStructuresAsArray(modelHeader.ShapeValueCount); - - var submeshBoneMapSize = r.ReadUInt32(); - SubMeshBoneMap = r.ReadStructures((int)submeshBoneMapSize / 2).ToArray(); - - var paddingAmount = r.ReadByte(); - r.Seek(r.BaseStream.Position + paddingAmount); - - // Dunno what this first one is for? - BoundingBoxes = MdlStructs.BoundingBoxStruct.Read(r); - ModelBoundingBoxes = MdlStructs.BoundingBoxStruct.Read(r); - WaterBoundingBoxes = MdlStructs.BoundingBoxStruct.Read(r); - VerticalFogBoundingBoxes = MdlStructs.BoundingBoxStruct.Read(r); - BoneBoundingBoxes = new MdlStructs.BoundingBoxStruct[modelHeader.BoneCount]; - for (var i = 0; i < modelHeader.BoneCount; i++) - BoneBoundingBoxes[i] = MdlStructs.BoundingBoxStruct.Read(r); - - var runtimePadding = header.RuntimeSize + FileHeaderSize + header.StackSize - r.BaseStream.Position; - if (runtimePadding > 0) - r.ReadBytes((int)runtimePadding); - RemainingData = r.ReadBytes((int)(r.BaseStream.Length - r.BaseStream.Position)); - Valid = true; - } - - private MdlStructs.ModelFileHeader LoadModelFileHeader(LuminaBinaryReader r) - { - var header = MdlStructs.ModelFileHeader.Read(r); - Version = header.Version; - EnableIndexBufferStreaming = header.EnableIndexBufferStreaming; - EnableEdgeGeometry = header.EnableEdgeGeometry; - return header; - } - - private MdlStructs.ModelHeader LoadModelHeader(BinaryReader r) - { - var modelHeader = r.ReadStructure(); - Radius = modelHeader.Radius; - Flags1 = (MdlStructs.ModelFlags1)(modelHeader.GetType() - .GetField("Flags1", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)?.GetValue(modelHeader) - ?? 0); - Flags2 = (MdlStructs.ModelFlags2)(modelHeader.GetType() - .GetField("Flags2", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)?.GetValue(modelHeader) - ?? 0); - ModelClipOutDistance = modelHeader.ModelClipOutDistance; - ShadowClipOutDistance = modelHeader.ShadowClipOutDistance; - Unknown4 = modelHeader.Unknown4; - Unknown5 = (byte)(modelHeader.GetType() - .GetField("Unknown5", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)?.GetValue(modelHeader) - ?? 0); - Unknown6 = modelHeader.Unknown6; - Unknown7 = modelHeader.Unknown7; - Unknown8 = modelHeader.Unknown8; - Unknown9 = modelHeader.Unknown9; - BgChangeMaterialIndex = modelHeader.BGChangeMaterialIndex; - BgCrestChangeMaterialIndex = modelHeader.BGCrestChangeMaterialIndex; - - return modelHeader; - } - - private static (uint[], string[]) LoadStrings(BinaryReader r) - { - var stringCount = r.ReadUInt16(); - r.ReadUInt16(); - var stringSize = (int)r.ReadUInt32(); - var stringData = r.ReadBytes(stringSize); - var start = 0; - var strings = new string[stringCount]; - var offsets = new uint[stringCount]; - for (var i = 0; i < stringCount; ++i) - { - var span = stringData.AsSpan(start); - var idx = span.IndexOf((byte)'\0'); - strings[i] = Encoding.UTF8.GetString(span[..idx]); - offsets[i] = (uint)start; - start = start + idx + 1; - } - - return (offsets, strings); - } - - public unsafe uint StackSize - => (uint)(VertexDeclarations.Length * NumVertices * sizeof(MdlStructs.VertexElement)); -} diff --git a/Penumbra.GameData/Files/MtrlFile.ColorDyeSet.cs b/Penumbra.GameData/Files/MtrlFile.ColorDyeSet.cs deleted file mode 100644 index 4cd2ff28..00000000 --- a/Penumbra.GameData/Files/MtrlFile.ColorDyeSet.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; - -namespace Penumbra.GameData.Files; - -public partial class MtrlFile -{ - public unsafe struct ColorDyeSet - { - public struct Row - { - private ushort _data; - - public ushort Template - { - get => (ushort)(_data >> 5); - set => _data = (ushort)((_data & 0x1F) | (value << 5)); - } - - public bool Diffuse - { - get => (_data & 0x01) != 0; - set => _data = (ushort)(value ? _data | 0x01 : _data & 0xFFFE); - } - - public bool Specular - { - get => (_data & 0x02) != 0; - set => _data = (ushort)(value ? _data | 0x02 : _data & 0xFFFD); - } - - public bool Emissive - { - get => (_data & 0x04) != 0; - set => _data = (ushort)(value ? _data | 0x04 : _data & 0xFFFB); - } - - public bool Gloss - { - get => (_data & 0x08) != 0; - set => _data = (ushort)(value ? _data | 0x08 : _data & 0xFFF7); - } - - public bool SpecularStrength - { - get => (_data & 0x10) != 0; - set => _data = (ushort)(value ? _data | 0x10 : _data & 0xFFEF); - } - } - - public struct RowArray : IEnumerable - { - public const int NumRows = 16; - private fixed ushort _rowData[NumRows]; - - public ref Row this[int i] - { - get - { - fixed (ushort* ptr = _rowData) - { - return ref ((Row*)ptr)[i]; - } - } - } - - public IEnumerator GetEnumerator() - { - for (var i = 0; i < NumRows; ++i) - yield return this[i]; - } - - IEnumerator IEnumerable.GetEnumerator() - => GetEnumerator(); - - public ReadOnlySpan AsBytes() - { - fixed (ushort* ptr = _rowData) - { - return new ReadOnlySpan(ptr, NumRows * sizeof(ushort)); - } - } - } - - public RowArray Rows; - public string Name; - public ushort Index; - } -} diff --git a/Penumbra.GameData/Files/MtrlFile.ColorSet.cs b/Penumbra.GameData/Files/MtrlFile.ColorSet.cs deleted file mode 100644 index 61647d79..00000000 --- a/Penumbra.GameData/Files/MtrlFile.ColorSet.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Numerics; - -namespace Penumbra.GameData.Files; - -public partial class MtrlFile -{ - public unsafe struct ColorSet - { - public struct Row - { - public const int Size = 32; - - private fixed ushort _data[16]; - - public Vector3 Diffuse - { - get => new(ToFloat(0), ToFloat(1), ToFloat(2)); - set - { - _data[0] = FromFloat(value.X); - _data[1] = FromFloat(value.Y); - _data[2] = FromFloat(value.Z); - } - } - - public Vector3 Specular - { - get => new(ToFloat(4), ToFloat(5), ToFloat(6)); - set - { - _data[4] = FromFloat(value.X); - _data[5] = FromFloat(value.Y); - _data[6] = FromFloat(value.Z); - } - } - - public Vector3 Emissive - { - get => new(ToFloat(8), ToFloat(9), ToFloat(10)); - set - { - _data[8] = FromFloat(value.X); - _data[9] = FromFloat(value.Y); - _data[10] = FromFloat(value.Z); - } - } - - public Vector2 MaterialRepeat - { - get => new(ToFloat(12), ToFloat(15)); - set - { - _data[12] = FromFloat(value.X); - _data[15] = FromFloat(value.Y); - } - } - - public Vector2 MaterialSkew - { - get => new(ToFloat(13), ToFloat(14)); - set - { - _data[13] = FromFloat(value.X); - _data[14] = FromFloat(value.Y); - } - } - - public float SpecularStrength - { - get => ToFloat(3); - set => _data[3] = FromFloat(value); - } - - public float GlossStrength - { - get => ToFloat(7); - set => _data[7] = FromFloat(value); - } - - public ushort TileSet - { - get => (ushort)(ToFloat(11) * 64f); - set => _data[11] = FromFloat(value / 64f); - } - - private float ToFloat(int idx) - => (float)BitConverter.UInt16BitsToHalf(_data[idx]); - - private static ushort FromFloat(float x) - => BitConverter.HalfToUInt16Bits((Half)x); - } - - public struct RowArray : IEnumerable - { - public const int NumRows = 16; - private fixed byte _rowData[NumRows * Row.Size]; - - public ref Row this[int i] - { - get - { - fixed (byte* ptr = _rowData) - { - return ref ((Row*)ptr)[i]; - } - } - } - - public IEnumerator GetEnumerator() - { - for (var i = 0; i < NumRows; ++i) - yield return this[i]; - } - - IEnumerator IEnumerable.GetEnumerator() - => GetEnumerator(); - - public ReadOnlySpan AsBytes() - { - fixed (byte* ptr = _rowData) - { - return new ReadOnlySpan(ptr, NumRows * Row.Size); - } - } - } - - public RowArray Rows; - public string Name; - public ushort Index; - public bool HasRows; - } -} diff --git a/Penumbra.GameData/Files/MtrlFile.Write.cs b/Penumbra.GameData/Files/MtrlFile.Write.cs deleted file mode 100644 index 9bc5a2ce..00000000 --- a/Penumbra.GameData/Files/MtrlFile.Write.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System.IO; -using System.Linq; -using System.Text; - -namespace Penumbra.GameData.Files; - -public partial class MtrlFile -{ - public byte[] Write() - { - using var stream = new MemoryStream(); - using( var w = new BinaryWriter( stream ) ) - { - const int materialHeaderSize = 4 + 2 + 2 + 2 + 2 + 1 + 1 + 1 + 1; - - w.BaseStream.Seek( materialHeaderSize, SeekOrigin.Begin ); - ushort cumulativeStringOffset = 0; - foreach( var texture in Textures ) - { - w.Write( cumulativeStringOffset ); - w.Write( texture.Flags ); - cumulativeStringOffset += ( ushort )( texture.Path.Length + 1 ); - } - - foreach( var set in UvSets ) - { - w.Write( cumulativeStringOffset ); - w.Write( set.Index ); - cumulativeStringOffset += ( ushort )( set.Name.Length + 1 ); - } - - foreach( var set in ColorSets ) - { - w.Write( cumulativeStringOffset ); - w.Write( set.Index ); - cumulativeStringOffset += ( ushort )( set.Name.Length + 1 ); - } - - foreach( var text in Textures.Select( t => t.Path ) - .Concat( UvSets.Select( c => c.Name ) ) - .Concat( ColorSets.Select( c => c.Name ) ) - .Append( ShaderPackage.Name ) ) - { - w.Write( Encoding.UTF8.GetBytes( text ) ); - w.Write( ( byte )'\0' ); - } - - w.Write( AdditionalData ); - var dataSetSize = 0; - foreach( var row in ColorSets.Where( c => c.HasRows ).Select( c => c.Rows ) ) - { - var span = row.AsBytes(); - w.Write( span ); - dataSetSize += span.Length; - } - - foreach( var row in ColorDyeSets.Select( c => c.Rows ) ) - { - var span = row.AsBytes(); - w.Write( span ); - dataSetSize += span.Length; - } - - w.Write( ( ushort )( ShaderPackage.ShaderValues.Length * 4 ) ); - w.Write( ( ushort )ShaderPackage.ShaderKeys.Length ); - w.Write( ( ushort )ShaderPackage.Constants.Length ); - w.Write( ( ushort )ShaderPackage.Samplers.Length ); - w.Write( ShaderPackage.Flags ); - - foreach( var key in ShaderPackage.ShaderKeys ) - { - w.Write( key.Category ); - w.Write( key.Value ); - } - - foreach( var constant in ShaderPackage.Constants ) - { - w.Write( constant.Id ); - w.Write( constant.ByteOffset ); - w.Write( constant.ByteSize ); - } - - foreach( var sampler in ShaderPackage.Samplers ) - { - w.Write( sampler.SamplerId ); - w.Write( sampler.Flags ); - w.Write( sampler.TextureIndex ); - w.Write( ( ushort )0 ); - w.Write( ( byte )0 ); - } - - foreach( var value in ShaderPackage.ShaderValues ) - { - w.Write( value ); - } - - WriteHeader( w, ( ushort )w.BaseStream.Position, dataSetSize, cumulativeStringOffset ); - } - - return stream.ToArray(); - } - - private void WriteHeader( BinaryWriter w, ushort fileSize, int dataSetSize, ushort shaderPackageNameOffset ) - { - w.BaseStream.Seek( 0, SeekOrigin.Begin ); - w.Write( Version ); - w.Write( fileSize ); - w.Write( ( ushort )dataSetSize ); - w.Write( ( ushort )( shaderPackageNameOffset + ShaderPackage.Name.Length + 1 ) ); - w.Write( shaderPackageNameOffset ); - w.Write( ( byte )Textures.Length ); - w.Write( ( byte )UvSets.Length ); - w.Write( ( byte )ColorSets.Length ); - w.Write( ( byte )AdditionalData.Length ); - } -} \ No newline at end of file diff --git a/Penumbra.GameData/Files/MtrlFile.cs b/Penumbra.GameData/Files/MtrlFile.cs deleted file mode 100644 index c1c683e7..00000000 --- a/Penumbra.GameData/Files/MtrlFile.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using Lumina.Data.Parsing; -using Lumina.Extensions; -using Penumbra.GameData.Structs; - -namespace Penumbra.GameData.Files; - -public partial class MtrlFile : IWritable -{ - public readonly uint Version; - - public bool Valid - => CheckTextures(); - - public Texture[] Textures; - public UvSet[] UvSets; - public ColorSet[] ColorSets; - public ColorDyeSet[] ColorDyeSets; - public ShaderPackageData ShaderPackage; - public byte[] AdditionalData; - - public bool ApplyDyeTemplate(StmFile stm, int colorSetIdx, int rowIdx, StainId stainId) - { - if (colorSetIdx < 0 || colorSetIdx >= ColorDyeSets.Length || rowIdx is < 0 or >= ColorSet.RowArray.NumRows) - return false; - - var dyeSet = ColorDyeSets[colorSetIdx].Rows[rowIdx]; - if (!stm.TryGetValue(dyeSet.Template, stainId, out var dyes)) - return false; - - var ret = false; - if (dyeSet.Diffuse && ColorSets[colorSetIdx].Rows[rowIdx].Diffuse != dyes.Diffuse) - { - ColorSets[colorSetIdx].Rows[rowIdx].Diffuse = dyes.Diffuse; - ret = true; - } - - if (dyeSet.Specular && ColorSets[colorSetIdx].Rows[rowIdx].Specular != dyes.Specular) - { - ColorSets[colorSetIdx].Rows[rowIdx].Specular = dyes.Specular; - ret = true; - } - - if (dyeSet.SpecularStrength && ColorSets[colorSetIdx].Rows[rowIdx].SpecularStrength != dyes.SpecularPower) - { - ColorSets[colorSetIdx].Rows[rowIdx].SpecularStrength = dyes.SpecularPower; - ret = true; - } - - if (dyeSet.Emissive && ColorSets[colorSetIdx].Rows[rowIdx].Emissive != dyes.Emissive) - { - ColorSets[colorSetIdx].Rows[rowIdx].Emissive = dyes.Emissive; - ret = true; - } - - if (dyeSet.Gloss && ColorSets[colorSetIdx].Rows[rowIdx].GlossStrength != dyes.Gloss) - { - ColorSets[colorSetIdx].Rows[rowIdx].GlossStrength = dyes.Gloss; - ret = true; - } - - return ret; - } - - public Span GetConstantValues(Constant constant) - { - if ((constant.ByteOffset & 0x3) != 0 - || (constant.ByteSize & 0x3) != 0 - || (constant.ByteOffset + constant.ByteSize) >> 2 > ShaderPackage.ShaderValues.Length) - return null; - - return ShaderPackage.ShaderValues.AsSpan().Slice(constant.ByteOffset >> 2, constant.ByteSize >> 2); - - } - - public List<(Sampler?, ShpkFile.Resource?)> GetSamplersByTexture(ShpkFile? shpk) - { - var samplers = new List<(Sampler?, ShpkFile.Resource?)>(); - for (var i = 0; i < Textures.Length; ++i) - { - samplers.Add((null, null)); - } - foreach (var sampler in ShaderPackage.Samplers) - { - samplers[sampler.TextureIndex] = (sampler, shpk?.GetSamplerById(sampler.SamplerId)); - } - - return samplers; - } - - public MtrlFile(byte[] data) - { - using var stream = new MemoryStream(data); - using var r = new BinaryReader(stream); - - Version = r.ReadUInt32(); - r.ReadUInt16(); // file size - var dataSetSize = r.ReadUInt16(); - var stringTableSize = r.ReadUInt16(); - var shaderPackageNameOffset = r.ReadUInt16(); - var textureCount = r.ReadByte(); - var uvSetCount = r.ReadByte(); - var colorSetCount = r.ReadByte(); - var additionalDataSize = r.ReadByte(); - - Textures = ReadTextureOffsets(r, textureCount, out var textureOffsets); - UvSets = ReadUvSetOffsets(r, uvSetCount, out var uvOffsets); - ColorSets = ReadColorSetOffsets(r, colorSetCount, out var colorOffsets); - - var strings = r.ReadBytes(stringTableSize); - for (var i = 0; i < textureCount; ++i) - Textures[i].Path = UseOffset(strings, textureOffsets[i]); - - for (var i = 0; i < uvSetCount; ++i) - UvSets[i].Name = UseOffset(strings, uvOffsets[i]); - - for (var i = 0; i < colorSetCount; ++i) - ColorSets[i].Name = UseOffset(strings, colorOffsets[i]); - - ColorDyeSets = ColorSets.Length * ColorSet.RowArray.NumRows * ColorSet.Row.Size < dataSetSize - ? ColorSets.Select(c => new ColorDyeSet - { - Index = c.Index, - Name = c.Name, - }).ToArray() - : Array.Empty(); - - ShaderPackage.Name = UseOffset(strings, shaderPackageNameOffset); - - AdditionalData = r.ReadBytes(additionalDataSize); - for (var i = 0; i < ColorSets.Length; ++i) - { - if (stream.Position + ColorSet.RowArray.NumRows * ColorSet.Row.Size <= stream.Length) - { - ColorSets[i].Rows = r.ReadStructure(); - ColorSets[i].HasRows = true; - } - else - { - ColorSets[i].HasRows = false; - } - } - - for (var i = 0; i < ColorDyeSets.Length; ++i) - ColorDyeSets[i].Rows = r.ReadStructure(); - - var shaderValueListSize = r.ReadUInt16(); - var shaderKeyCount = r.ReadUInt16(); - var constantCount = r.ReadUInt16(); - var samplerCount = r.ReadUInt16(); - ShaderPackage.Flags = r.ReadUInt32(); - - ShaderPackage.ShaderKeys = r.ReadStructuresAsArray(shaderKeyCount); - ShaderPackage.Constants = r.ReadStructuresAsArray(constantCount); - ShaderPackage.Samplers = r.ReadStructuresAsArray(samplerCount); - ShaderPackage.ShaderValues = r.ReadStructuresAsArray(shaderValueListSize / 4); - } - - private static Texture[] ReadTextureOffsets(BinaryReader r, int count, out ushort[] offsets) - { - var ret = new Texture[count]; - offsets = new ushort[count]; - for (var i = 0; i < count; ++i) - { - offsets[i] = r.ReadUInt16(); - ret[i].Flags = r.ReadUInt16(); - } - - return ret; - } - - private static UvSet[] ReadUvSetOffsets(BinaryReader r, int count, out ushort[] offsets) - { - var ret = new UvSet[count]; - offsets = new ushort[count]; - for (var i = 0; i < count; ++i) - { - offsets[i] = r.ReadUInt16(); - ret[i].Index = r.ReadUInt16(); - } - - return ret; - } - - private static ColorSet[] ReadColorSetOffsets(BinaryReader r, int count, out ushort[] offsets) - { - var ret = new ColorSet[count]; - offsets = new ushort[count]; - for (var i = 0; i < count; ++i) - { - offsets[i] = r.ReadUInt16(); - ret[i].Index = r.ReadUInt16(); - } - - return ret; - } - - private static string UseOffset(ReadOnlySpan strings, ushort offset) - { - strings = strings[offset..]; - var end = strings.IndexOf((byte)'\0'); - return Encoding.UTF8.GetString(end == -1 ? strings : strings[..end]); - } - - private bool CheckTextures() - => Textures.All(texture => texture.Path.Contains('/')); - - public struct UvSet - { - public string Name; - public ushort Index; - } - - public struct Texture - { - public string Path; - public ushort Flags; - - public bool DX11 - => (Flags & 0x8000) != 0; - } - - public struct Constant - { - public uint Id; - public ushort ByteOffset; - public ushort ByteSize; - } - - public struct ShaderPackageData - { - public string Name; - public ShaderKey[] ShaderKeys; - public Constant[] Constants; - public Sampler[] Samplers; - public float[] ShaderValues; - public uint Flags; - } -} diff --git a/Penumbra.GameData/Files/ShpkFile.Shader.cs b/Penumbra.GameData/Files/ShpkFile.Shader.cs deleted file mode 100644 index 3d94dbb4..00000000 --- a/Penumbra.GameData/Files/ShpkFile.Shader.cs +++ /dev/null @@ -1,220 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; -using Lumina.Misc; -using Penumbra.GameData.Data; - -namespace Penumbra.GameData.Files; - -public partial class ShpkFile -{ - public struct Shader - { - public DisassembledShader.ShaderStage Stage; - public DxVersion DirectXVersion; - public Resource[] Constants; - public Resource[] Samplers; - public Resource[] Uavs; - public byte[] AdditionalHeader; - private byte[] _byteData; - private DisassembledShader? _disassembly; - - public byte[] Blob - { - get => _byteData; - set - { - if (_byteData == value) - return; - - if (Stage != DisassembledShader.ShaderStage.Unspecified) - { - // Reject the blob entirely if we can't disassemble it or if we find inconsistencies. - var disasm = DisassembledShader.Disassemble(value); - if (disasm.Stage != Stage || (disasm.ShaderModel >> 8) + 6 != (uint)DirectXVersion) - throw new ArgumentException( - $"The supplied blob is a DirectX {(disasm.ShaderModel >> 8) + 6} {disasm.Stage} shader ; expected a DirectX {(uint)DirectXVersion} {Stage} shader.", - nameof(value)); - - if (disasm.ShaderModel >= 0x0500) - { - var samplers = new Dictionary(); - var textures = new Dictionary(); - foreach (var binding in disasm.ResourceBindings) - { - switch (binding.Type) - { - case DisassembledShader.ResourceType.Texture: - textures[binding.Slot] = NormalizeResourceName(binding.Name); - break; - case DisassembledShader.ResourceType.Sampler: - samplers[binding.Slot] = NormalizeResourceName(binding.Name); - break; - } - } - - if (samplers.Count != textures.Count - || !samplers.All(pair => textures.TryGetValue(pair.Key, out var texName) && pair.Value == texName)) - throw new ArgumentException($"The supplied blob has inconsistent sampler and texture allocation."); - } - - _byteData = value; - _disassembly = disasm; - } - else - { - _byteData = value; - _disassembly = null; - } - - UpdateUsed(); - } - } - - public DisassembledShader? Disassembly - => _disassembly; - - public Resource? GetConstantById(uint id) - => Constants.FirstOrNull(res => res.Id == id); - - public Resource? GetConstantByName(string name) - => Constants.FirstOrNull(res => res.Name == name); - - public Resource? GetSamplerById(uint id) - => Samplers.FirstOrNull(s => s.Id == id); - - public Resource? GetSamplerByName(string name) - => Samplers.FirstOrNull(s => s.Name == name); - - public Resource? GetUavById(uint id) - => Uavs.FirstOrNull(u => u.Id == id); - - public Resource? GetUavByName(string name) - => Uavs.FirstOrNull(u => u.Name == name); - - public void UpdateResources(ShpkFile file) - { - if (_disassembly == null) - throw new InvalidOperationException(); - - var constants = new List(); - var samplers = new List(); - var uavs = new List(); - foreach (var binding in _disassembly.ResourceBindings) - { - switch (binding.Type) - { - case DisassembledShader.ResourceType.ConstantBuffer: - var name = NormalizeResourceName(binding.Name); - // We want to preserve IDs as much as possible, and to deterministically generate new ones in a way that's most compliant with the native ones, to maximize compatibility. - var id = GetConstantByName(name)?.Id ?? file.GetConstantByName(name)?.Id ?? Crc32.Get(name, 0xFFFFFFFFu); - constants.Add(new Resource - { - Id = id, - Name = name, - Slot = (ushort)binding.Slot, - Size = (ushort)binding.RegisterCount, - Used = binding.Used, - UsedDynamically = binding.UsedDynamically, - }); - break; - case DisassembledShader.ResourceType.Texture: - name = NormalizeResourceName(binding.Name); - id = GetSamplerByName(name)?.Id ?? file.GetSamplerByName(name)?.Id ?? Crc32.Get(name, 0xFFFFFFFFu); - samplers.Add(new Resource - { - Id = id, - Name = name, - Slot = (ushort)binding.Slot, - Size = (ushort)binding.Slot, - Used = binding.Used, - UsedDynamically = binding.UsedDynamically, - }); - break; - case DisassembledShader.ResourceType.Uav: - name = NormalizeResourceName(binding.Name); - id = GetUavByName(name)?.Id ?? file.GetUavByName(name)?.Id ?? Crc32.Get(name, 0xFFFFFFFFu); - uavs.Add(new Resource - { - Id = id, - Name = name, - Slot = (ushort)binding.Slot, - Size = (ushort)binding.Slot, - Used = binding.Used, - UsedDynamically = binding.UsedDynamically, - }); - break; - } - } - - Constants = constants.ToArray(); - Samplers = samplers.ToArray(); - Uavs = uavs.ToArray(); - } - - private void UpdateUsed() - { - if (_disassembly != null) - { - var cbUsage = new Dictionary(); - var tUsage = new Dictionary(); - var uUsage = new Dictionary(); - foreach (var binding in _disassembly.ResourceBindings) - { - switch (binding.Type) - { - case DisassembledShader.ResourceType.ConstantBuffer: - cbUsage[NormalizeResourceName(binding.Name)] = (binding.Used, binding.UsedDynamically); - break; - case DisassembledShader.ResourceType.Texture: - tUsage[NormalizeResourceName(binding.Name)] = (binding.Used, binding.UsedDynamically); - break; - case DisassembledShader.ResourceType.Uav: - uUsage[NormalizeResourceName(binding.Name)] = (binding.Used, binding.UsedDynamically); - break; - } - } - - static void CopyUsed(Resource[] resources, - Dictionary used) - { - for (var i = 0; i < resources.Length; ++i) - { - if (used.TryGetValue(resources[i].Name, out var usage)) - { - resources[i].Used = usage.Item1; - resources[i].UsedDynamically = usage.Item2; - } - else - { - resources[i].Used = null; - resources[i].UsedDynamically = null; - } - } - } - - CopyUsed(Constants, cbUsage); - CopyUsed(Samplers, tUsage); - CopyUsed(Uavs, uUsage); - } - else - { - ClearUsed(Constants); - ClearUsed(Samplers); - ClearUsed(Uavs); - } - } - - private static string NormalizeResourceName(string resourceName) - { - var dot = resourceName.IndexOf('.'); - if (dot >= 0) - return resourceName[..dot]; - if (resourceName.Length > 1 && resourceName[^2] is '_' && resourceName[^1] is 'S' or 'T') - return resourceName[..^2]; - - return resourceName; - } - } -} diff --git a/Penumbra.GameData/Files/ShpkFile.StringPool.cs b/Penumbra.GameData/Files/ShpkFile.StringPool.cs deleted file mode 100644 index bad56d20..00000000 --- a/Penumbra.GameData/Files/ShpkFile.StringPool.cs +++ /dev/null @@ -1,79 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; - -namespace Penumbra.GameData.Files; - -public partial class ShpkFile -{ - public class StringPool - { - public MemoryStream Data; - public List StartingOffsets; - - public StringPool(ReadOnlySpan bytes) - { - Data = new MemoryStream(); - Data.Write(bytes); - StartingOffsets = new List - { - 0, - }; - for (var i = 0; i < bytes.Length; ++i) - { - if (bytes[i] == 0) - StartingOffsets.Add(i + 1); - } - - if (StartingOffsets[^1] == bytes.Length) - StartingOffsets.RemoveAt(StartingOffsets.Count - 1); - else - Data.WriteByte(0); - } - - public string GetString(int offset, int size) - => Encoding.UTF8.GetString(Data.GetBuffer().AsSpan().Slice(offset, size)); - - public string GetNullTerminatedString(int offset) - { - var str = Data.GetBuffer().AsSpan()[offset..]; - var size = str.IndexOf((byte)0); - if (size >= 0) - str = str[..size]; - return Encoding.UTF8.GetString(str); - } - - public (int, int) FindOrAddString(string str) - { - var dataSpan = Data.GetBuffer().AsSpan(); - var bytes = Encoding.UTF8.GetBytes(str); - foreach (var offset in StartingOffsets) - { - if (offset + bytes.Length > Data.Length) - break; - - var strSpan = dataSpan[offset..]; - var match = true; - for (var i = 0; i < bytes.Length; ++i) - { - if (strSpan[i] != bytes[i]) - { - match = false; - break; - } - } - - if (match && strSpan[bytes.Length] == 0) - return (offset, bytes.Length); - } - - Data.Seek(0L, SeekOrigin.End); - var newOffset = (int)Data.Position; - StartingOffsets.Add(newOffset); - Data.Write(bytes); - Data.WriteByte(0); - return (newOffset, bytes.Length); - } - } -} diff --git a/Penumbra.GameData/Files/ShpkFile.Write.cs b/Penumbra.GameData/Files/ShpkFile.Write.cs deleted file mode 100644 index 117ea5e5..00000000 --- a/Penumbra.GameData/Files/ShpkFile.Write.cs +++ /dev/null @@ -1,165 +0,0 @@ -using System; -using System.IO; - -namespace Penumbra.GameData.Files; - -public partial class ShpkFile -{ - public byte[] Write() - { - if (SubViewKeys.Length != 2) - throw new InvalidDataException(); - - using var stream = new MemoryStream(); - using var blobs = new MemoryStream(); - var strings = new StringPool(ReadOnlySpan.Empty); - using (var w = new BinaryWriter(stream)) - { - w.Write(ShPkMagic); - w.Write(Version); - w.Write(DirectXVersion switch - { - DxVersion.DirectX9 => Dx9Magic, - DxVersion.DirectX11 => Dx11Magic, - _ => throw new NotImplementedException(), - }); - var offsetsPosition = stream.Position; - w.Write(0u); // Placeholder for file size - w.Write(0u); // Placeholder for blobs offset - w.Write(0u); // Placeholder for strings offset - w.Write((uint)VertexShaders.Length); - w.Write((uint)PixelShaders.Length); - w.Write(MaterialParamsSize); - w.Write((uint)MaterialParams.Length); - w.Write((uint)Constants.Length); - w.Write((uint)Samplers.Length); - w.Write((uint)Uavs.Length); - w.Write((uint)SystemKeys.Length); - w.Write((uint)SceneKeys.Length); - w.Write((uint)MaterialKeys.Length); - w.Write((uint)Nodes.Length); - w.Write((uint)Items.Length); - - WriteShaderArray(w, VertexShaders, blobs, strings); - WriteShaderArray(w, PixelShaders, blobs, strings); - - foreach (var materialParam in MaterialParams) - { - w.Write(materialParam.Id); - w.Write(materialParam.ByteOffset); - w.Write(materialParam.ByteSize); - } - - WriteResourceArray(w, Constants, strings); - WriteResourceArray(w, Samplers, strings); - WriteResourceArray(w, Uavs, strings); - - foreach (var key in SystemKeys) - { - w.Write(key.Id); - w.Write(key.DefaultValue); - } - - foreach (var key in SceneKeys) - { - w.Write(key.Id); - w.Write(key.DefaultValue); - } - - foreach (var key in MaterialKeys) - { - w.Write(key.Id); - w.Write(key.DefaultValue); - } - - foreach (var key in SubViewKeys) - w.Write(key.DefaultValue); - - foreach (var node in Nodes) - { - if (node.PassIndices.Length != 16 - || node.SystemKeys.Length != SystemKeys.Length - || node.SceneKeys.Length != SceneKeys.Length - || node.MaterialKeys.Length != MaterialKeys.Length - || node.SubViewKeys.Length != SubViewKeys.Length) - throw new InvalidDataException(); - - w.Write(node.Id); - w.Write(node.Passes.Length); - w.Write(node.PassIndices); - foreach (var key in node.SystemKeys) - w.Write(key); - foreach (var key in node.SceneKeys) - w.Write(key); - foreach (var key in node.MaterialKeys) - w.Write(key); - foreach (var key in node.SubViewKeys) - w.Write(key); - foreach (var pass in node.Passes) - { - w.Write(pass.Id); - w.Write(pass.VertexShader); - w.Write(pass.PixelShader); - } - } - - foreach (var item in Items) - { - w.Write(item.Id); - w.Write(item.Node); - } - - w.Write(AdditionalData); - - var blobsOffset = (int)stream.Position; - blobs.WriteTo(stream); - - var stringsOffset = (int)stream.Position; - strings.Data.WriteTo(stream); - - var fileSize = (int)stream.Position; - - stream.Seek(offsetsPosition, SeekOrigin.Begin); - w.Write(fileSize); - w.Write(blobsOffset); - w.Write(stringsOffset); - } - - return stream.ToArray(); - } - - private static void WriteResourceArray(BinaryWriter w, Resource[] array, StringPool strings) - { - foreach (var buf in array) - { - var (strOffset, strSize) = strings.FindOrAddString(buf.Name); - w.Write(buf.Id); - w.Write(strOffset); - w.Write(strSize); - w.Write(buf.Slot); - w.Write(buf.Size); - } - } - - private static void WriteShaderArray(BinaryWriter w, Shader[] array, MemoryStream blobs, StringPool strings) - { - foreach (var shader in array) - { - var blobOffset = (int)blobs.Position; - blobs.Write(shader.AdditionalHeader); - blobs.Write(shader.Blob); - var blobSize = (int)blobs.Position - blobOffset; - - w.Write(blobOffset); - w.Write(blobSize); - w.Write((ushort)shader.Constants.Length); - w.Write((ushort)shader.Samplers.Length); - w.Write((ushort)shader.Uavs.Length); - w.Write((ushort)0); - - WriteResourceArray(w, shader.Constants, strings); - WriteResourceArray(w, shader.Samplers, strings); - WriteResourceArray(w, shader.Uavs, strings); - } - } -} diff --git a/Penumbra.GameData/Files/ShpkFile.cs b/Penumbra.GameData/Files/ShpkFile.cs deleted file mode 100644 index 5b88bb00..00000000 --- a/Penumbra.GameData/Files/ShpkFile.cs +++ /dev/null @@ -1,486 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Lumina.Extensions; -using Penumbra.GameData.Data; - -namespace Penumbra.GameData.Files; - -public partial class ShpkFile : IWritable -{ - private const uint ShPkMagic = 0x6B506853u; // bytes of ShPk - private const uint Dx9Magic = 0x00395844u; // bytes of DX9\0 - private const uint Dx11Magic = 0x31315844u; // bytes of DX11 - - public const uint MaterialParamsConstantId = 0x64D12851u; - - public uint Version; - public DxVersion DirectXVersion; - public Shader[] VertexShaders; - public Shader[] PixelShaders; - public uint MaterialParamsSize; - public MaterialParam[] MaterialParams; - public Resource[] Constants; - public Resource[] Samplers; - public Resource[] Uavs; - public Key[] SystemKeys; - public Key[] SceneKeys; - public Key[] MaterialKeys; - public Key[] SubViewKeys; - public Node[] Nodes; - public Item[] Items; - public byte[] AdditionalData; - - public bool Valid { get; private set; } - private bool _changed; - - public MaterialParam? GetMaterialParamById(uint id) - => MaterialParams.FirstOrNull(m => m.Id == id); - - public Resource? GetConstantById(uint id) - => Constants.FirstOrNull(c => c.Id == id); - - public Resource? GetConstantByName(string name) - => Constants.FirstOrNull(c => c.Name == name); - - public Resource? GetSamplerById(uint id) - => Samplers.FirstOrNull(s => s.Id == id); - - public Resource? GetSamplerByName(string name) - => Samplers.FirstOrNull(s => s.Name == name); - - public Resource? GetUavById(uint id) - => Uavs.FirstOrNull(u => u.Id == id); - - public Resource? GetUavByName(string name) - => Uavs.FirstOrNull(u => u.Name == name); - - public Key? GetSystemKeyById(uint id) - => SystemKeys.FirstOrNull(k => k.Id == id); - - public Key? GetSceneKeyById(uint id) - => SceneKeys.FirstOrNull(k => k.Id == id); - - public Key? GetMaterialKeyById(uint id) - => MaterialKeys.FirstOrNull(k => k.Id == id); - - public Node? GetNodeById(uint id) - => Nodes.FirstOrNull(n => n.Id == id); - - public Item? GetItemById(uint id) - => Items.FirstOrNull(i => i.Id == id); - - public ShpkFile(byte[] data, bool disassemble = false) - { - using var stream = new MemoryStream(data); - using var r = new BinaryReader(stream); - - if (r.ReadUInt32() != ShPkMagic) - throw new InvalidDataException(); - - Version = r.ReadUInt32(); - DirectXVersion = r.ReadUInt32() switch - { - Dx9Magic => DxVersion.DirectX9, - Dx11Magic => DxVersion.DirectX11, - _ => throw new InvalidDataException(), - }; - if (r.ReadUInt32() != data.Length) - throw new InvalidDataException(); - - var blobsOffset = r.ReadUInt32(); - var stringsOffset = r.ReadUInt32(); - var vertexShaderCount = r.ReadUInt32(); - var pixelShaderCount = r.ReadUInt32(); - MaterialParamsSize = r.ReadUInt32(); - var materialParamCount = r.ReadUInt32(); - var constantCount = r.ReadUInt32(); - var samplerCount = r.ReadUInt32(); - var uavCount = r.ReadUInt32(); - var systemKeyCount = r.ReadUInt32(); - var sceneKeyCount = r.ReadUInt32(); - var materialKeyCount = r.ReadUInt32(); - var nodeCount = r.ReadUInt32(); - var itemCount = r.ReadUInt32(); - - var blobs = new ReadOnlySpan(data, (int)blobsOffset, (int)(stringsOffset - blobsOffset)); - var strings = new StringPool(new ReadOnlySpan(data, (int)stringsOffset, (int)(data.Length - stringsOffset))); - - VertexShaders = ReadShaderArray(r, (int)vertexShaderCount, DisassembledShader.ShaderStage.Vertex, DirectXVersion, disassemble, blobs, - strings); - PixelShaders = ReadShaderArray(r, (int)pixelShaderCount, DisassembledShader.ShaderStage.Pixel, DirectXVersion, disassemble, blobs, - strings); - - MaterialParams = r.ReadStructuresAsArray((int)materialParamCount); - - Constants = ReadResourceArray(r, (int)constantCount, strings); - Samplers = ReadResourceArray(r, (int)samplerCount, strings); - Uavs = ReadResourceArray(r, (int)uavCount, strings); - - SystemKeys = ReadKeyArray(r, (int)systemKeyCount); - SceneKeys = ReadKeyArray(r, (int)sceneKeyCount); - MaterialKeys = ReadKeyArray(r, (int)materialKeyCount); - - var subViewKey1Default = r.ReadUInt32(); - var subViewKey2Default = r.ReadUInt32(); - - SubViewKeys = new Key[] - { - new() - { - Id = 1, - DefaultValue = subViewKey1Default, - Values = Array.Empty(), - }, - new() - { - Id = 2, - DefaultValue = subViewKey2Default, - Values = Array.Empty(), - }, - }; - - Nodes = ReadNodeArray(r, (int)nodeCount, SystemKeys.Length, SceneKeys.Length, MaterialKeys.Length, SubViewKeys.Length); - Items = r.ReadStructuresAsArray((int)itemCount); - - AdditionalData = r.ReadBytes((int)(blobsOffset - r.BaseStream.Position)); // This should be empty, but just in case. - - if (disassemble) - UpdateUsed(); - - UpdateKeyValues(); - - Valid = true; - _changed = false; - } - - public void UpdateResources() - { - var constants = new Dictionary(); - var samplers = new Dictionary(); - var uavs = new Dictionary(); - - static void CollectResources(Dictionary resources, Resource[] shaderResources, Func getExistingById, - DisassembledShader.ResourceType type) - { - foreach (var resource in shaderResources) - { - if (resources.TryGetValue(resource.Id, out var carry) && type != DisassembledShader.ResourceType.ConstantBuffer) - continue; - - var existing = getExistingById(resource.Id); - resources[resource.Id] = new Resource - { - Id = resource.Id, - Name = resource.Name, - Slot = existing?.Slot ?? (type == DisassembledShader.ResourceType.ConstantBuffer ? (ushort)65535 : (ushort)2), - Size = type == DisassembledShader.ResourceType.ConstantBuffer ? Math.Max(carry.Size, resource.Size) : existing?.Size ?? 0, - Used = null, - UsedDynamically = null, - }; - } - } - - foreach (var shader in VertexShaders) - { - CollectResources(constants, shader.Constants, GetConstantById, DisassembledShader.ResourceType.ConstantBuffer); - CollectResources(samplers, shader.Samplers, GetSamplerById, DisassembledShader.ResourceType.Sampler); - CollectResources(uavs, shader.Uavs, GetUavById, DisassembledShader.ResourceType.Uav); - } - - foreach (var shader in PixelShaders) - { - CollectResources(constants, shader.Constants, GetConstantById, DisassembledShader.ResourceType.ConstantBuffer); - CollectResources(samplers, shader.Samplers, GetSamplerById, DisassembledShader.ResourceType.Sampler); - CollectResources(uavs, shader.Uavs, GetUavById, DisassembledShader.ResourceType.Uav); - } - - Constants = constants.Values.ToArray(); - Samplers = samplers.Values.ToArray(); - Uavs = uavs.Values.ToArray(); - UpdateUsed(); - - // Ceil required size to a multiple of 16 bytes. - // Offsets can be skipped, MaterialParamsConstantId's size is the count. - MaterialParamsSize = (GetConstantById(MaterialParamsConstantId)?.Size ?? 0u) << 4; - foreach (var param in MaterialParams) - MaterialParamsSize = Math.Max(MaterialParamsSize, (uint)param.ByteOffset + param.ByteSize); - MaterialParamsSize = (MaterialParamsSize + 0xFu) & ~0xFu; - } - - private void UpdateUsed() - { - var cUsage = new Dictionary(); - var sUsage = new Dictionary(); - var uUsage = new Dictionary(); - - static void CollectUsed(Dictionary usage, - Resource[] resources) - { - foreach (var resource in resources) - { - if (resource.Used == null) - continue; - - usage.TryGetValue(resource.Id, out var carry); - carry.Item1 ??= Array.Empty(); - var combined = new DisassembledShader.VectorComponents[Math.Max(carry.Item1.Length, resource.Used.Length)]; - for (var i = 0; i < combined.Length; ++i) - combined[i] = (i < carry.Item1.Length ? carry.Item1[i] : 0) | (i < resource.Used.Length ? resource.Used[i] : 0); - usage[resource.Id] = (combined, carry.Item2 | (resource.UsedDynamically ?? 0)); - } - } - - static void CopyUsed(Resource[] resources, - Dictionary used) - { - for (var i = 0; i < resources.Length; ++i) - { - if (used.TryGetValue(resources[i].Id, out var usage)) - { - resources[i].Used = usage.Item1; - resources[i].UsedDynamically = usage.Item2; - } - else - { - resources[i].Used = null; - resources[i].UsedDynamically = null; - } - } - } - - foreach (var shader in VertexShaders) - { - CollectUsed(cUsage, shader.Constants); - CollectUsed(sUsage, shader.Samplers); - CollectUsed(uUsage, shader.Uavs); - } - - foreach (var shader in PixelShaders) - { - CollectUsed(cUsage, shader.Constants); - CollectUsed(sUsage, shader.Samplers); - CollectUsed(uUsage, shader.Uavs); - } - - CopyUsed(Constants, cUsage); - CopyUsed(Samplers, sUsage); - CopyUsed(Uavs, uUsage); - } - - public void UpdateKeyValues() - { - static HashSet[] InitializeValueSet(Key[] keys) - => Array.ConvertAll(keys, key => new HashSet() - { - key.DefaultValue, - }); - - static void CollectValues(HashSet[] valueSets, uint[] values) - { - for (var i = 0; i < valueSets.Length; ++i) - valueSets[i].Add(values[i]); - } - - static void CopyValues(Key[] keys, HashSet[] valueSets) - { - for (var i = 0; i < keys.Length; ++i) - keys[i].Values = valueSets[i].ToArray(); - } - - var systemKeyValues = InitializeValueSet(SystemKeys); - var sceneKeyValues = InitializeValueSet(SceneKeys); - var materialKeyValues = InitializeValueSet(MaterialKeys); - var subViewKeyValues = InitializeValueSet(SubViewKeys); - foreach (var node in Nodes) - { - CollectValues(systemKeyValues, node.SystemKeys); - CollectValues(sceneKeyValues, node.SceneKeys); - CollectValues(materialKeyValues, node.MaterialKeys); - CollectValues(subViewKeyValues, node.SubViewKeys); - } - - CopyValues(SystemKeys, systemKeyValues); - CopyValues(SceneKeys, sceneKeyValues); - CopyValues(MaterialKeys, materialKeyValues); - CopyValues(SubViewKeys, subViewKeyValues); - } - - public void SetInvalid() - => Valid = false; - - public void SetChanged() - => _changed = true; - - public bool IsChanged() - { - var changed = _changed; - _changed = false; - return changed; - } - - private static void ClearUsed(Resource[] resources) - { - for (var i = 0; i < resources.Length; ++i) - { - resources[i].Used = null; - resources[i].UsedDynamically = null; - } - } - - private static Resource[] ReadResourceArray(BinaryReader r, int count, StringPool strings) - { - var ret = new Resource[count]; - for (var i = 0; i < count; ++i) - { - var id = r.ReadUInt32(); - var strOffset = r.ReadUInt32(); - var strSize = r.ReadUInt32(); - ret[i] = new Resource - { - Id = id, - Name = strings.GetString((int)strOffset, (int)strSize), - Slot = r.ReadUInt16(), - Size = r.ReadUInt16(), - }; - } - - return ret; - } - - private static Shader[] ReadShaderArray(BinaryReader r, int count, DisassembledShader.ShaderStage stage, DxVersion directX, - bool disassemble, ReadOnlySpan blobs, StringPool strings) - { - var extraHeaderSize = stage switch - { - DisassembledShader.ShaderStage.Vertex => directX switch - { - DxVersion.DirectX9 => 4, - DxVersion.DirectX11 => 8, - _ => throw new NotImplementedException(), - }, - _ => 0, - }; - - var ret = new Shader[count]; - for (var i = 0; i < count; ++i) - { - var blobOffset = r.ReadUInt32(); - var blobSize = r.ReadUInt32(); - var constantCount = r.ReadUInt16(); - var samplerCount = r.ReadUInt16(); - var uavCount = r.ReadUInt16(); - if (r.ReadUInt16() != 0) - throw new NotImplementedException(); - - var rawBlob = blobs.Slice((int)blobOffset, (int)blobSize); - - ret[i] = new Shader - { - Stage = disassemble ? stage : DisassembledShader.ShaderStage.Unspecified, - DirectXVersion = directX, - Constants = ReadResourceArray(r, constantCount, strings), - Samplers = ReadResourceArray(r, samplerCount, strings), - Uavs = ReadResourceArray(r, uavCount, strings), - AdditionalHeader = rawBlob[..extraHeaderSize].ToArray(), - Blob = rawBlob[extraHeaderSize..].ToArray(), - }; - } - - return ret; - } - - private static Key[] ReadKeyArray(BinaryReader r, int count) - { - var ret = new Key[count]; - for (var i = 0; i < count; ++i) - { - ret[i] = new Key - { - Id = r.ReadUInt32(), - DefaultValue = r.ReadUInt32(), - Values = Array.Empty(), - }; - } - - return ret; - } - - private static Node[] ReadNodeArray(BinaryReader r, int count, int systemKeyCount, int sceneKeyCount, int materialKeyCount, - int subViewKeyCount) - { - var ret = new Node[count]; - for (var i = 0; i < count; ++i) - { - var id = r.ReadUInt32(); - var passCount = r.ReadUInt32(); - ret[i] = new Node - { - Id = id, - PassIndices = r.ReadBytes(16), - SystemKeys = r.ReadStructuresAsArray(systemKeyCount), - SceneKeys = r.ReadStructuresAsArray(sceneKeyCount), - MaterialKeys = r.ReadStructuresAsArray(materialKeyCount), - SubViewKeys = r.ReadStructuresAsArray(subViewKeyCount), - Passes = r.ReadStructuresAsArray((int)passCount), - }; - } - - return ret; - } - - public enum DxVersion : uint - { - DirectX9 = 9, - DirectX11 = 11, - } - - public struct Resource - { - public uint Id; - public string Name; - public ushort Slot; - public ushort Size; - public DisassembledShader.VectorComponents[]? Used; - public DisassembledShader.VectorComponents? UsedDynamically; - } - - public struct MaterialParam - { - public uint Id; - public ushort ByteOffset; - public ushort ByteSize; - } - - public struct Pass - { - public uint Id; - public uint VertexShader; - public uint PixelShader; - } - - public struct Key - { - public uint Id; - public uint DefaultValue; - public uint[] Values; - } - - public struct Node - { - public uint Id; - public byte[] PassIndices; - public uint[] SystemKeys; - public uint[] SceneKeys; - public uint[] MaterialKeys; - public uint[] SubViewKeys; - public Pass[] Passes; - } - - public struct Item - { - public uint Id; - public uint Node; - } -} diff --git a/Penumbra.GameData/Files/StmFile.StainingTemplateEntry.cs b/Penumbra.GameData/Files/StmFile.StainingTemplateEntry.cs deleted file mode 100644 index 6da0ab2e..00000000 --- a/Penumbra.GameData/Files/StmFile.StainingTemplateEntry.cs +++ /dev/null @@ -1,174 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Numerics; -using Lumina.Extensions; -using Penumbra.GameData.Structs; - -namespace Penumbra.GameData.Files; - -public partial class StmFile -{ - public readonly struct StainingTemplateEntry - { - /// - /// The number of stains is capped at 128 at the moment - /// - public const int NumElements = 128; - - // ColorSet row information for each stain. - public readonly IReadOnlyList<(Half R, Half G, Half B)> DiffuseEntries; - public readonly IReadOnlyList<(Half R, Half G, Half B)> SpecularEntries; - public readonly IReadOnlyList<(Half R, Half G, Half B)> EmissiveEntries; - public readonly IReadOnlyList GlossEntries; - public readonly IReadOnlyList SpecularPowerEntries; - - public DyePack this[StainId idx] - => this[(int)idx.Value]; - - public DyePack this[int idx] - { - get - { - // The 0th index is skipped. - if (idx is <= 0 or > NumElements) - return default; - - --idx; - var (dr, dg, db) = DiffuseEntries[idx]; - var (sr, sg, sb) = SpecularEntries[idx]; - var (er, eg, eb) = EmissiveEntries[idx]; - var g = GlossEntries[idx]; - var sp = SpecularPowerEntries[idx]; - // Convert to DyePack using floats. - return new DyePack - { - Diffuse = new Vector3((float)dr, (float)dg, (float)db), - Specular = new Vector3((float)sr, (float)sg, (float)sb), - Emissive = new Vector3((float)er, (float)eg, (float)eb), - Gloss = (float)g, - SpecularPower = (float)sp, - }; - } - } - - private static IReadOnlyList ReadArray(BinaryReader br, int offset, int size, Func read, int entrySize) - { - br.Seek(offset); - var arraySize = size / entrySize; - // The actual amount of entries informs which type of list we use. - switch (arraySize) - { - case 0: return new RepeatingList(default!, NumElements); // All default - case 1: return new RepeatingList(read(br), NumElements); // All single entry - case NumElements: // 1-to-1 entries - var ret = new T[NumElements]; - for (var i = 0; i < NumElements; ++i) - ret[i] = read(br); - return ret; - // Indexed access. - case < NumElements: return new IndexedList(br, arraySize - NumElements / entrySize, NumElements, read); - // Should not happen. - case > NumElements: throw new InvalidDataException($"Stain Template can not have more than {NumElements} elements."); - } - } - - // Read functions - private static (Half, Half, Half) ReadTriple(BinaryReader br) - => (br.ReadHalf(), br.ReadHalf(), br.ReadHalf()); - - private static Half ReadSingle(BinaryReader br) - => br.ReadHalf(); - - // Actually parse an entry. - public unsafe StainingTemplateEntry(BinaryReader br, int offset) - { - br.Seek(offset); - // 5 different lists of values. - Span ends = stackalloc ushort[5]; - for (var i = 0; i < ends.Length; ++i) - ends[i] = (ushort)(br.ReadUInt16() * 2); // because the ends are in terms of ushort. - offset += ends.Length * 2; - - DiffuseEntries = ReadArray(br, offset, ends[0], ReadTriple, 6); - SpecularEntries = ReadArray(br, offset + ends[0], ends[1] - ends[0], ReadTriple, 6); - EmissiveEntries = ReadArray(br, offset + ends[1], ends[2] - ends[1], ReadTriple, 6); - GlossEntries = ReadArray(br, offset + ends[2], ends[3] - ends[2], ReadSingle, 2); - SpecularPowerEntries = ReadArray(br, offset + ends[3], ends[4] - ends[3], ReadSingle, 2); - } - - /// - /// Used if a single value is used for all entries of a list. - /// - private sealed class RepeatingList : IReadOnlyList - { - private readonly T _value; - public int Count { get; } - - public RepeatingList(T value, int size) - { - _value = value; - Count = size; - } - - public IEnumerator GetEnumerator() - { - for (var i = 0; i < Count; ++i) - yield return _value; - } - - IEnumerator IEnumerable.GetEnumerator() - => GetEnumerator(); - - public T this[int index] - => index >= 0 && index < Count ? _value : throw new IndexOutOfRangeException(); - } - - /// - /// Used if there is a small set of values for a bigger list, accessed via index information. - /// - private sealed class IndexedList : IReadOnlyList - { - private readonly T[] _values; - private readonly byte[] _indices; - - /// - /// Reads values from via , then reads byte indices. - /// - public IndexedList(BinaryReader br, int count, int indexCount, Func read) - { - _values = new T[count + 1]; - _indices = new byte[indexCount]; - _values[0] = default!; - for (var i = 1; i < count + 1; ++i) - _values[i] = read(br); - - // Seems to be an unused 0xFF byte marker. - // Necessary for correct offsets. - br.ReadByte(); - for (var i = 0; i < indexCount; ++i) - { - _indices[i] = br.ReadByte(); - if (_indices[i] > count) - _indices[i] = 0; - } - } - - public IEnumerator GetEnumerator() - { - for (var i = 0; i < NumElements; ++i) - yield return _values[_indices[i]]; - } - - IEnumerator IEnumerable.GetEnumerator() - => GetEnumerator(); - - public int Count - => _indices.Length; - - public T this[int index] - => index >= 0 && index < Count ? _values[_indices[index]] : default!; - } - } -} diff --git a/Penumbra.GameData/Files/StmFile.cs b/Penumbra.GameData/Files/StmFile.cs deleted file mode 100644 index 7ee4f0d3..00000000 --- a/Penumbra.GameData/Files/StmFile.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Numerics; -using Dalamud.Data; -using Penumbra.GameData.Structs; - -namespace Penumbra.GameData.Files; - -public partial class StmFile -{ - public const string Path = "chara/base_material/stainingtemplate.stm"; - - /// - /// All dye-able color set information for a row. - /// - public record struct DyePack - { - public Vector3 Diffuse; - public Vector3 Specular; - public Vector3 Emissive; - public float Gloss; - public float SpecularPower; - } - - /// - /// All currently available dyeing templates with their IDs. - /// - public readonly IReadOnlyDictionary Entries; - - /// - /// Access a specific dye pack. - /// - /// The ID of the accessed template. - /// The ID of the Stain. - /// The corresponding color set information or a defaulted DyePack of 0-entries. - public DyePack this[ushort template, int idx] - => Entries.TryGetValue(template, out var entry) ? entry[idx] : default; - - /// - public DyePack this[ushort template, StainId idx] - => this[template, (int)idx.Value]; - - /// - /// Try to access a specific dye pack. - /// - /// The ID of the accessed template. - /// The ID of the Stain. - /// On success, the corresponding color set information, otherwise a defaulted DyePack. - /// True on success, false otherwise. - public bool TryGetValue(ushort template, StainId idx, out DyePack dyes) - { - if (idx.Value is > 0 and <= StainingTemplateEntry.NumElements && Entries.TryGetValue(template, out var entry)) - { - dyes = entry[idx]; - return true; - } - - dyes = default; - return false; - } - - /// - /// Create a STM file from the given data array. - /// - public StmFile(byte[] data) - { - using var stream = new MemoryStream(data); - using var br = new BinaryReader(stream); - br.ReadUInt32(); - var numEntries = br.ReadInt32(); - - var keys = new ushort[numEntries]; - var offsets = new ushort[numEntries]; - - for (var i = 0; i < numEntries; ++i) - keys[i] = br.ReadUInt16(); - - for (var i = 0; i < numEntries; ++i) - offsets[i] = br.ReadUInt16(); - - var entries = new Dictionary(numEntries); - Entries = entries; - - for (var i = 0; i < numEntries; ++i) - { - var offset = offsets[i] * 2 + 8 + 4 * numEntries; - entries.Add(keys[i], new StainingTemplateEntry(br, offset)); - } - } - - /// - /// Try to read and parse the default STM file given by Lumina. - /// - public StmFile(DataManager gameData) - : this(gameData.GetFile(Path)?.Data ?? Array.Empty()) - { } -} diff --git a/Penumbra.GameData/GameData.cs b/Penumbra.GameData/GameData.cs deleted file mode 100644 index 5f8c2fe4..00000000 --- a/Penumbra.GameData/GameData.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Collections.Generic; -using Dalamud; -using Dalamud.Data; -using Dalamud.Game.ClientState.Objects.Enums; -using Dalamud.Plugin; -using Penumbra.GameData.Data; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; - -namespace Penumbra.GameData; - -public static class GameData -{ - /// - /// Obtain an object identifier that can link a game path to game objects that use it, using your client language. - /// - public static IObjectIdentifier GetIdentifier(DalamudPluginInterface pluginInterface, DataManager dataManager, ItemData itemData) - => new ObjectIdentification(pluginInterface, dataManager, itemData, dataManager.Language); - - /// - /// Obtain an object identifier that can link a game path to game objects that use it using the given language. - /// - public static IObjectIdentifier GetIdentifier(DalamudPluginInterface pluginInterface, DataManager dataManager, ItemData itemData, ClientLanguage language) - => new ObjectIdentification(pluginInterface, dataManager, itemData, language); - - /// - /// Obtain a parser for game paths. - /// - public static IGamePathParser GetGamePathParser() - => new GamePathParser(); -} - -public interface IObjectIdentifier : IDisposable -{ - /// - /// An accessible parser for game paths. - /// - public IGamePathParser GamePathParser { get; } - - /// - /// Add all known game objects using the given game path to the dictionary. - /// - /// A pre-existing dictionary to which names (and optional linked objects) can be added. - /// The game path to identify. - public void Identify(IDictionary set, string path); - - /// - /// Return named information and possibly linked objects for all known game objects using the given path. - /// - /// The game path to identify. - public Dictionary Identify(string path); - - /// - /// Identify an equippable item by its model values. - /// - /// The primary model ID for the piece of equipment. - /// The secondary model ID for weapons, WeaponType.Zero for equipment and accessories. - /// The variant ID of the model. - /// The equipment slot the piece of equipment uses. - public IEnumerable Identify(SetId setId, WeaponType weaponType, ushort variant, EquipSlot slot); - - /// - public IEnumerable Identify(SetId setId, ushort variant, EquipSlot slot) - => Identify(setId, 0, variant, slot); - - /// Obtain a list of BNPC Name Ids associated with a BNPC Id. - public IReadOnlyList GetBnpcNames(uint bNpcId); - - /// Obtain a list of Names and Object Kinds associated with a ModelChara ID. - public IReadOnlyList<(string Name, ObjectKind Kind, uint Id)> ModelCharaNames(uint modelId); - - public int NumModelChara { get; } -} - -public interface IGamePathParser -{ - public ObjectType PathToObjectType(string path); - public GameObjectInfo GetFileInfo(string path); - public string VfxToKey(string path); -} diff --git a/Penumbra.GameData/Interop/D3DCompiler.cs b/Penumbra.GameData/Interop/D3DCompiler.cs deleted file mode 100644 index 04bf1ba7..00000000 --- a/Penumbra.GameData/Interop/D3DCompiler.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Text; -using Penumbra.String; - -namespace Penumbra.GameData.Interop; - -internal static class D3DCompiler -{ - [Guid("8BA5FB08-5195-40e2-AC58-0D989C3A0102")] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - private interface ID3DBlob - { - [PreserveSig] - public unsafe void* GetBufferPointer(); - - [PreserveSig] - public UIntPtr GetBufferSize(); - } - - [Flags] - public enum DisassembleFlags : uint - { - EnableColorCode = 1, - EnableDefaultValuePrints = 2, - EnableInstructionNumbering = 4, - EnableInstructionCycle = 8, - DisableDebugInfo = 16, - EnableInstructionOffset = 32, - InstructionOnly = 64, - PrintHexLiterals = 128, - } - - public static unsafe ByteString Disassemble(ReadOnlySpan blob, DisassembleFlags flags = 0, string comments = "") - { - ID3DBlob? disassembly = null; - try - { - fixed (byte* pSrcData = blob) - { - var hr = D3DDisassemble(pSrcData, new UIntPtr((uint)blob.Length), (uint)flags, comments, out disassembly); - Marshal.ThrowExceptionForHR(hr); - } - - return disassembly == null - ? ByteString.Empty - : new ByteString((byte*)disassembly.GetBufferPointer()).Clone(); - } - finally - { - if (disassembly != null) - Marshal.FinalReleaseComObject(disassembly); - } - } - - [PreserveSig] - [DllImport("D3DCompiler_47.dll")] - private static extern unsafe int D3DDisassemble( - [In] byte* pSrcData, - [In] UIntPtr srcDataSize, - uint flags, - [MarshalAs(UnmanagedType.LPStr)] string szComments, - out ID3DBlob? ppDisassembly); -} diff --git a/Penumbra.GameData/Offsets.cs b/Penumbra.GameData/Offsets.cs deleted file mode 100644 index 00c1c8e2..00000000 --- a/Penumbra.GameData/Offsets.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace Penumbra.GameData; - -public static class Offsets -{ - // ActorManager.Data - public const int AgentCharaCardDataWorldId = 0xC0; - - // ObjectIdentification - public const int DrawObjectGetModelTypeVfunc = 50; - private const int DrawObjectModelBase = 0x8E8; - public const int DrawObjectModelUnk1 = DrawObjectModelBase; - public const int DrawObjectModelUnk2 = DrawObjectModelBase + 0x08; - public const int DrawObjectModelUnk3 = DrawObjectModelBase + 0x20; - public const int DrawObjectModelUnk4 = DrawObjectModelBase + 0x28; - - // PathResolver.AnimationState - public const int GetGameObjectIdxVfunc = 28; - public const int TimeLinePtr = 0x50; - - // PathResolver.Meta - public const int UpdateModelSkip = 0x90c; - public const int GetEqpIndirectSkip1 = 0xA30; - public const int GetEqpIndirectSkip2 = 0xA28; - - // FontReloader - public const int ReloadFontsVfunc = 43; - - // ObjectReloader - public const int EnableDrawVfunc = 16; - public const int DisableDrawVfunc = 17; - - // ResourceHandle - public const int ResourceHandleGetDataVfunc = 23; - public const int ResourceHandleGetLengthVfunc = 17; -} diff --git a/Penumbra.GameData/Penumbra.GameData.csproj b/Penumbra.GameData/Penumbra.GameData.csproj deleted file mode 100644 index 68fcb147..00000000 --- a/Penumbra.GameData/Penumbra.GameData.csproj +++ /dev/null @@ -1,64 +0,0 @@ - - - net7.0-windows - preview - x64 - Penumbra.GameData - absolute gangstas - Penumbra - Copyright © 2022 - 1.0.0.0 - 1.0.0.0 - bin\$(Configuration)\ - true - enable - true - false - false - - - - full - DEBUG;TRACE - - - - pdbonly - - - - $(MSBuildWarningsAsMessages);MSB3277 - - - - $(AppData)\XIVLauncher\addon\Hooks\dev\ - - - - - - - - - - $(DalamudLibPath)Dalamud.dll - False - - - $(DalamudLibPath)Lumina.dll - False - - - $(DalamudLibPath)Lumina.Excel.dll - False - - - $(DalamudLibPath)FFXIVClientStructs.dll - False - - - $(DalamudLibPath)Newtonsoft.Json.dll - False - - - diff --git a/Penumbra.GameData/Signatures.cs b/Penumbra.GameData/Signatures.cs deleted file mode 100644 index 3bdb22ba..00000000 --- a/Penumbra.GameData/Signatures.cs +++ /dev/null @@ -1,90 +0,0 @@ -namespace Penumbra.GameData; - -public static class Sigs -{ - // ResourceLoader.Debug - public const string ResourceManager = "48 8B 05 ?? ?? ?? ?? 33 ED F0"; - - // ResourceLoader.Replacement - public const string GetResourceSync = "E8 ?? ?? 00 00 48 8D 8F ?? ?? 00 00 48 89 87 ?? ?? 00 00"; - public const string GetResourceAsync = "E8 ?? ?? ?? 00 48 8B D8 EB ?? F0 FF 83 ?? ?? 00 00"; - public const string ReadFile = "E8 ?? ?? ?? ?? 84 C0 0F 84 ?? 00 00 00 4C 8B C3 BA 05"; - public const string ReadSqPack = "E8 ?? ?? ?? ?? EB 05 E8 ?? ?? ?? ?? 84 C0 0F 84 ?? 00 00 00 4C 8B C3"; - - // ResourceLoader.TexMdl - public const string CheckFileState = "E8 ?? ?? ?? ?? 48 85 c0 74 ?? 45 0f b6 ce 48 89 44 24"; - public const string LoadTexFileLocal = "48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 30 49 8B F0 44 88 4C 24 20"; - public const string LoadMdlFileLocal = "40 55 53 56 57 41 56 41 57 48 8D 6C 24 D1 48 81 EC 98 00 00 00"; - public const string LoadTexFileExtern = "E8 ?? ?? ?? ?? 0F B6 E8 48 8B CB E8"; - public const string LoadMdlFileExtern = "E8 ?? ?? ?? ?? EB 02 B0 F1"; - - // GameEventManager - public const string ResourceHandleDestructor = "48 89 5C 24 ?? 57 48 83 EC ?? 48 8D 05 ?? ?? ?? ?? 48 8B D9 48 89 01 B8"; - public const string CopyCharacter = "E8 ?? ?? ?? ?? 0F B6 9F ?? ?? ?? ?? 48 8D 8F"; - - public const string CharacterDestructor = - "48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC ?? 48 8D 05 ?? ?? ?? ?? 48 8B D9 48 89 01 48 8D 05 ?? ?? ?? ?? 48 89 81 ?? ?? ?? ?? 48 8D 05"; - - // PathResolver.AnimationState - public const string LoadCharacterSound = "4C 89 4C 24 ?? 55 57 41 56"; - public const string LoadTimelineResources = "E8 ?? ?? ?? ?? 83 7F ?? ?? 75 ?? 0F B6 87"; - public const string CharacterBaseLoadAnimation = "E8 ?? ?? ?? ?? BA ?? ?? ?? ?? 48 8B CF 44 8B C2 E8 ?? ?? ?? ?? 48 8B 05"; - public const string LoadSomePap = "48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 41 56 41 57 48 83 EC ?? 41 8B D9 89 51"; - public const string LoadSomeAction = "E8 ?? ?? ?? ?? C6 83 ?? ?? ?? ?? ?? 8B 8E"; - public const string LoadCharacterVfx = "E8 ?? ?? ?? ?? 48 8B F8 48 8D 93"; - public const string LoadAreaVfx = "48 8B C4 53 55 56 57 41 56 48 81 EC"; - public const string ScheduleClipUpdate = "40 53 55 56 57 41 56 48 81 EC ?? ?? ?? ?? 48 8B F9"; - - // PathResolver.DrawObjectState - public const string CharacterBaseCreate = "E8 ?? ?? ?? ?? 48 85 C0 74 21 C7 40"; - - public const string CharacterBaseDestructor = - "E8 ?? ?? ?? ?? 40 F6 C7 01 74 3A 40 F6 C7 04 75 27 48 85 DB 74 2F 48 8B 05 ?? ?? ?? ?? 48 8B D3 48 8B 48 30"; - - public const string EnableDraw = "E8 ?? ?? ?? ?? 48 8B 8B ?? ?? ?? ?? 48 85 C9 74 33 45 33 C0"; - public const string WeaponReload = "E8 ?? ?? ?? ?? 33 DB BE"; - - // PathResolver.Meta - public const string UpdateModel = "48 8B ?? 56 48 83 ?? ?? ?? B9"; - public const string GetEqpIndirect = "40 ?? 48 83 ?? ?? ?? 81 ?? ?? ?? ?? ?? 48 8B ?? 74 ?? ?? 83 ?? ?? ?? ?? ?? ?? 74 ?? 4C"; - public const string SetupVisor = "48 8B ?? 53 55 57 48 83 ?? ?? 48 8B"; - public const string RspSetupCharacter = "48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 88 54 24 ?? 57 41 56"; - public const string ChangeCustomize = "E8 ?? ?? ?? ?? 41 0F B6 C5 66 41 89 86"; - - // PathResolver.PathState - public const string HumanVTable = "48 8D 05 ?? ?? ?? ?? 48 89 03 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 89 8B"; - - public const string WeaponVTable = - "48 8D 05 ?? ?? ?? ?? 48 89 03 B8 ?? ?? ?? ?? 66 89 83 ?? ?? ?? ?? 48 8B C3 48 89 8B ?? ?? ?? ?? 48 89 8B"; - - public const string DemiHumanVTable = "48 8D 05 ?? ?? ?? ?? 48 89 03 48 8B C3 89 8B"; - public const string MonsterVTable = "48 8D 05 ?? ?? ?? ?? 48 89 03 33 C0 48 89 83 ?? ?? ?? ?? 48 89 83 ?? ?? ?? ?? C7 83"; - - // PathResolver.Subfiles - public const string LoadMtrlTex = "4C 8B DC 49 89 5B ?? 49 89 73 ?? 55 57 41 55"; - - public const string LoadMtrlShpk = - "48 89 5C 24 ?? 57 48 81 EC ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 84 24 ?? ?? ?? ?? 44 0F B7 89"; - - public const string ApricotResourceLoad = "48 89 74 24 ?? 57 48 83 EC ?? 41 0F B6 F0 48 8B F9"; - - // CharacterUtility - public const string CharacterUtility = "48 8B 05 ?? ?? ?? ?? 83 B9"; - public const string LoadCharacterResources = "E8 ?? ?? ?? ?? 48 8D 8F ?? ?? ?? ?? E8 ?? ?? ?? ?? 33 D2 45 33 C0"; - - // MetaFileManager - public const string GetFileSpace = "E8 ?? ?? ?? ?? 41 B9 ?? ?? ?? ?? 4C 8B C0"; - - // ResidentResourceManager - public const string ResidentResourceManager = "0F 44 FE 48 8B 0D ?? ?? ?? ?? 48 85 C9 74 05"; - - public const string LoadPlayerResources = - "E8 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? BA ?? ?? ?? ?? 41 B8 ?? ?? ?? ?? 48 8B 48 30 48 8B 01 FF 50 10 48 85 C0 74 0A"; - - public const string UnloadPlayerResources = - "41 55 48 81 EC ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 84 24 ?? ?? ?? ?? 4C 8B E9 48 83 C1 08"; - - // ActorManager - public const string InspectTitleId = "0F B7 0D ?? ?? ?? ?? C7 85"; - public const string InspectWorldId = "0F B7 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8B D0"; -} diff --git a/Penumbra.GameData/Structs/CharacterArmor.cs b/Penumbra.GameData/Structs/CharacterArmor.cs deleted file mode 100644 index 7351bc48..00000000 --- a/Penumbra.GameData/Structs/CharacterArmor.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Penumbra.GameData.Structs; - -[StructLayout(LayoutKind.Explicit, Pack = 1)] -public struct CharacterArmor : IEquatable -{ - public const int Size = 4; - - [FieldOffset(0)] - public readonly uint Value; - - [FieldOffset(0)] - public SetId Set; - - [FieldOffset(2)] - public byte Variant; - - [FieldOffset(3)] - public StainId Stain; - - public CharacterArmor(SetId set, byte variant, StainId stain) - { - Value = 0; - Set = set; - Variant = variant; - Stain = stain; - } - - public readonly CharacterArmor With(StainId stain) - => new(Set, Variant, stain); - - public readonly CharacterWeapon ToWeapon(WeaponType type) - => new(Set, type, Variant, Stain); - - public readonly CharacterWeapon ToWeapon(WeaponType type, StainId stain) - => new(Set, type, Variant, stain); - - public override readonly string ToString() - => $"{Set},{Variant},{Stain}"; - - public static readonly CharacterArmor Empty; - - public readonly bool Equals(CharacterArmor other) - => Value == other.Value; - - public override readonly bool Equals(object? obj) - => obj is CharacterArmor other && Equals(other); - - public override readonly int GetHashCode() - => (int)Value; - - public static bool operator ==(CharacterArmor left, CharacterArmor right) - => left.Value == right.Value; - - public static bool operator !=(CharacterArmor left, CharacterArmor right) - => left.Value != right.Value; -} diff --git a/Penumbra.GameData/Structs/CharacterWeapon.cs b/Penumbra.GameData/Structs/CharacterWeapon.cs deleted file mode 100644 index c86dd467..00000000 --- a/Penumbra.GameData/Structs/CharacterWeapon.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Penumbra.GameData.Structs; - -[StructLayout(LayoutKind.Explicit, Pack = 1, Size = 7)] -public struct CharacterWeapon : IEquatable -{ - [FieldOffset(0)] - public SetId Set; - - [FieldOffset(2)] - public WeaponType Type; - - [FieldOffset(4)] - public ushort Variant; - - [FieldOffset(6)] - public StainId Stain; - - public readonly ulong Value - => (ulong)Set | ((ulong)Type << 16) | ((ulong)Variant << 32) | ((ulong)Stain << 48); - - public override readonly string ToString() - => $"{Set},{Type},{Variant},{Stain}"; - - public CharacterWeapon(SetId set, WeaponType type, ushort variant, StainId stain) - { - Set = set; - Type = type; - Variant = variant; - Stain = stain; - } - - public CharacterWeapon(ulong value) - { - Set = (SetId)value; - Type = (WeaponType)(value >> 16); - Variant = (ushort)(value >> 32); - Stain = (StainId)(value >> 48); - } - - public readonly CharacterWeapon With(StainId stain) - => new(Set, Type, Variant, stain); - - public readonly CharacterArmor ToArmor() - => new(Set, (byte)Variant, Stain); - - public readonly CharacterArmor ToArmor(StainId stain) - => new(Set, (byte)Variant, stain); - - public static readonly CharacterWeapon Empty = new(0, 0, 0, 0); - - public readonly bool Equals(CharacterWeapon other) - => Value == other.Value; - - public override readonly bool Equals(object? obj) - => obj is CharacterWeapon other && Equals(other); - - public override readonly int GetHashCode() - => Value.GetHashCode(); - - public static bool operator ==(CharacterWeapon left, CharacterWeapon right) - => left.Value == right.Value; - - public static bool operator !=(CharacterWeapon left, CharacterWeapon right) - => left.Value != right.Value; -} diff --git a/Penumbra.GameData/Structs/CustomizeData.cs b/Penumbra.GameData/Structs/CustomizeData.cs deleted file mode 100644 index 209574ec..00000000 --- a/Penumbra.GameData/Structs/CustomizeData.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Text; -using Penumbra.String.Functions; - -namespace Penumbra.GameData.Structs; - -[StructLayout(LayoutKind.Sequential, Size = Size)] -public unsafe struct CustomizeData : IEquatable, IReadOnlyCollection -{ - public const int Size = 26; - - public fixed byte Data[Size]; - - public int Count - => Size; - - public IEnumerator GetEnumerator() - { - for (var i = 0; i < Size; ++i) - yield return At(i); - } - - IEnumerator IEnumerable.GetEnumerator() - => GetEnumerator(); - - - public byte At(int index) - => Data[index]; - - public void Set(int index, byte value) - => Data[index] = value; - - public void Read(void* source) - { - fixed (byte* ptr = Data) - { - MemoryUtility.MemCpyUnchecked(ptr, source, Size); - } - } - - public readonly void Write(void* target) - { - fixed (byte* ptr = Data) - { - MemoryUtility.MemCpyUnchecked(target, ptr, Size); - } - } - - public readonly CustomizeData Clone() - { - var ret = new CustomizeData(); - Write(ret.Data); - return ret; - } - - public readonly bool Equals(CustomizeData other) - { - fixed (byte* ptr = Data) - { - return MemoryUtility.MemCmpUnchecked(ptr, other.Data, Size) == 0; - } - } - - public override bool Equals(object? obj) - => obj is CustomizeData other && Equals(other); - - public static bool Equals(CustomizeData* lhs, CustomizeData* rhs) - => MemoryUtility.MemCmpUnchecked(lhs, rhs, Size) == 0; - - /// Compare Gender and then only from Height onwards, because all screen actors are set to Height 50, - /// the Race is implicitly included in the subrace (after height), - /// and the body type is irrelevant for players.> - public static bool ScreenActorEquals(CustomizeData* lhs, CustomizeData* rhs) - => lhs->Data[1] == rhs->Data[1] && MemoryUtility.MemCmpUnchecked(lhs->Data + 4, rhs->Data + 4, Size - 4) == 0; - - public override int GetHashCode() - { - fixed (byte* ptr = Data) - { - var p = (int*)ptr; - var u = *(ushort*)(p + 6); - return HashCode.Combine(*p, p[1], p[2], p[3], p[4], p[5], u); - } - } - - public readonly string WriteBase64() - { - fixed (byte* ptr = Data) - { - var data = new ReadOnlySpan(ptr, Size); - return Convert.ToBase64String(data); - } - } - - public override string ToString() - { - var sb = new StringBuilder(Size * 3); - for (var i = 0; i < Size - 1; ++i) - sb.Append($"{Data[i]:X2} "); - sb.Append($"{Data[Size - 1]:X2}"); - return sb.ToString(); - } - - - public bool LoadBase64(string base64) - { - var buffer = stackalloc byte[Size]; - var span = new Span(buffer, Size); - if (!Convert.TryFromBase64String(base64, span, out var written) || written != Size) - return false; - - Read(buffer); - return true; - } -} diff --git a/Penumbra.GameData/Structs/EqdpEntry.cs b/Penumbra.GameData/Structs/EqdpEntry.cs deleted file mode 100644 index 00d05bc5..00000000 --- a/Penumbra.GameData/Structs/EqdpEntry.cs +++ /dev/null @@ -1,120 +0,0 @@ -using System; -using System.ComponentModel; -using Penumbra.GameData.Enums; - -namespace Penumbra.GameData.Structs; - -[Flags] -public enum EqdpEntry : ushort -{ - Invalid = 0, - Head1 = 0b0000000001, - Head2 = 0b0000000010, - HeadMask = 0b0000000011, - - Body1 = 0b0000000100, - Body2 = 0b0000001000, - BodyMask = 0b0000001100, - - Hands1 = 0b0000010000, - Hands2 = 0b0000100000, - HandsMask = 0b0000110000, - - Legs1 = 0b0001000000, - Legs2 = 0b0010000000, - LegsMask = 0b0011000000, - - Feet1 = 0b0100000000, - Feet2 = 0b1000000000, - FeetMask = 0b1100000000, - - Ears1 = 0b0000000001, - Ears2 = 0b0000000010, - EarsMask = 0b0000000011, - - Neck1 = 0b0000000100, - Neck2 = 0b0000001000, - NeckMask = 0b0000001100, - - Wrists1 = 0b0000010000, - Wrists2 = 0b0000100000, - WristsMask = 0b0000110000, - - RingR1 = 0b0001000000, - RingR2 = 0b0010000000, - RingRMask = 0b0011000000, - - RingL1 = 0b0100000000, - RingL2 = 0b1000000000, - RingLMask = 0b1100000000, -} - -public static class Eqdp -{ - public static int Offset( EquipSlot slot ) - => slot switch - { - EquipSlot.Head => 0, - EquipSlot.Body => 2, - EquipSlot.Hands => 4, - EquipSlot.Legs => 6, - EquipSlot.Feet => 8, - EquipSlot.Ears => 0, - EquipSlot.Neck => 2, - EquipSlot.Wrists => 4, - EquipSlot.RFinger => 6, - EquipSlot.LFinger => 8, - _ => throw new InvalidEnumArgumentException(), - }; - - public static (bool, bool) ToBits( this EqdpEntry entry, EquipSlot slot ) - => slot switch - { - EquipSlot.Head => ( entry.HasFlag( EqdpEntry.Head1 ), entry.HasFlag( EqdpEntry.Head2 ) ), - EquipSlot.Body => ( entry.HasFlag( EqdpEntry.Body1 ), entry.HasFlag( EqdpEntry.Body2 ) ), - EquipSlot.Hands => ( entry.HasFlag( EqdpEntry.Hands1 ), entry.HasFlag( EqdpEntry.Hands2 ) ), - EquipSlot.Legs => ( entry.HasFlag( EqdpEntry.Legs1 ), entry.HasFlag( EqdpEntry.Legs2 ) ), - EquipSlot.Feet => ( entry.HasFlag( EqdpEntry.Feet1 ), entry.HasFlag( EqdpEntry.Feet2 ) ), - EquipSlot.Ears => ( entry.HasFlag( EqdpEntry.Ears1 ), entry.HasFlag( EqdpEntry.Ears2 ) ), - EquipSlot.Neck => ( entry.HasFlag( EqdpEntry.Neck1 ), entry.HasFlag( EqdpEntry.Neck2 ) ), - EquipSlot.Wrists => ( entry.HasFlag( EqdpEntry.Wrists1 ), entry.HasFlag( EqdpEntry.Wrists2 ) ), - EquipSlot.RFinger => ( entry.HasFlag( EqdpEntry.RingR1 ), entry.HasFlag( EqdpEntry.RingR2 ) ), - EquipSlot.LFinger => ( entry.HasFlag( EqdpEntry.RingL1 ), entry.HasFlag( EqdpEntry.RingL2 ) ), - _ => throw new InvalidEnumArgumentException(), - }; - - public static EqdpEntry FromSlotAndBits( EquipSlot slot, bool bit1, bool bit2 ) - { - EqdpEntry ret = 0; - var offset = Offset( slot ); - if( bit1 ) - { - ret |= ( EqdpEntry )( 1 << offset ); - } - - if( bit2 ) - { - ret |= ( EqdpEntry )( 1 << ( offset + 1 ) ); - } - - return ret; - } - - public static EqdpEntry Mask( EquipSlot slot ) - { - return slot switch - { - EquipSlot.Head => EqdpEntry.HeadMask, - EquipSlot.Body => EqdpEntry.BodyMask, - EquipSlot.Hands => EqdpEntry.HandsMask, - EquipSlot.Legs => EqdpEntry.LegsMask, - EquipSlot.Feet => EqdpEntry.FeetMask, - EquipSlot.Ears => EqdpEntry.EarsMask, - EquipSlot.Neck => EqdpEntry.NeckMask, - EquipSlot.Wrists => EqdpEntry.WristsMask, - EquipSlot.RFinger => EqdpEntry.RingRMask, - EquipSlot.LFinger => EqdpEntry.RingLMask, - _ => 0, - }; - } -} \ No newline at end of file diff --git a/Penumbra.GameData/Structs/EqpEntry.cs b/Penumbra.GameData/Structs/EqpEntry.cs deleted file mode 100644 index 49b2f66f..00000000 --- a/Penumbra.GameData/Structs/EqpEntry.cs +++ /dev/null @@ -1,316 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.ComponentModel; -using Penumbra.GameData.Enums; - -namespace Penumbra.GameData.Structs; - -[Flags] -public enum EqpEntry : ulong -{ - BodyEnabled = 0x00_01ul, - BodyHideWaist = 0x00_02ul, - BodyHideThighs = 0x00_04ul, - BodyHideGlovesS = 0x00_08ul, - _4 = 0x00_10ul, - BodyHideGlovesM = 0x00_20ul, - BodyHideGlovesL = 0x00_40ul, - BodyHideGorget = 0x00_80ul, - BodyShowLeg = 0x01_00ul, - BodyShowHand = 0x02_00ul, - BodyShowHead = 0x04_00ul, - BodyShowNecklace = 0x08_00ul, - BodyShowBracelet = 0x10_00ul, - BodyShowTail = 0x20_00ul, - BodyDisableBreastPhysics = 0x40_00ul, - BodyUsesEvpTable = 0x80_00ul, - BodyMask = 0xFF_FFul, - - LegsEnabled = 0x01ul << 16, - LegsHideKneePads = 0x02ul << 16, - LegsHideBootsS = 0x04ul << 16, - LegsHideBootsM = 0x08ul << 16, - _20 = 0x10ul << 16, - LegsShowFoot = 0x20ul << 16, - LegsShowTail = 0x40ul << 16, - _23 = 0x80ul << 16, - LegsMask = 0xFFul << 16, - - HandsEnabled = 0x01ul << 24, - HandsHideElbow = 0x02ul << 24, - HandsHideForearm = 0x04ul << 24, - _27 = 0x08ul << 24, - HandShowBracelet = 0x10ul << 24, - HandShowRingL = 0x20ul << 24, - HandShowRingR = 0x40ul << 24, - _31 = 0x80ul << 24, - HandsMask = 0xFFul << 24, - - FeetEnabled = 0x01ul << 32, - FeetHideKnee = 0x02ul << 32, - FeetHideCalf = 0x04ul << 32, - FeetHideAnkle = 0x08ul << 32, - _36 = 0x10ul << 32, - _37 = 0x20ul << 32, - _38 = 0x40ul << 32, - _39 = 0x80ul << 32, - FeetMask = 0xFFul << 32, - - HeadEnabled = 0x00_00_01ul << 40, - HeadHideScalp = 0x00_00_02ul << 40, - HeadHideHair = 0x00_00_04ul << 40, - HeadShowHairOverride = 0x00_00_08ul << 40, - HeadHideNeck = 0x00_00_10ul << 40, - HeadShowNecklace = 0x00_00_20ul << 40, - _46 = 0x00_00_40ul << 40, - HeadShowEarrings = 0x00_00_80ul << 40, - HeadShowEarringsHuman = 0x00_01_00ul << 40, - HeadShowEarringsAura = 0x00_02_00ul << 40, - HeadShowEarHuman = 0x00_04_00ul << 40, - HeadShowEarMiqote = 0x00_08_00ul << 40, - HeadShowEarAuRa = 0x00_10_00ul << 40, - HeadShowEarViera = 0x00_20_00ul << 40, - _54 = 0x00_40_00ul << 40, - _55 = 0x00_80_00ul << 40, - HeadShowHrothgarHat = 0x01_00_00ul << 40, - HeadShowVieraHat = 0x02_00_00ul << 40, - HeadUsesEvpTable = 0x04_00_00ul << 40, - _59 = 0x08_00_00ul << 40, - _60 = 0x10_00_00ul << 40, - _61 = 0x20_00_00ul << 40, - _62 = 0x40_00_00ul << 40, - _63 = 0x80_00_00ul << 40, - HeadMask = 0xFF_FF_FFul << 40, -} - -public static class Eqp -{ - // cf. Client::Graphics::Scene::CharacterUtility.GetSlotEqpFlags - public const EqpEntry DefaultEntry = (EqpEntry)0x3fe00070603f00; - - public static (int, int) BytesAndOffset(EquipSlot slot) - { - return slot switch - { - EquipSlot.Body => (2, 0), - EquipSlot.Legs => (1, 2), - EquipSlot.Hands => (1, 3), - EquipSlot.Feet => (1, 4), - EquipSlot.Head => (3, 5), - _ => throw new InvalidEnumArgumentException(), - }; - } - - public static EqpEntry ShiftAndMask(this EqpEntry entry, EquipSlot slot) - { - var (_, offset) = BytesAndOffset(slot); - var mask = Mask(slot); - return (EqpEntry)((ulong)(entry & mask) >> (offset * 8)); - } - - public static EqpEntry FromSlotAndBytes(EquipSlot slot, byte[] value) - { - EqpEntry ret = 0; - var (bytes, offset) = BytesAndOffset(slot); - if (bytes != value.Length) - throw new ArgumentException(); - - for (var i = 0; i < bytes; ++i) - ret |= (EqpEntry)((ulong)value[i] << ((offset + i) * 8)); - - return ret; - } - - public static EqpEntry Mask(EquipSlot slot) - { - return slot switch - { - EquipSlot.Body => EqpEntry.BodyMask, - EquipSlot.Head => EqpEntry.HeadMask, - EquipSlot.Legs => EqpEntry.LegsMask, - EquipSlot.Feet => EqpEntry.FeetMask, - EquipSlot.Hands => EqpEntry.HandsMask, - _ => 0, - }; - } - - public static EquipSlot ToEquipSlot(this EqpEntry entry) - { - return entry switch - { - EqpEntry.BodyEnabled => EquipSlot.Body, - EqpEntry.BodyHideWaist => EquipSlot.Body, - EqpEntry.BodyHideThighs => EquipSlot.Body, - EqpEntry.BodyHideGlovesS => EquipSlot.Body, - EqpEntry._4 => EquipSlot.Body, - EqpEntry.BodyHideGlovesM => EquipSlot.Body, - EqpEntry.BodyHideGlovesL => EquipSlot.Body, - EqpEntry.BodyHideGorget => EquipSlot.Body, - EqpEntry.BodyShowLeg => EquipSlot.Body, - EqpEntry.BodyShowHand => EquipSlot.Body, - EqpEntry.BodyShowHead => EquipSlot.Body, - EqpEntry.BodyShowNecklace => EquipSlot.Body, - EqpEntry.BodyShowBracelet => EquipSlot.Body, - EqpEntry.BodyShowTail => EquipSlot.Body, - EqpEntry.BodyDisableBreastPhysics => EquipSlot.Body, - EqpEntry.BodyUsesEvpTable => EquipSlot.Body, - - EqpEntry.LegsEnabled => EquipSlot.Legs, - EqpEntry.LegsHideKneePads => EquipSlot.Legs, - EqpEntry.LegsHideBootsS => EquipSlot.Legs, - EqpEntry.LegsHideBootsM => EquipSlot.Legs, - EqpEntry._20 => EquipSlot.Legs, - EqpEntry.LegsShowFoot => EquipSlot.Legs, - EqpEntry.LegsShowTail => EquipSlot.Legs, - EqpEntry._23 => EquipSlot.Legs, - - EqpEntry.HandsEnabled => EquipSlot.Hands, - EqpEntry.HandsHideElbow => EquipSlot.Hands, - EqpEntry.HandsHideForearm => EquipSlot.Hands, - EqpEntry._27 => EquipSlot.Hands, - EqpEntry.HandShowBracelet => EquipSlot.Hands, - EqpEntry.HandShowRingL => EquipSlot.Hands, - EqpEntry.HandShowRingR => EquipSlot.Hands, - EqpEntry._31 => EquipSlot.Hands, - - EqpEntry.FeetEnabled => EquipSlot.Feet, - EqpEntry.FeetHideKnee => EquipSlot.Feet, - EqpEntry.FeetHideCalf => EquipSlot.Feet, - EqpEntry.FeetHideAnkle => EquipSlot.Feet, - EqpEntry._36 => EquipSlot.Feet, - EqpEntry._37 => EquipSlot.Feet, - EqpEntry._38 => EquipSlot.Feet, - EqpEntry._39 => EquipSlot.Feet, - - EqpEntry.HeadEnabled => EquipSlot.Head, - EqpEntry.HeadHideScalp => EquipSlot.Head, - EqpEntry.HeadHideHair => EquipSlot.Head, - EqpEntry.HeadShowHairOverride => EquipSlot.Head, - EqpEntry.HeadHideNeck => EquipSlot.Head, - EqpEntry.HeadShowNecklace => EquipSlot.Head, - EqpEntry._46 => EquipSlot.Head, - EqpEntry.HeadShowEarrings => EquipSlot.Head, - EqpEntry.HeadShowEarringsHuman => EquipSlot.Head, - EqpEntry.HeadShowEarringsAura => EquipSlot.Head, - EqpEntry.HeadShowEarHuman => EquipSlot.Head, - EqpEntry.HeadShowEarMiqote => EquipSlot.Head, - EqpEntry.HeadShowEarAuRa => EquipSlot.Head, - EqpEntry.HeadShowEarViera => EquipSlot.Head, - EqpEntry._54 => EquipSlot.Head, - EqpEntry._55 => EquipSlot.Head, - EqpEntry.HeadShowHrothgarHat => EquipSlot.Head, - EqpEntry.HeadShowVieraHat => EquipSlot.Head, - EqpEntry.HeadUsesEvpTable => EquipSlot.Head, - - // currently unused - EqpEntry._59 => EquipSlot.Unknown, - EqpEntry._60 => EquipSlot.Unknown, - EqpEntry._61 => EquipSlot.Unknown, - EqpEntry._62 => EquipSlot.Unknown, - EqpEntry._63 => EquipSlot.Unknown, - - _ => EquipSlot.Unknown, - }; - } - - public static string ToLocalName(this EqpEntry entry) - { - return entry switch - { - EqpEntry.BodyEnabled => "Enabled", - EqpEntry.BodyHideWaist => "Hide Waist", - EqpEntry.BodyHideThighs => "Hide Thigh Pads", - EqpEntry.BodyHideGlovesS => "Hide Small Gloves", - EqpEntry._4 => "Unknown 4", - EqpEntry.BodyHideGlovesM => "Hide Medium Gloves", - EqpEntry.BodyHideGlovesL => "Hide Large Gloves", - EqpEntry.BodyHideGorget => "Hide Gorget", - EqpEntry.BodyShowLeg => "Show Legs", - EqpEntry.BodyShowHand => "Show Hands", - EqpEntry.BodyShowHead => "Show Head", - EqpEntry.BodyShowNecklace => "Show Necklace", - EqpEntry.BodyShowBracelet => "Show Bracelet", - EqpEntry.BodyShowTail => "Show Tail", - EqpEntry.BodyDisableBreastPhysics => "Disable Breast Physics", - EqpEntry.BodyUsesEvpTable => "Uses EVP Table", - - EqpEntry.LegsEnabled => "Enabled", - EqpEntry.LegsHideKneePads => "Hide Knee Pads", - EqpEntry.LegsHideBootsS => "Hide Small Boots", - EqpEntry.LegsHideBootsM => "Hide Medium Boots", - EqpEntry._20 => "Unknown 20", - EqpEntry.LegsShowFoot => "Show Foot", - EqpEntry.LegsShowTail => "Show Tail", - EqpEntry._23 => "Unknown 23", - - EqpEntry.HandsEnabled => "Enabled", - EqpEntry.HandsHideElbow => "Hide Elbow", - EqpEntry.HandsHideForearm => "Hide Forearm", - EqpEntry._27 => "Unknown 27", - EqpEntry.HandShowBracelet => "Show Bracelet", - EqpEntry.HandShowRingL => "Show Left Ring", - EqpEntry.HandShowRingR => "Show Right Ring", - EqpEntry._31 => "Unknown 31", - - EqpEntry.FeetEnabled => "Enabled", - EqpEntry.FeetHideKnee => "Hide Knees", - EqpEntry.FeetHideCalf => "Hide Calves", - EqpEntry.FeetHideAnkle => "Hide Ankles", - EqpEntry._36 => "Unknown 36", - EqpEntry._37 => "Unknown 37", - EqpEntry._38 => "Unknown 38", - EqpEntry._39 => "Unknown 39", - - EqpEntry.HeadEnabled => "Enabled", - EqpEntry.HeadHideScalp => "Hide Scalp", - EqpEntry.HeadHideHair => "Hide Hair", - EqpEntry.HeadShowHairOverride => "Show Hair Override", - EqpEntry.HeadHideNeck => "Hide Neck", - EqpEntry.HeadShowNecklace => "Show Necklace", - EqpEntry._46 => "Unknown 46", - EqpEntry.HeadShowEarrings => "Show Earrings", - EqpEntry.HeadShowEarringsHuman => "Show Earrings (Human)", - EqpEntry.HeadShowEarringsAura => "Show Earrings (Au Ra)", - EqpEntry.HeadShowEarHuman => "Show Ears (Human)", - EqpEntry.HeadShowEarMiqote => "Show Ears (Miqo'te)", - EqpEntry.HeadShowEarAuRa => "Show Ears (Au Ra)", - EqpEntry.HeadShowEarViera => "Show Ears (Viera)", - EqpEntry._54 => "Unknown 54", - EqpEntry._55 => "Unknown 55", - EqpEntry.HeadShowHrothgarHat => "Show on Hrothgar", - EqpEntry.HeadShowVieraHat => "Show on Viera", - EqpEntry.HeadUsesEvpTable => "Uses EVP Table", - - EqpEntry._59 => "Unknown 59", - EqpEntry._60 => "Unknown 60", - EqpEntry._61 => "Unknown 61", - EqpEntry._62 => "Unknown 62", - EqpEntry._63 => "Unknown 63", - - _ => throw new InvalidEnumArgumentException(), - }; - } - - private static EqpEntry[] GetEntriesForSlot(EquipSlot slot) - { - return ((EqpEntry[])Enum.GetValues(typeof(EqpEntry))) - .Where(e => e.ToEquipSlot() == slot) - .ToArray(); - } - - public static readonly EqpEntry[] EqpAttributesBody = GetEntriesForSlot(EquipSlot.Body); - public static readonly EqpEntry[] EqpAttributesLegs = GetEntriesForSlot(EquipSlot.Legs); - public static readonly EqpEntry[] EqpAttributesHands = GetEntriesForSlot(EquipSlot.Hands); - public static readonly EqpEntry[] EqpAttributesFeet = GetEntriesForSlot(EquipSlot.Feet); - public static readonly EqpEntry[] EqpAttributesHead = GetEntriesForSlot(EquipSlot.Head); - - public static readonly IReadOnlyDictionary EqpAttributes = new Dictionary() - { - [EquipSlot.Body] = EqpAttributesBody, - [EquipSlot.Legs] = EqpAttributesLegs, - [EquipSlot.Hands] = EqpAttributesHands, - [EquipSlot.Feet] = EqpAttributesFeet, - [EquipSlot.Head] = EqpAttributesHead, - }; -} diff --git a/Penumbra.GameData/Structs/EquipItem.cs b/Penumbra.GameData/Structs/EquipItem.cs deleted file mode 100644 index 59ea94b4..00000000 --- a/Penumbra.GameData/Structs/EquipItem.cs +++ /dev/null @@ -1,120 +0,0 @@ -using System.Runtime.InteropServices; -using Dalamud.Utility; -using Lumina.Excel.GeneratedSheets; -using Penumbra.GameData.Enums; -using PseudoEquipItem = System.ValueTuple; - -namespace Penumbra.GameData.Structs; - -[StructLayout(LayoutKind.Sequential)] -public readonly struct EquipItem -{ - public readonly string Name; - public readonly ulong Id; - public readonly ushort IconId; - public readonly SetId ModelId; - public readonly WeaponType WeaponType; - public readonly byte Variant; - public readonly FullEquipType Type; - - public uint ItemId - => (uint)Id; - - public bool Valid - => Type != FullEquipType.Unknown; - - public CharacterArmor Armor() - => new(ModelId, Variant, 0); - - public CharacterArmor Armor(StainId stain) - => new(ModelId, Variant, stain); - - public CharacterWeapon Weapon() - => new(ModelId, WeaponType, Variant, 0); - - public CharacterWeapon Weapon(StainId stain) - => new(ModelId, WeaponType, Variant, stain); - - public EquipItem() - => Name = string.Empty; - - public EquipItem(string name, ulong id, ushort iconId, SetId modelId, WeaponType weaponType, byte variant, FullEquipType type) - { - Name = string.Intern(name); - Id = id; - IconId = iconId; - ModelId = modelId; - WeaponType = weaponType; - Variant = variant; - Type = type; - } - - public string ModelString - => WeaponType == 0 ? $"{ModelId.Value}-{Variant}" : $"{ModelId.Value}-{WeaponType.Value}-{Variant}"; - - public static implicit operator EquipItem(PseudoEquipItem it) - => new(it.Item1, it.Item2, it.Item3, it.Item4, it.Item5, it.Item6, (FullEquipType)it.Item7); - - public static explicit operator PseudoEquipItem(EquipItem it) - => (it.Name, it.ItemId, it.IconId, (ushort)it.ModelId, (ushort)it.WeaponType, it.Variant, (byte)it.Type); - - public static EquipItem FromArmor(Item item) - { - var type = item.ToEquipType(); - var name = item.Name.ToDalamudString().TextValue; - var id = item.RowId; - var icon = item.Icon; - var model = (SetId)item.ModelMain; - var weapon = (WeaponType)0; - var variant = (byte)(item.ModelMain >> 16); - return new EquipItem(name, id, icon, model, weapon, variant, type); - } - - public static EquipItem FromMainhand(Item item) - { - var type = item.ToEquipType(); - var name = item.Name.ToDalamudString().TextValue; - var id = item.RowId; - var icon = item.Icon; - var model = (SetId)item.ModelMain; - var weapon = (WeaponType)(item.ModelMain >> 16); - var variant = (byte)(item.ModelMain >> 32); - return new EquipItem(name, id, icon, model, weapon, variant, type); - } - - public static EquipItem FromOffhand(Item item) - { - var type = item.ToEquipType().ValidOffhand(); - var name = item.Name.ToDalamudString().TextValue + type.OffhandTypeSuffix(); - var id = item.RowId; - var icon = item.Icon; - var model = (SetId)item.ModelSub; - var weapon = (WeaponType)(item.ModelSub >> 16); - var variant = (byte)(item.ModelSub >> 32); - return new EquipItem(name, id, icon, model, weapon, variant, type); - } - - public static EquipItem FromIds(uint itemId, ushort iconId, SetId modelId, WeaponType type, byte variant, - FullEquipType equipType = FullEquipType.Unknown, string? name = null) - { - name ??= $"Unknown ({modelId.Value}-{(type.Value != 0 ? $"{type.Value}-" : string.Empty)}{variant})"; - var fullId = itemId == 0 - ? modelId.Value | ((ulong)type.Value << 16) | ((ulong)variant << 32) | ((ulong)equipType << 40) | (1ul << 48) - : itemId; - return new EquipItem(name, fullId, iconId, modelId, type, variant, equipType); - } - - - public static EquipItem FromId(ulong id) - { - var setId = (SetId)id; - var type = (WeaponType)(id >> 16); - var variant = (byte)(id >> 32); - var equipType = (FullEquipType)(id >> 40); - return new EquipItem($"Unknown ({setId.Value}-{(type.Value != 0 ? $"{type.Value}-" : string.Empty)}{variant})", id, 0, setId, type, - variant, equipType); - } - - public override string ToString() - => Name; -} diff --git a/Penumbra.GameData/Structs/GameObjectInfo.cs b/Penumbra.GameData/Structs/GameObjectInfo.cs deleted file mode 100644 index fae17494..00000000 --- a/Penumbra.GameData/Structs/GameObjectInfo.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using Dalamud; -using Penumbra.GameData.Enums; - -namespace Penumbra.GameData.Structs; - -[StructLayout( LayoutKind.Explicit )] -public struct GameObjectInfo : IComparable -{ - public static GameObjectInfo Equipment( FileType type, ushort setId, GenderRace gr = GenderRace.Unknown - , EquipSlot slot = EquipSlot.Unknown, byte variant = 0 ) - => new() - { - FileType = type, - ObjectType = slot.IsAccessory() ? ObjectType.Accessory : ObjectType.Equipment, - PrimaryId = setId, - GenderRace = gr, - Variant = variant, - EquipSlot = slot, - }; - - public static GameObjectInfo Weapon( FileType type, ushort setId, ushort weaponId, byte variant = 0 ) - => new() - { - FileType = type, - ObjectType = ObjectType.Weapon, - PrimaryId = setId, - SecondaryId = weaponId, - Variant = variant, - }; - - public static GameObjectInfo Customization( FileType type, CustomizationType customizationType, ushort id = 0 - , GenderRace gr = GenderRace.Unknown, BodySlot bodySlot = BodySlot.Unknown, byte variant = 0 ) - => new() - { - FileType = type, - ObjectType = ObjectType.Character, - PrimaryId = id, - GenderRace = gr, - BodySlot = bodySlot, - Variant = variant, - CustomizationType = customizationType, - }; - - public static GameObjectInfo Monster( FileType type, ushort monsterId, ushort bodyId, byte variant = 0 ) - => new() - { - FileType = type, - ObjectType = ObjectType.Monster, - PrimaryId = monsterId, - SecondaryId = bodyId, - Variant = variant, - }; - - public static GameObjectInfo DemiHuman( FileType type, ushort demiHumanId, ushort bodyId, EquipSlot slot = EquipSlot.Unknown, - byte variant = 0 - ) - => new() - { - FileType = type, - ObjectType = ObjectType.DemiHuman, - PrimaryId = demiHumanId, - SecondaryId = bodyId, - Variant = variant, - EquipSlot = slot, - }; - - public static GameObjectInfo Map( FileType type, byte c1, byte c2, byte c3, byte c4, byte variant, byte suffix = 0 ) - => new() - { - FileType = type, - ObjectType = ObjectType.Map, - MapC1 = c1, - MapC2 = c2, - MapC3 = c3, - MapC4 = c4, - MapSuffix = suffix, - Variant = variant, - }; - - public static GameObjectInfo Icon( FileType type, uint iconId, bool hq, bool hr, ClientLanguage lang = ClientLanguage.English ) - => new() - { - FileType = type, - ObjectType = ObjectType.Icon, - IconId = iconId, - IconHqHr = ( byte )( hq ? hr ? 3 : 1 : hr ? 2 : 0 ), - Language = lang, - }; - - - [FieldOffset( 0 )] - public readonly ulong Identifier; - - [FieldOffset( 0 )] - public FileType FileType; - - [FieldOffset( 1 )] - public ObjectType ObjectType; - - - [FieldOffset( 2 )] - public ushort PrimaryId; // Equipment, Weapon, Customization, Monster, DemiHuman - - [FieldOffset( 2 )] - public uint IconId; // Icon - - [FieldOffset( 2 )] - public byte MapC1; // Map - - [FieldOffset( 3 )] - public byte MapC2; // Map - - [FieldOffset( 4 )] - public ushort SecondaryId; // Weapon, Monster, Demihuman - - [FieldOffset( 4 )] - public byte MapC3; // Map - - [FieldOffset( 4 )] - private byte _genderRaceByte; // Equipment, Customization - - public GenderRace GenderRace - { - get => Names.GenderRaceFromByte( _genderRaceByte ); - set => _genderRaceByte = value.ToByte(); - } - - [FieldOffset( 5 )] - public BodySlot BodySlot; // Customization - - [FieldOffset( 5 )] - public byte MapC4; // Map - - [FieldOffset( 6 )] - public byte Variant; // Equipment, Weapon, Customization, Map, Monster, Demihuman - - [FieldOffset( 6 )] - public byte IconHqHr; // Icon - - [FieldOffset( 7 )] - public EquipSlot EquipSlot; // Equipment, Demihuman - - [FieldOffset( 7 )] - public CustomizationType CustomizationType; // Customization - - [FieldOffset( 7 )] - public ClientLanguage Language; // Icon - - [FieldOffset( 7 )] - public byte MapSuffix; - - public override int GetHashCode() - => Identifier.GetHashCode(); - - public int CompareTo( object? r ) - => Identifier.CompareTo( r ); -} \ No newline at end of file diff --git a/Penumbra.GameData/Structs/GmpEntry.cs b/Penumbra.GameData/Structs/GmpEntry.cs deleted file mode 100644 index 8ad571ed..00000000 --- a/Penumbra.GameData/Structs/GmpEntry.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using System.IO; - -namespace Penumbra.GameData.Structs; - -public struct GmpEntry : IEquatable< GmpEntry > -{ - public static readonly GmpEntry Default = new(); - - public bool Enabled - { - get => ( Value & 1 ) == 1; - set - { - if( value ) - { - Value |= 1ul; - } - else - { - Value &= ~1ul; - } - } - } - - public bool Animated - { - get => ( Value & 2 ) == 2; - set - { - if( value ) - { - Value |= 2ul; - } - else - { - Value &= ~2ul; - } - } - } - - public ushort RotationA - { - get => ( ushort )( ( Value >> 2 ) & 0x3FF ); - set => Value = ( Value & ~0xFFCul ) | ( ( value & 0x3FFul ) << 2 ); - } - - public ushort RotationB - { - get => ( ushort )( ( Value >> 12 ) & 0x3FF ); - set => Value = ( Value & ~0x3FF000ul ) | ( ( value & 0x3FFul ) << 12 ); - } - - public ushort RotationC - { - get => ( ushort )( ( Value >> 22 ) & 0x3FF ); - set => Value = ( Value & ~0xFFC00000ul ) | ( ( value & 0x3FFul ) << 22 ); - } - - public byte UnknownA - { - get => ( byte )( ( Value >> 32 ) & 0x0F ); - set => Value = ( Value & ~0x0F00000000ul ) | ( ( value & 0x0Ful ) << 32 ); - } - - public byte UnknownB - { - get => ( byte )( ( Value >> 36 ) & 0x0F ); - set => Value = ( Value & ~0xF000000000ul ) | ( ( value & 0x0Ful ) << 36 ); - } - - public byte UnknownTotal - { - get => ( byte )( ( Value >> 32 ) & 0xFF ); - set => Value = ( Value & ~0xFF00000000ul ) | ( ( value & 0xFFul ) << 32 ); - } - - public ulong Value { get; set; } - - public static GmpEntry FromTexToolsMeta( byte[] data ) - { - GmpEntry ret = new(); - using var reader = new BinaryReader( new MemoryStream( data ) ); - ret.Value = reader.ReadUInt32(); - ret.UnknownTotal = data[ 4 ]; - return ret; - } - - public static implicit operator ulong( GmpEntry entry ) - => entry.Value; - - public static explicit operator GmpEntry( ulong entry ) - => new() { Value = entry }; - - public bool Equals( GmpEntry other ) - => Value == other.Value; - - public override bool Equals( object? obj ) - => obj is GmpEntry other && Equals( other ); - - public override int GetHashCode() - => Value.GetHashCode(); -} \ No newline at end of file diff --git a/Penumbra.GameData/Structs/ImcEntry.cs b/Penumbra.GameData/Structs/ImcEntry.cs deleted file mode 100644 index 9cabe54f..00000000 --- a/Penumbra.GameData/Structs/ImcEntry.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using Newtonsoft.Json; - -namespace Penumbra.GameData.Structs; - -public readonly struct ImcEntry : IEquatable -{ - public byte MaterialId { get; init; } - public byte DecalId { get; init; } - public readonly ushort AttributeAndSound; - public byte VfxId { get; init; } - public byte MaterialAnimationId { get; init; } - - public ushort AttributeMask - { - get => (ushort)(AttributeAndSound & 0x3FF); - init => AttributeAndSound = (ushort)((AttributeAndSound & ~0x3FF) | (value & 0x3FF)); - } - - public byte SoundId - { - get => (byte)(AttributeAndSound >> 10); - init => AttributeAndSound = (ushort)(AttributeMask | (value << 10)); - } - - public bool Equals(ImcEntry other) - => MaterialId == other.MaterialId - && DecalId == other.DecalId - && AttributeAndSound == other.AttributeAndSound - && VfxId == other.VfxId - && MaterialAnimationId == other.MaterialAnimationId; - - public override bool Equals(object? obj) - => obj is ImcEntry other && Equals(other); - - public override int GetHashCode() - => HashCode.Combine(MaterialId, DecalId, AttributeAndSound, VfxId, MaterialAnimationId); - - [JsonConstructor] - public ImcEntry(byte materialId, byte decalId, ushort attributeMask, byte soundId, byte vfxId, byte materialAnimationId) - { - MaterialId = materialId; - DecalId = decalId; - AttributeAndSound = 0; - VfxId = vfxId; - MaterialAnimationId = materialAnimationId; - AttributeMask = attributeMask; - SoundId = soundId; - } -} diff --git a/Penumbra.GameData/Structs/RspEntry.cs b/Penumbra.GameData/Structs/RspEntry.cs deleted file mode 100644 index 98f85da3..00000000 --- a/Penumbra.GameData/Structs/RspEntry.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.ComponentModel; -using System.IO; -using System.Runtime.InteropServices; -using Penumbra.GameData.Enums; - -namespace Penumbra.GameData.Structs; - -[StructLayout( LayoutKind.Sequential, Pack = 1 )] -public readonly struct RspEntry -{ - public const int ByteSize = ( int )RspAttribute.NumAttributes * 4; - - private readonly float[] Attributes; - - public RspEntry( RspEntry copy ) - => Attributes = ( float[] )copy.Attributes.Clone(); - - public RspEntry( byte[] bytes, int offset ) - { - if( offset < 0 || offset + ByteSize > bytes.Length ) - { - throw new ArgumentOutOfRangeException(); - } - - Attributes = new float[( int )RspAttribute.NumAttributes]; - using MemoryStream s = new(bytes) { Position = offset }; - using BinaryReader br = new(s); - for( var i = 0; i < ( int )RspAttribute.NumAttributes; ++i ) - { - Attributes[ i ] = br.ReadSingle(); - } - } - - private static int ToIndex( RspAttribute attribute ) - => attribute < RspAttribute.NumAttributes && attribute >= 0 - ? ( int )attribute - : throw new InvalidEnumArgumentException(); - - public float this[ RspAttribute attribute ] - { - get => Attributes[ ToIndex( attribute ) ]; - set => Attributes[ ToIndex( attribute ) ] = value; - } - - public byte[] ToBytes() - { - using var s = new MemoryStream( ByteSize ); - using var bw = new BinaryWriter( s ); - foreach( var attribute in Attributes ) - { - bw.Write( attribute ); - } - - return s.ToArray(); - } -} \ No newline at end of file diff --git a/Penumbra.GameData/Structs/SetId.cs b/Penumbra.GameData/Structs/SetId.cs deleted file mode 100644 index 5de82c68..00000000 --- a/Penumbra.GameData/Structs/SetId.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; - -namespace Penumbra.GameData.Structs; - -public readonly struct SetId : IComparable< SetId >, IEquatable, IEquatable -{ - public readonly ushort Value; - - public SetId( ushort value ) - => Value = value; - - public static implicit operator SetId( ushort id ) - => new(id); - - public static explicit operator ushort( SetId id ) - => id.Value; - - public bool Equals(SetId other) - => Value == other.Value; - - public bool Equals(ushort other) - => Value == other; - - public override string ToString() - => Value.ToString(); - - public int CompareTo( SetId other ) - => Value.CompareTo( other.Value ); -} \ No newline at end of file diff --git a/Penumbra.GameData/Structs/Stain.cs b/Penumbra.GameData/Structs/Stain.cs deleted file mode 100644 index 3b0323d3..00000000 --- a/Penumbra.GameData/Structs/Stain.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Dalamud.Utility; - -namespace Penumbra.GameData.Structs; - -// A wrapper for the clothing dyes the game provides with their RGBA color value, game ID, unmodified color value and name. -public readonly struct Stain -{ - // An empty stain with transparent color. - public static readonly Stain None = new("None"); - - public readonly string Name; - public readonly uint RgbaColor; - public readonly byte RowIndex; - public readonly bool Gloss; - - public byte R - => (byte)(RgbaColor & 0xFF); - - public byte G - => (byte)((RgbaColor >> 8) & 0xFF); - - public byte B - => (byte)((RgbaColor >> 16) & 0xFF); - - public byte Intensity - => (byte)((1 + R + G + B) / 3); - - // R and B need to be shuffled and Alpha set to max. - private static uint SeColorToRgba(uint color) - => ((color & 0xFF) << 16) | ((color >> 16) & 0xFF) | (color & 0xFF00) | 0xFF000000; - - public Stain(Lumina.Excel.GeneratedSheets.Stain stain) - : this(stain.Name.ToDalamudString().ToString(), SeColorToRgba(stain.Color), (byte)stain.RowId, stain.Unknown5) - { } - - internal Stain(string name, uint dye, byte index, bool gloss) - { - Name = name; - RowIndex = index; - Gloss = gloss; - RgbaColor = dye; - } - - // Only used by None. - private Stain(string name) - { - Name = name; - RowIndex = 0; - RgbaColor = 0; - Gloss = false; - } -} diff --git a/Penumbra.GameData/Structs/StainId.cs b/Penumbra.GameData/Structs/StainId.cs deleted file mode 100644 index 6767a052..00000000 --- a/Penumbra.GameData/Structs/StainId.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Numerics; - -namespace Penumbra.GameData.Structs; - -public readonly struct StainId : IEquatable< StainId >, IEqualityOperators -{ - public readonly byte Value; - - public StainId( byte value ) - => Value = value; - - public static implicit operator StainId( byte id ) - => new(id); - - public static explicit operator byte( StainId id ) - => id.Value; - - public override string ToString() - => Value.ToString(); - - public bool Equals( StainId other ) - => Value == other.Value; - - public override bool Equals( object? obj ) - => obj is StainId other && Equals( other ); - - public override int GetHashCode() - => Value.GetHashCode(); - - public static bool operator ==(StainId left, StainId right) - => left.Value == right.Value; - - public static bool operator !=(StainId left, StainId right) - => left.Value != right.Value; -} \ No newline at end of file diff --git a/Penumbra.GameData/Structs/WeaponType.cs b/Penumbra.GameData/Structs/WeaponType.cs deleted file mode 100644 index ea310bd7..00000000 --- a/Penumbra.GameData/Structs/WeaponType.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; - -namespace Penumbra.GameData.Structs; - -public readonly struct WeaponType : IEquatable< WeaponType > -{ - public readonly ushort Value; - - public WeaponType( ushort value ) - => Value = value; - - public static implicit operator WeaponType( ushort id ) - => new(id); - - public static explicit operator ushort( WeaponType id ) - => id.Value; - - public override string ToString() - => Value.ToString(); - - public bool Equals( WeaponType other ) - => Value == other.Value; - - public override bool Equals( object? obj ) - => obj is WeaponType other && Equals( other ); - - public override int GetHashCode() - => Value.GetHashCode(); - - public static bool operator ==( WeaponType lhs, WeaponType rhs ) - => lhs.Value == rhs.Value; - - public static bool operator !=( WeaponType lhs, WeaponType rhs ) - => lhs.Value != rhs.Value; -} \ No newline at end of file diff --git a/Penumbra.GameData/UtilityFunctions.cs b/Penumbra.GameData/UtilityFunctions.cs deleted file mode 100644 index 704d7a0c..00000000 --- a/Penumbra.GameData/UtilityFunctions.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; - -namespace Penumbra.GameData; - -public static class UtilityFunctions -{ - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public static T? FirstOrNull(this IEnumerable values, Func predicate) where T : struct - => values.Cast().FirstOrDefault(v => predicate(v!.Value)); - - - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public static T[] AddItem(this T[] array, T element, int count = 1) - { - var length = array.Length; - var newArray = new T[array.Length + count]; - Array.Copy(array, newArray, length); - for (var i = length; i < newArray.Length; ++i) - newArray[i] = element; - - return newArray; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public static T[] RemoveItems(this T[] array, int offset, int count = 1) - { - var newArray = new T[array.Length - count]; - Array.Copy(array, newArray, offset); - Array.Copy(array, offset + count, newArray, offset, newArray.Length - offset); - return newArray; - } -}