diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d26a294 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,464 @@ +########################################## +# Common Settings +########################################## + +# This file is the top-most EditorConfig file +root = true + +# All Files +[*] +charset = utf-8 +end_of_line = crlf +tab_width = 4 +indent_style = space +indent_size = 4 +insert_final_newline = false +trim_trailing_whitespace = true + +########################################## +# File Extension Settings +########################################## + +# Visual Studio Solution Files +[*.sln] +indent_style = tab + +# Visual Studio XML Project Files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj,slnf,props,targets}] +indent_size = 2 + +# Various XML Configuration Files +[*.{xml,config,props,targets,nuspec,resx,ruleset,vsixmanifest,vsct}] +indent_size = 2 + +# JSON Files +[*.{json,json5}] +indent_size = 2 + +# YAML Files +[*.{yml,yaml}] +indent_size = 2 + +# Markdown Files +[*.md] +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = false + +# Web Files +[*.{htm,html,js,ts,tsx,css,sass,scss,less,svg,vue}] +indent_size = 2 +insert_final_newline = true + +# Batch Files +[*.{cmd,bat}] + +# Bash Files +[*.sh] +end_of_line = lf + +########################################## +# .NET Language Conventions +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#language-conventions +########################################## + +# .NET Code Style Settings +[*.cs] +# "this." and "Me." qualifiers +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#this_and_me +dotnet_style_qualification_for_field = true:silent +dotnet_style_qualification_for_property = true:silent +dotnet_style_qualification_for_method = true:silent +dotnet_style_qualification_for_event = true:silent + +# Language keywords instead of framework type names for type references +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#language_keywords +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_predefined_type_for_member_access = true:silent + +# Modifier preferences +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#normalize_modifiers +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async +dotnet_style_readonly_field = true:warning + +# Parentheses preferences +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#parentheses +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent + +# Expression-level preferences +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#expression_level +dotnet_style_object_initializer = true:warning +dotnet_style_collection_initializer = true:warning +dotnet_style_explicit_tuple_names = true:warning +dotnet_style_prefer_inferred_tuple_names = true:warning +dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent + +# Null-checking preferences +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#null_checking +dotnet_style_coalesce_expression = true:warning +dotnet_style_null_propagation = true:warning + +# Implicit and explicit types +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#implicit-and-explicit-types +csharp_style_var_for_built_in_types = true:silent +csharp_style_var_when_type_is_apparent = true:silent +csharp_style_var_elsewhere = true:silent + +# Expression-bodied members +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#expression_bodied_members +csharp_style_expression_bodied_methods = false:warning +csharp_style_expression_bodied_constructors = false:warning +csharp_style_expression_bodied_operators = false:warning +csharp_style_expression_bodied_properties = true:warning +csharp_style_expression_bodied_indexers = true:warning +csharp_style_expression_bodied_accessors = true:warning +csharp_style_expression_bodied_lambdas = true:warning + +# Pattern matching +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#pattern_matching +csharp_style_pattern_matching_over_is_with_cast_check = true:warning +csharp_style_pattern_matching_over_as_with_null_check = true:warning + +# Inlined variable declarations +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#inlined_variable_declarations +csharp_style_inlined_variable_declaration = true:suggestion + +# Expression-level preferences +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#expression_level_csharp +csharp_prefer_simple_default_expression = true:warning +csharp_style_deconstructed_variable_declaration = true:warning +csharp_style_pattern_local_over_anonymous_function = true:warning + +# "Null" checking preferences +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#null_checking_csharp +csharp_style_throw_expression = true:warning +csharp_style_conditional_delegate_call = true:warning + +# Code block preferences +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#code_block +csharp_prefer_braces = true:warning + +########################################## +# .NET Formatting Conventions +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#formatting-conventions +########################################## + +# Organize usings +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#usings +dotnet_sort_system_directives_first = true + +# Using statement placement (Undocumented) +csharp_using_directive_placement = inside_namespace:warning + +# C# formatting settings +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#c-formatting-settings +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation options +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#indent +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = no_change + +# Spacing options +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#spacing +csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false + +# Wrapping options +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference#wrapping +csharp_preserve_single_line_statements = true +csharp_preserve_single_line_blocks = true + +# More Indentation options (Undocumented) +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents_when_block = false + +# Spacing Options (Undocumented) +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_declaration_statements = false +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_before_open_square_brackets = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_square_brackets = false + +########################################## +# .NET Naming Conventions +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-naming-conventions +########################################## + +########################################## +# Styles +########################################## + +dotnet_naming_style.camel_case_style.capitalization = camel_case +dotnet_naming_style.pascal_case_style.capitalization = pascal_case +dotnet_naming_style.first_upper_style.capitalization = first_word_upper +dotnet_naming_style.prefix_interface_with_i_style.capitalization = pascal_case +dotnet_naming_style.prefix_interface_with_i_style.required_prefix = I +dotnet_naming_style.prefix_type_parameters_with_t_style.capitalization = pascal_case +dotnet_naming_style.prefix_type_parameters_with_t_style.required_prefix = T + +########################################## +# .NET Design Guideline Field Naming Rules +# Naming rules for fields follow the .NET Framework design guidelines +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/index +########################################## + +# All public/protected/protected_internal constant fields must be PascalCase +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/field +dotnet_naming_symbols.public_protected_constant_fields_group.applicable_accessibilities = public, protected, protected_internal +dotnet_naming_symbols.public_protected_constant_fields_group.required_modifiers = const +dotnet_naming_symbols.public_protected_constant_fields_group.applicable_kinds = field +dotnet_naming_rule.public_protected_constant_fields_must_be_pascal_case_rule.symbols = public_protected_constant_fields_group +dotnet_naming_rule.public_protected_constant_fields_must_be_pascal_case_rule.style = pascal_case_style +dotnet_naming_rule.public_protected_constant_fields_must_be_pascal_case_rule.severity = warning + +# All public/protected/protected_internal static readonly fields must be PascalCase +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/field +dotnet_naming_symbols.public_protected_static_readonly_fields_group.applicable_accessibilities = public, protected, protected_internal +dotnet_naming_symbols.public_protected_static_readonly_fields_group.required_modifiers = static, readonly +dotnet_naming_symbols.public_protected_static_readonly_fields_group.applicable_kinds = field +dotnet_naming_rule.public_protected_static_readonly_fields_must_be_pascal_case_rule.symbols = public_protected_static_readonly_fields_group +dotnet_naming_rule.public_protected_static_readonly_fields_must_be_pascal_case_rule.style = pascal_case_style +dotnet_naming_rule.public_protected_static_readonly_fields_must_be_pascal_case_rule.severity = warning + +# No other public/protected/protected_internal fields are allowed +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/field +dotnet_naming_symbols.other_public_protected_fields_group.applicable_accessibilities = public, protected, protected_internal +dotnet_naming_symbols.other_public_protected_fields_group.applicable_kinds = field +dotnet_naming_rule.other_public_protected_fields_disallowed_rule.symbols = other_public_protected_fields_group +dotnet_naming_rule.other_public_protected_fields_disallowed_rule.style = disallowed_style +dotnet_naming_rule.other_public_protected_fields_disallowed_rule.severity = error + +########################################## +# StyleCop Field Naming Rules +# Naming rules for fields follow the StyleCop analyzers +# This does not override any rules using disallowed_style above +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers +########################################## + +# All constant fields must be PascalCase +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1303.md +dotnet_naming_symbols.stylecop_constant_fields_group.applicable_accessibilities = public, internal, protected_internal, protected, private_protected, private +dotnet_naming_symbols.stylecop_constant_fields_group.required_modifiers = const +dotnet_naming_symbols.stylecop_constant_fields_group.applicable_kinds = field +dotnet_naming_rule.stylecop_constant_fields_must_be_pascal_case_rule.symbols = stylecop_constant_fields_group +dotnet_naming_rule.stylecop_constant_fields_must_be_pascal_case_rule.style = pascal_case_style +dotnet_naming_rule.stylecop_constant_fields_must_be_pascal_case_rule.severity = warning + +# All static readonly fields must be PascalCase +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1311.md +dotnet_naming_symbols.stylecop_static_readonly_fields_group.applicable_accessibilities = public, internal, protected_internal, protected, private_protected, private +dotnet_naming_symbols.stylecop_static_readonly_fields_group.required_modifiers = static, readonly +dotnet_naming_symbols.stylecop_static_readonly_fields_group.applicable_kinds = field +dotnet_naming_rule.stylecop_static_readonly_fields_must_be_pascal_case_rule.symbols = stylecop_static_readonly_fields_group +dotnet_naming_rule.stylecop_static_readonly_fields_must_be_pascal_case_rule.style = pascal_case_style +dotnet_naming_rule.stylecop_static_readonly_fields_must_be_pascal_case_rule.severity = warning + +# No non-private instance fields are allowed +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1401.md +dotnet_naming_symbols.stylecop_fields_must_be_private_group.applicable_accessibilities = public, internal, protected_internal, protected, private_protected +dotnet_naming_symbols.stylecop_fields_must_be_private_group.applicable_kinds = field +dotnet_naming_rule.stylecop_instance_fields_must_be_private_rule.symbols = stylecop_fields_must_be_private_group +dotnet_naming_rule.stylecop_instance_fields_must_be_private_rule.style = disallowed_style +dotnet_naming_rule.stylecop_instance_fields_must_be_private_rule.severity = error + +# Private fields must be camelCase +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1306.md +dotnet_naming_symbols.stylecop_private_fields_group.applicable_accessibilities = private +dotnet_naming_symbols.stylecop_private_fields_group.applicable_kinds = field +dotnet_naming_rule.stylecop_private_fields_must_be_camel_case_rule.symbols = stylecop_private_fields_group +dotnet_naming_rule.stylecop_private_fields_must_be_camel_case_rule.style = camel_case_style +dotnet_naming_rule.stylecop_private_fields_must_be_camel_case_rule.severity = warning + +# Local variables must be camelCase +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1312.md +dotnet_naming_symbols.stylecop_local_fields_group.applicable_accessibilities = local +dotnet_naming_symbols.stylecop_local_fields_group.applicable_kinds = local +dotnet_naming_rule.stylecop_local_fields_must_be_camel_case_rule.symbols = stylecop_local_fields_group +dotnet_naming_rule.stylecop_local_fields_must_be_camel_case_rule.style = camel_case_style +dotnet_naming_rule.stylecop_local_fields_must_be_camel_case_rule.severity = silent + +# This rule should never fire. However, it's included for at least two purposes: +# First, it helps to understand, reason about, and root-case certain types of issues, such as bugs in .editorconfig parsers. +# Second, it helps to raise immediate awareness if a new field type is added (as occurred recently in C#). +dotnet_naming_symbols.sanity_check_uncovered_field_case_group.applicable_accessibilities = * +dotnet_naming_symbols.sanity_check_uncovered_field_case_group.applicable_kinds = field +dotnet_naming_rule.sanity_check_uncovered_field_case_rule.symbols = sanity_check_uncovered_field_case_group +dotnet_naming_rule.sanity_check_uncovered_field_case_rule.style = internal_error_style +dotnet_naming_rule.sanity_check_uncovered_field_case_rule.severity = error + +########################################## +# Other Naming Rules +########################################## + +# All of the following must be PascalCase: +# - Namespaces +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-namespaces +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1300.md +# - Classes and Enumerations +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1300.md +# - Delegates +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces#names-of-common-types +# - Constructors, Properties, Events, Methods +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members +dotnet_naming_symbols.element_group.applicable_kinds = namespace, class, enum, struct, delegate, event, method, property +dotnet_naming_rule.element_rule.symbols = element_group +dotnet_naming_rule.element_rule.style = pascal_case_style +dotnet_naming_rule.element_rule.severity = warning + +# Interfaces use PascalCase and are prefixed with uppercase 'I' +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces +dotnet_naming_symbols.interface_group.applicable_kinds = interface +dotnet_naming_rule.interface_rule.symbols = interface_group +dotnet_naming_rule.interface_rule.style = prefix_interface_with_i_style +dotnet_naming_rule.interface_rule.severity = warning +dotnet_naming_rule.interface_types_must_be_prefixed_with_i.severity = warning +dotnet_naming_rule.interface_types_must_be_prefixed_with_i.symbols = interface_types +dotnet_naming_rule.interface_types_must_be_prefixed_with_i.style = prefix_interface_interface_with_i + +# Generics Type Parameters use PascalCase and are prefixed with uppercase 'T' +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces +dotnet_naming_symbols.type_parameter_group.applicable_kinds = type_parameter +dotnet_naming_rule.type_parameter_rule.symbols = type_parameter_group +dotnet_naming_rule.type_parameter_rule.style = prefix_type_parameters_with_t_style +dotnet_naming_rule.type_parameter_rule.severity = warning + +# Function parameters use camelCase +# https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/naming-parameters +dotnet_naming_symbols.parameters_group.applicable_kinds = parameter +dotnet_naming_rule.parameters_rule.symbols = parameters_group +dotnet_naming_rule.parameters_rule.style = camel_case_style +dotnet_naming_rule.parameters_rule.severity = warning + +# Async +dotnet_naming_rule.async_methods_end_in_async.severity = warning +dotnet_naming_rule.async_methods_end_in_async.symbols = any_async_methods +dotnet_naming_rule.async_methods_end_in_async.style = end_in_async + +dotnet_naming_symbols.any_async_methods.applicable_kinds = method +dotnet_naming_symbols.any_async_methods.applicable_accessibilities = * +dotnet_naming_symbols.any_async_methods.required_modifiers = async + +dotnet_naming_style.end_in_async.required_suffix = Async +dotnet_naming_style.end_in_async.capitalization = pascal_case + +# .NET Code Analysis + +dotnet_diagnostic.CA1001.severity = warning +dotnet_diagnostic.CA1009.severity = warning +dotnet_diagnostic.CA1016.severity = warning +dotnet_diagnostic.CA1033.severity = warning +dotnet_diagnostic.CA1049.severity = warning +dotnet_diagnostic.CA1060.severity = warning +dotnet_diagnostic.CA1061.severity = warning +dotnet_diagnostic.CA1063.severity = warning +dotnet_diagnostic.CA1065.severity = warning +dotnet_diagnostic.CA1301.severity = warning +dotnet_diagnostic.CA1400.severity = warning +dotnet_diagnostic.CA1401.severity = warning +dotnet_diagnostic.CA1403.severity = warning +dotnet_diagnostic.CA1404.severity = warning +dotnet_diagnostic.CA1405.severity = warning +dotnet_diagnostic.CA1410.severity = warning +dotnet_diagnostic.CA1415.severity = warning +dotnet_diagnostic.CA1821.severity = warning +dotnet_diagnostic.CA1900.severity = warning +dotnet_diagnostic.CA1901.severity = warning +dotnet_diagnostic.CA2002.severity = warning +dotnet_diagnostic.CA2100.severity = warning +dotnet_diagnostic.CA2101.severity = warning +dotnet_diagnostic.CA2108.severity = warning +dotnet_diagnostic.CA2111.severity = warning +dotnet_diagnostic.CA2112.severity = warning +dotnet_diagnostic.CA2114.severity = warning +dotnet_diagnostic.CA2116.severity = warning +dotnet_diagnostic.CA2117.severity = warning +dotnet_diagnostic.CA2122.severity = warning +dotnet_diagnostic.CA2123.severity = warning +dotnet_diagnostic.CA2124.severity = warning +dotnet_diagnostic.CA2126.severity = warning +dotnet_diagnostic.CA2131.severity = warning +dotnet_diagnostic.CA2132.severity = warning +dotnet_diagnostic.CA2133.severity = warning +dotnet_diagnostic.CA2134.severity = warning +dotnet_diagnostic.CA2137.severity = warning +dotnet_diagnostic.CA2138.severity = warning +dotnet_diagnostic.CA2140.severity = warning +dotnet_diagnostic.CA2141.severity = warning +dotnet_diagnostic.CA2146.severity = warning +dotnet_diagnostic.CA2147.severity = warning +dotnet_diagnostic.CA2149.severity = warning +dotnet_diagnostic.CA2200.severity = warning +dotnet_diagnostic.CA2202.severity = warning +dotnet_diagnostic.CA2207.severity = warning +dotnet_diagnostic.CA2212.severity = warning +dotnet_diagnostic.CA2213.severity = warning +dotnet_diagnostic.CA2214.severity = warning +dotnet_diagnostic.CA2216.severity = warning +dotnet_diagnostic.CA2220.severity = warning +dotnet_diagnostic.CA2229.severity = warning +dotnet_diagnostic.CA2231.severity = warning +dotnet_diagnostic.CA2232.severity = warning +dotnet_diagnostic.CA2235.severity = warning +dotnet_diagnostic.CA2236.severity = warning +dotnet_diagnostic.CA2237.severity = warning +dotnet_diagnostic.CA2238.severity = warning +dotnet_diagnostic.CA2240.severity = warning +dotnet_diagnostic.CA2241.severity = warning +dotnet_diagnostic.CA2242.severity = warning + +# StyleCop Code Analysis + +dotnet_diagnostic.SA1009.severity = none +dotnet_diagnostic.SA1000.severity = none +dotnet_diagnostic.SA1011.severity = none +dotnet_diagnostic.SA1101.severity = none +dotnet_diagnostic.SA1101.severity = none +dotnet_diagnostic.SA1118.severity = none +dotnet_diagnostic.SA1200.severity = none +dotnet_diagnostic.SA1201.severity = none +dotnet_diagnostic.SA1202.severity = none +dotnet_diagnostic.SA1309.severity = none +dotnet_diagnostic.SA1310.severity = none +dotnet_diagnostic.SA1313.severity = none +dotnet_diagnostic.SA1314.severity = none +dotnet_diagnostic.SA1413.severity = none +dotnet_diagnostic.SA1600.severity = none +dotnet_diagnostic.SA1602.severity = none +dotnet_diagnostic.SA1611.severity = none +dotnet_diagnostic.SA1629.severity = none +dotnet_diagnostic.SA1633.severity = none +dotnet_diagnostic.SA1634.severity = none +dotnet_diagnostic.SA1652.severity = none \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..89cad0f --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,2 @@ +# These owners will be the default owners for everything in the repo. +* @MADE-Apps/core-team diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..e89c8aa --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [jamesmcroft] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['buymeacoffee.com/jamesmcroft'] diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..b12bede --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,32 @@ +name: Bug +description: Log a bug to help us improve +title: "[Bug] " +labels: [bug] +body: + - type: textarea + validations: + required: true + attributes: + label: Describe the bug + description: Please describe below the details of the issue and steps taken to reproduce. + - type: textarea + attributes: + label: What is the expected behavior? + description: Please describe below what you expected to happen. + - type: dropdown + attributes: + label: Package + options: + - "UI" + - "UI.Controls.DropDownList" + - "UI.Controls.FilePicker" + - "UI.Controls.Validator" + - "UI.Styling" + - "UI.ViewManagement" + - "UI.Views.Dialogs" + - "UI.Views.Navigation" + - "UI.Views.Navigation.Mvvm" + - type: textarea + attributes: + label: Other information + description: Please provide any additional information, links, screenshots, or projects with reproduced issues below if applicable diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml new file mode 100644 index 0000000..acd4075 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -0,0 +1,29 @@ +name: Feature +description: Suggest a new feature or idea +title: "[Feature] " +labels: [feature-request] +body: + - type: textarea + validations: + required: true + attributes: + label: Describe the feature + description: Please describe below a summary of your feature request. + - type: textarea + validations: + required: true + attributes: + label: Rationale for the feature + description: Please describe a list of reasons why the feature should be added. + - type: textarea + attributes: + label: Scope of the feature + description: Please describe a list of must, should, could, and won't capabilities for the feature. + - type: textarea + attributes: + label: Open questions + description: Please provide any questions that you may have around this feature that are not currently answered. + - type: textarea + attributes: + label: Other information + description: Please provide any additional information, links, screenshots, or samples below if applicable. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..b70b0f3 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ +## Fixes # + + + + +## PR checklist + +- [ ] Samples have been added/updated (where applicable) +- [ ] Tests have been added/updated (where applicable) and pass +- [ ] Documentation has been added/updated for changes +- [ ] Code styling has been met on new source file changes +- [ ] Contains **NO** breaking changes + + + +## Other information + diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..aec207e --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: +- package-ecosystem: nuget + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e34c40a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,75 @@ +name: CI + +on: + push: + tags: + - v* + branches: + - main + paths: + - src/** + - samples/** + - tests/** + - build/** + - .github/workflows/ci.yml + - global.json + pull_request: + branches: + - main + paths: + - src/** + - samples/** + - tests/** + - build/** + - .github/workflows/ci.yml + - global.json + workflow_dispatch: + +jobs: + build: + + env: + BUILD_CONFIG: 'Release' + SOLUTION: 'MADE-Uno.NoSamples.slnf' + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v2 + + - name: Get Build Version + run: | + Import-Module .\build\GetBuildVersion.psm1 + Write-Host $Env:GITHUB_REF + $version = GetBuildVersion -VersionString $Env:GITHUB_REF + echo "BUILD_VERSION=$version" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append + shell: pwsh + + - name: Setup .NET 5.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 5.0.x + + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x + + - name: Setup NuGet + uses: NuGet/setup-nuget@v1.0.5 + + - name: Restore dependencies + run: nuget restore $SOLUTION + + - name: Setup MSBuild + uses: microsoft/setup-msbuild@v1.0.2 + + - name: Build + run: msbuild $env:SOLUTION /p:Configuration=$env:BUILD_CONFIG /p:Platform="Any CPU" -p:Version=$env:BUILD_VERSION + + - name: Run tests + run: dotnet test /p:Configuration=$env:BUILD_CONFIG /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --no-restore --no-build --verbosity normal + + - name: Publish + if: startsWith(github.ref, 'refs/tags/v') + run: nuget push **\*.nupkg -Source 'https://api.nuget.org/v3/index.json' -ApiKey ${{secrets.NUGET_API_KEY}} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..a96c5a2 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,53 @@ +name: Docs + +on: + push: + branches: + - main + paths: + - src/** + - docs/** + - .github/workflows/docs.yml + pull_request: + branches: + - main + paths: + - docs/** + - .github/workflows/docs.yml + workflow_dispatch: + +jobs: + generate-docs: + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v2 + + - name: Setup .NET 5.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 5.0.x + + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x + + - name: Setup DocFX + uses: crazy-max/ghaction-chocolatey@v1 + with: + args: install docfx + + - name: DocFX Build + working-directory: docs + run: docfx .\docfx.json + continue-on-error: false + + - name: Publish + if: github.event_name == 'push' + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs/_site + force_orphan: true diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..02f4a98 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": [ + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..cfaf324 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Run: Docs", + "preLaunchTask": "npm_install_docs", + "cwd": "${workspaceFolder}/docs", + "command": "npm run docfx", + "request": "launch", + "type": "node-terminal" + } + ], + "compounds": [] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..d4bd30e --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,12 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "npm_install_docs", + "type": "npm", + "script": "install", + "path": "docs/", + "problemMatcher": [], + } + ] +} \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..fc9f824 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,47 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting through our [online contact form][contactform]. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ +[contactform]: http://jamescroft.co.uk/contact/ \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..5ce7aa8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,33 @@ +# Contributing + +These guidelines are designed to help you as a contributor to bring your code and skills to the MADE Uno project to make it better. + +## What can I contribute to? + +Our [issue tracker](https://github.com/MADE-Apps/MADE-Uno/issues) contains a collection of features and issues waiting to be worked on! If you see any item marked with **Help Wanted**, we'd like to see you put your skills to use and contribute whatever you can to help develop the feature. + +This can be in the form of contributing to the conversation around the feature or issue, providing code and submitting a pull request, adding a new feature request or bug, or even helping to update our documentation. + +We know that not everyone can do everything, so any little helps. We accept any contribution whether big or small. + +## Code Styling + +We do have a coding style in place, but as a contributor, we're happy for you to code in a way that makes your feel comfortable. We will do the work to make sure everything is in tip top shape before we release to the public. + +## Code Naming and Structure + +It's common to find yourself at a hurdle for finding where to put your code in a project. Once you've found the right place, it's also a pain trying to think of a name for your new feature. + +Don't worry! If you're unsure, just strike up a conversation in the issue you're working against and we'll be happy to help where we can! + +## Bug Hunting + +We're more than happy for you to contribute to our project through testing. We're all developers and we often miss things so finding bugs in the project's code is definitely approved of. Please remember to start a new issue in our [issue tracker](https://github.com/MADE-Apps/MADE-Uno/issues) so we can keep an eye on them and get bugs fixed. + +Even better, if you know how to fix it, follow up your issue with a pull request! + +## Testing And Documentation + +We're including automated for the project. While we will aim to have the best coverage as possible across the entire project, it could always be improved on. If you find an area that is missing tests or could have more tests for, feel free to raise an issue or help out by writing some tests! + +As well as testing, we aim to document the entire project in terms of both developer guidelines such as these and our own API documentation. If you find something that is wrong or is missing, again, feel free to raise an issue or contribute towards the documentation. diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..a17f32b --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,32 @@ + + + + true + true + true + snupkg + true + 1.0.0.0 + MADE Apps + MADE Apps + Copyright (C) MADE Apps. All rights reserved. + https://github.com/MADE-Apps/MADE-Uno + LICENSE + ProjectIcon.jpg + https://github.com/MADE-Apps/MADE-Uno/releases + en + true + latest + + + + + + + + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE index e5906d0..94e07e3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,8 @@ -MIT License +# MADE Uno -Copyright (c) 2022 MADE Apps +Copyright (c) MADE Apps + +# MIT License (MIT) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/MADE-Uno.NoSamples.slnf b/MADE-Uno.NoSamples.slnf new file mode 100644 index 0000000..a9467d1 --- /dev/null +++ b/MADE-Uno.NoSamples.slnf @@ -0,0 +1,16 @@ +{ + "solution": { + "path": "MADE-Uno.sln", + "projects": [ + "src\\MADE.UI\\MADE.UI.csproj", + "src\\MADE.UI.Controls.DropDownList\\MADE.UI.Controls.DropDownList.csproj", + "src\\MADE.UI.Controls.FilePicker\\MADE.UI.Controls.FilePicker.csproj", + "src\\MADE.UI.Controls.Validator\\MADE.UI.Controls.Validator.csproj", + "src\\MADE.UI.Styling\\MADE.UI.Styling.csproj", + "src\\MADE.UI.ViewManagement\\MADE.UI.ViewManagement.csproj", + "src\\MADE.UI.Views.Dialogs\\MADE.UI.Views.Dialogs.csproj", + "src\\MADE.UI.Views.Navigation.Mvvm\\MADE.UI.Views.Navigation.Mvvm.csproj", + "src\\MADE.UI.Views.Navigation\\MADE.UI.Views.Navigation.csproj", + ] + } +} \ No newline at end of file diff --git a/MADE-Uno.sln b/MADE-Uno.sln new file mode 100644 index 0000000..2271bf0 --- /dev/null +++ b/MADE-Uno.sln @@ -0,0 +1,826 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31624.102 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{01380FB8-F8A7-4416-AABA-5407574B7723}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{69149D0F-BB09-411B-88F0-A1E845058D70}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.UI", "src\MADE.UI\MADE.UI.csproj", "{79AFD8FC-7789-47B7-B808-26E03D0F1E05}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.UI.Controls.DropDownList", "src\MADE.UI.Controls.DropDownList\MADE.UI.Controls.DropDownList.csproj", "{347CDC37-E140-42FA-8710-A0F3297D2B6B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{B7EC0D82-6637-45BD-BBB4-62D730C85529}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.UI.Controls.Validator", "src\MADE.UI.Controls.Validator\MADE.UI.Controls.Validator.csproj", "{E2B20928-DAE2-4A9C-BDAF-D787B4F48391}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.UI.Controls.FilePicker", "src\MADE.UI.Controls.FilePicker\MADE.UI.Controls.FilePicker.csproj", "{774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{54E4D84F-F98F-41B3-A8D6-289FA6347618}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MADE.Samples.Droid", "samples\MADE.Samples\MADE.Samples.Droid\MADE.Samples.Droid.csproj", "{6D1F389A-9954-40C1-923D-254EEC7E7380}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MADE.Samples.iOS", "samples\MADE.Samples\MADE.Samples.iOS\MADE.Samples.iOS.csproj", "{04F1B32D-9056-43FC-B4C2-B8C5481BDACB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MADE.Samples.UWP", "samples\MADE.Samples\MADE.Samples.UWP\MADE.Samples.UWP.csproj", "{5329834F-BF4C-4FDD-B591-53ACB280B6B5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.Samples.Wasm", "samples\MADE.Samples\MADE.Samples.Wasm\MADE.Samples.Wasm.csproj", "{38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "MADE.Samples.Shared", "samples\MADE.Samples\MADE.Samples.Shared\MADE.Samples.Shared.shproj", "{6279C845-92F8-4333-AB99-3D213163593C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.UI.Views.Dialogs", "src\MADE.UI.Views.Dialogs\MADE.UI.Views.Dialogs.csproj", "{2B5C0BEA-18D8-4B82-AF64-EDE15505E793}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.UI.Views.Navigation", "src\MADE.UI.Views.Navigation\MADE.UI.Views.Navigation.csproj", "{99E31579-1168-4983-BCED-E7853E33EF5B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.UI.Views.Navigation.Mvvm", "src\MADE.UI.Views.Navigation.Mvvm\MADE.UI.Views.Navigation.Mvvm.csproj", "{0CA60466-059C-42D3-9B68-6BBB75A75090}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.UI.Styling", "src\MADE.UI.Styling\MADE.UI.Styling.csproj", "{F8D00106-0598-45E7-B92E-EF408249C02E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MADE.UI.ViewManagement", "src\MADE.UI.ViewManagement\MADE.UI.ViewManagement.csproj", "{442D1E25-FFD1-405D-A1FC-40CAFCAD190C}" +EndProject +Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + samples\MADE.Samples\MADE.Samples.Shared\MADE.Samples.Shared.projitems*{04f1b32d-9056-43fc-b4c2-b8c5481bdacb}*SharedItemsImports = 4 + samples\MADE.Samples\MADE.Samples.Shared\MADE.Samples.Shared.projitems*{38379ab4-d31e-4ab2-9817-8a9f44ae7d4f}*SharedItemsImports = 5 + samples\MADE.Samples\MADE.Samples.Shared\MADE.Samples.Shared.projitems*{5329834f-bf4c-4fdd-b591-53acb280b6b5}*SharedItemsImports = 4 + samples\MADE.Samples\MADE.Samples.Shared\MADE.Samples.Shared.projitems*{6279c845-92f8-4333-ab99-3d213163593c}*SharedItemsImports = 13 + samples\MADE.Samples\MADE.Samples.Shared\MADE.Samples.Shared.projitems*{6d1f389a-9954-40c1-923d-254eec7e7380}*SharedItemsImports = 4 + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Ad-Hoc|Any CPU = Ad-Hoc|Any CPU + Ad-Hoc|ARM = Ad-Hoc|ARM + Ad-Hoc|ARM64 = Ad-Hoc|ARM64 + Ad-Hoc|iPhone = Ad-Hoc|iPhone + Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator + Ad-Hoc|x64 = Ad-Hoc|x64 + Ad-Hoc|x86 = Ad-Hoc|x86 + AppStore|Any CPU = AppStore|Any CPU + AppStore|ARM = AppStore|ARM + AppStore|ARM64 = AppStore|ARM64 + AppStore|iPhone = AppStore|iPhone + AppStore|iPhoneSimulator = AppStore|iPhoneSimulator + AppStore|x64 = AppStore|x64 + AppStore|x86 = AppStore|x86 + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|iPhone = Debug|iPhone + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|iPhone = Release|iPhone + Release|iPhoneSimulator = Release|iPhoneSimulator + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|ARM64.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|ARM64.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|Any CPU.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|ARM.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|ARM.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|ARM64.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|ARM64.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|iPhone.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|x64.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|x64.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|x86.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.AppStore|x86.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|ARM.ActiveCfg = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|ARM.Build.0 = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|ARM64.Build.0 = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|iPhone.Build.0 = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|x64.ActiveCfg = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|x64.Build.0 = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|x86.ActiveCfg = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Debug|x86.Build.0 = Debug|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|Any CPU.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|ARM.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|ARM.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|ARM64.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|ARM64.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|iPhone.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|iPhone.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|x64.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|x64.Build.0 = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|x86.ActiveCfg = Release|Any CPU + {79AFD8FC-7789-47B7-B808-26E03D0F1E05}.Release|x86.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|ARM64.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|ARM64.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|Any CPU.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|ARM.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|ARM.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|ARM64.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|ARM64.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|iPhone.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|x64.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|x64.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|x86.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.AppStore|x86.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|ARM.ActiveCfg = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|ARM.Build.0 = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|ARM64.Build.0 = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|iPhone.Build.0 = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|x64.ActiveCfg = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|x64.Build.0 = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|x86.ActiveCfg = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Debug|x86.Build.0 = Debug|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|Any CPU.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|ARM.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|ARM.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|ARM64.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|ARM64.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|iPhone.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|iPhone.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|x64.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|x64.Build.0 = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|x86.ActiveCfg = Release|Any CPU + {347CDC37-E140-42FA-8710-A0F3297D2B6B}.Release|x86.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|ARM64.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|ARM64.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|Any CPU.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|ARM.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|ARM.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|ARM64.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|ARM64.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|iPhone.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|x64.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|x64.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|x86.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.AppStore|x86.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|ARM.ActiveCfg = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|ARM.Build.0 = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|ARM64.Build.0 = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|iPhone.Build.0 = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|x64.ActiveCfg = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|x64.Build.0 = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|x86.ActiveCfg = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Debug|x86.Build.0 = Debug|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|Any CPU.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|ARM.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|ARM.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|ARM64.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|ARM64.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|iPhone.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|iPhone.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|x64.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|x64.Build.0 = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|x86.ActiveCfg = Release|Any CPU + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391}.Release|x86.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|ARM64.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|ARM64.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|Any CPU.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|ARM.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|ARM.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|ARM64.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|ARM64.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|iPhone.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|x64.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|x64.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|x86.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.AppStore|x86.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|ARM.ActiveCfg = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|ARM.Build.0 = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|ARM64.Build.0 = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|iPhone.Build.0 = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|x64.ActiveCfg = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|x64.Build.0 = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|x86.ActiveCfg = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Debug|x86.Build.0 = Debug|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|Any CPU.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|ARM.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|ARM.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|ARM64.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|ARM64.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|iPhone.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|iPhone.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|x64.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|x64.Build.0 = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|x86.ActiveCfg = Release|Any CPU + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE}.Release|x86.Build.0 = Release|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|Any CPU.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|ARM.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|ARM64.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|iPhone.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|x64.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Ad-Hoc|x86.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|Any CPU.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|ARM.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|ARM.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|ARM64.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|ARM64.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|iPhone.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|iPhone.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|iPhoneSimulator.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|x64.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|x64.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|x64.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|x86.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|x86.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.AppStore|x86.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|ARM.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|ARM.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|ARM.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|ARM64.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|ARM64.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|iPhone.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|iPhone.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|x64.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|x64.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|x64.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|x86.ActiveCfg = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|x86.Build.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Debug|x86.Deploy.0 = Debug|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Release|ARM.ActiveCfg = Release|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Release|ARM64.ActiveCfg = Release|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Release|iPhone.ActiveCfg = Release|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Release|x64.ActiveCfg = Release|Any CPU + {6D1F389A-9954-40C1-923D-254EEC7E7380}.Release|x86.ActiveCfg = Release|Any CPU + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Ad-Hoc|ARM64.ActiveCfg = Ad-Hoc|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Ad-Hoc|x64.ActiveCfg = Ad-Hoc|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.AppStore|Any CPU.ActiveCfg = AppStore|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.AppStore|ARM.ActiveCfg = AppStore|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.AppStore|ARM64.ActiveCfg = AppStore|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.AppStore|iPhone.ActiveCfg = AppStore|iPhone + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.AppStore|iPhone.Build.0 = AppStore|iPhone + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.AppStore|x64.ActiveCfg = AppStore|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.AppStore|x86.ActiveCfg = AppStore|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Debug|ARM64.ActiveCfg = Debug|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Debug|iPhone.ActiveCfg = Debug|iPhone + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Debug|iPhone.Build.0 = Debug|iPhone + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Release|ARM.ActiveCfg = Release|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Release|ARM64.ActiveCfg = Release|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Release|iPhone.ActiveCfg = Release|iPhone + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Release|x64.ActiveCfg = Release|iPhoneSimulator + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB}.Release|x86.ActiveCfg = Release|iPhoneSimulator + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|Any CPU.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|Any CPU.Build.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|Any CPU.Deploy.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|ARM.ActiveCfg = Debug|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|ARM.Build.0 = Debug|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|ARM.Deploy.0 = Debug|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|ARM64.ActiveCfg = Debug|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|ARM64.Build.0 = Debug|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|ARM64.Deploy.0 = Debug|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|iPhone.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|iPhone.Build.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|iPhone.Deploy.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|x64.ActiveCfg = Debug|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|x64.Build.0 = Debug|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|x64.Deploy.0 = Debug|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|x86.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|x86.Build.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Ad-Hoc|x86.Deploy.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|Any CPU.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|Any CPU.Build.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|Any CPU.Deploy.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|ARM.ActiveCfg = Debug|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|ARM.Build.0 = Debug|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|ARM.Deploy.0 = Debug|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|ARM64.ActiveCfg = Debug|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|ARM64.Build.0 = Debug|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|ARM64.Deploy.0 = Debug|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|iPhone.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|iPhone.Build.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|iPhone.Deploy.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|iPhoneSimulator.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|iPhoneSimulator.Build.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|iPhoneSimulator.Deploy.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|x64.ActiveCfg = Debug|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|x64.Build.0 = Debug|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|x64.Deploy.0 = Debug|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|x86.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|x86.Build.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.AppStore|x86.Deploy.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|Any CPU.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|ARM.ActiveCfg = Debug|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|ARM.Build.0 = Debug|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|ARM.Deploy.0 = Debug|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|ARM64.Build.0 = Debug|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|iPhone.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|x64.ActiveCfg = Debug|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|x64.Build.0 = Debug|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|x64.Deploy.0 = Debug|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|x86.ActiveCfg = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|x86.Build.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Debug|x86.Deploy.0 = Debug|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Release|Any CPU.ActiveCfg = Release|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Release|ARM.ActiveCfg = Release|ARM + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Release|ARM64.ActiveCfg = Release|ARM64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Release|iPhone.ActiveCfg = Release|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Release|iPhoneSimulator.ActiveCfg = Release|x86 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Release|x64.ActiveCfg = Release|x64 + {5329834F-BF4C-4FDD-B591-53ACB280B6B5}.Release|x86.ActiveCfg = Release|x86 + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|ARM.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|ARM64.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|iPhone.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|x64.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|x64.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|x86.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.AppStore|x86.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|ARM.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|ARM64.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|iPhone.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|x64.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|x64.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|x86.ActiveCfg = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Debug|x86.Build.0 = Debug|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Release|ARM.ActiveCfg = Release|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Release|ARM64.ActiveCfg = Release|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Release|iPhone.ActiveCfg = Release|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Release|x64.ActiveCfg = Release|Any CPU + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F}.Release|x86.ActiveCfg = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|ARM.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|ARM64.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|iPhone.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|x64.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|x64.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|x86.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.AppStore|x86.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|ARM.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|ARM.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|ARM64.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|iPhone.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|x64.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|x64.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|x86.ActiveCfg = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Debug|x86.Build.0 = Debug|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|Any CPU.Build.0 = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|ARM.ActiveCfg = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|ARM.Build.0 = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|ARM64.ActiveCfg = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|ARM64.Build.0 = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|iPhone.ActiveCfg = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|iPhone.Build.0 = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|x64.ActiveCfg = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|x64.Build.0 = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|x86.ActiveCfg = Release|Any CPU + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793}.Release|x86.Build.0 = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|ARM.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|ARM64.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|iPhone.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|x64.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|x64.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|x86.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.AppStore|x86.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|ARM.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|ARM.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|ARM64.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|iPhone.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|x64.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|x64.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|x86.ActiveCfg = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Debug|x86.Build.0 = Debug|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|Any CPU.Build.0 = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|ARM.ActiveCfg = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|ARM.Build.0 = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|ARM64.ActiveCfg = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|ARM64.Build.0 = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|iPhone.ActiveCfg = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|iPhone.Build.0 = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|x64.ActiveCfg = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|x64.Build.0 = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|x86.ActiveCfg = Release|Any CPU + {99E31579-1168-4983-BCED-E7853E33EF5B}.Release|x86.Build.0 = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|ARM.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|ARM64.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|iPhone.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|x64.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|x64.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|x86.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.AppStore|x86.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|ARM.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|ARM64.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|iPhone.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|x64.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|x64.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|x86.ActiveCfg = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Debug|x86.Build.0 = Debug|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|Any CPU.Build.0 = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|ARM.ActiveCfg = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|ARM.Build.0 = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|ARM64.ActiveCfg = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|ARM64.Build.0 = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|iPhone.ActiveCfg = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|iPhone.Build.0 = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|x64.ActiveCfg = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|x64.Build.0 = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|x86.ActiveCfg = Release|Any CPU + {0CA60466-059C-42D3-9B68-6BBB75A75090}.Release|x86.Build.0 = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|ARM.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|ARM64.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|iPhone.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|x64.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|x64.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|x86.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.AppStore|x86.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|ARM.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|ARM64.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|iPhone.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|x64.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|x64.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|x86.ActiveCfg = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Debug|x86.Build.0 = Debug|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|Any CPU.Build.0 = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|ARM.ActiveCfg = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|ARM.Build.0 = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|ARM64.ActiveCfg = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|ARM64.Build.0 = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|iPhone.ActiveCfg = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|iPhone.Build.0 = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|x64.ActiveCfg = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|x64.Build.0 = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|x86.ActiveCfg = Release|Any CPU + {F8D00106-0598-45E7-B92E-EF408249C02E}.Release|x86.Build.0 = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|ARM.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|ARM64.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|ARM64.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|iPhone.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|x64.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|x64.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|x86.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.AppStore|x86.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|ARM.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|ARM64.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|iPhone.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|x64.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|x64.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|x86.ActiveCfg = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Debug|x86.Build.0 = Debug|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|Any CPU.Build.0 = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|ARM.ActiveCfg = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|ARM.Build.0 = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|ARM64.ActiveCfg = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|ARM64.Build.0 = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|iPhone.ActiveCfg = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|iPhone.Build.0 = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|x64.ActiveCfg = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|x64.Build.0 = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|x86.ActiveCfg = Release|Any CPU + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {79AFD8FC-7789-47B7-B808-26E03D0F1E05} = {01380FB8-F8A7-4416-AABA-5407574B7723} + {347CDC37-E140-42FA-8710-A0F3297D2B6B} = {01380FB8-F8A7-4416-AABA-5407574B7723} + {E2B20928-DAE2-4A9C-BDAF-D787B4F48391} = {01380FB8-F8A7-4416-AABA-5407574B7723} + {774FD8D5-CCC1-4EED-AA14-F7069BFAE5CE} = {01380FB8-F8A7-4416-AABA-5407574B7723} + {54E4D84F-F98F-41B3-A8D6-289FA6347618} = {B7EC0D82-6637-45BD-BBB4-62D730C85529} + {6D1F389A-9954-40C1-923D-254EEC7E7380} = {54E4D84F-F98F-41B3-A8D6-289FA6347618} + {04F1B32D-9056-43FC-B4C2-B8C5481BDACB} = {54E4D84F-F98F-41B3-A8D6-289FA6347618} + {5329834F-BF4C-4FDD-B591-53ACB280B6B5} = {54E4D84F-F98F-41B3-A8D6-289FA6347618} + {38379AB4-D31E-4AB2-9817-8A9F44AE7D4F} = {54E4D84F-F98F-41B3-A8D6-289FA6347618} + {6279C845-92F8-4333-AB99-3D213163593C} = {B7EC0D82-6637-45BD-BBB4-62D730C85529} + {2B5C0BEA-18D8-4B82-AF64-EDE15505E793} = {01380FB8-F8A7-4416-AABA-5407574B7723} + {99E31579-1168-4983-BCED-E7853E33EF5B} = {01380FB8-F8A7-4416-AABA-5407574B7723} + {0CA60466-059C-42D3-9B68-6BBB75A75090} = {01380FB8-F8A7-4416-AABA-5407574B7723} + {F8D00106-0598-45E7-B92E-EF408249C02E} = {01380FB8-F8A7-4416-AABA-5407574B7723} + {442D1E25-FFD1-405D-A1FC-40CAFCAD190C} = {01380FB8-F8A7-4416-AABA-5407574B7723} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3921AD86-E6C0-4436-8880-2D9EDFAD6151} + EndGlobalSection +EndGlobal diff --git a/MADE-Uno.sln.DotSettings b/MADE-Uno.sln.DotSettings new file mode 100644 index 0000000..409df4a --- /dev/null +++ b/MADE-Uno.sln.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2c8313b --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +MADE project banner + +# MADE Uno + +A library of Uno Platform UI components, supporting Windows, Android, iOS, and WebAssembly platforms. + +This is a collection of companion libraries to the [MADE.NET](https://github.com/MADE-Apps/MADE.NET) libraries. + +## Support MADE Uno ♥ + +As many developers know, projects like MADE Uno are built and maintained in spare time. If you find this project useful, please **Star** the repo and if possible, sponsor the project development on GitHub. + +## Build Status + +| Build | Status | Current Version | +| ------ | ------ | ------ | +| Packages | [![CI](https://github.com/MADE-Apps/MADE-Uno/actions/workflows/ci.yml/badge.svg)](https://github.com/MADE-Apps/MADE-Uno/actions/workflows/ci.yml) | [![NuGet](https://img.shields.io/nuget/v/MADE.UI)](https://www.nuget.org/profiles/made-apps) | +| Docs | [![Docs](https://github.com/MADE-Apps/MADE-Uno/actions/workflows/docs.yml/badge.svg)](https://github.com/MADE-Apps/MADE-Uno/actions/workflows/docs.yml) | N/A | + +## Installation 💾 + +[MADE Uno](https://www.nuget.org/profiles/made-apps) components are publicly available via NuGet. Each available package is detailed below. + +| Package | Current | Preview | Downloads | +| ------ | ------ | ------ | ------ | +| UI | [![NuGet](https://img.shields.io/nuget/v/MADE.UI)](https://www.nuget.org/packages/MADE.UI/) | [![NuGet](https://img.shields.io/nuget/vpre/MADE.UI)](https://www.nuget.org/packages/MADE.UI/) | [![NuGet Downloads](https://img.shields.io/nuget/dt/MADE.UI.svg)](https://www.nuget.org/packages/MADE.UI) | +| UI.Controls.DropDownList | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Controls.DropDownList)](https://www.nuget.org/packages/MADE.UI.Controls.DropDownList/) | [![NuGet](https://img.shields.io/nuget/vpre/MADE.UI.Controls.DropDownList)](https://www.nuget.org/packages/MADE.UI.Controls.DropDownList/) | [![NuGet Downloads](https://img.shields.io/nuget/dt/MADE.UI.Controls.DropDownList.svg)](https://www.nuget.org/packages/MADE.UI.Controls.DropDownList) | +| UI.Controls.FilePicker | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Controls.FilePicker)](https://www.nuget.org/packages/MADE.UI.Controls.FilePicker/) | [![NuGet](https://img.shields.io/nuget/vpre/MADE.UI.Controls.FilePicker)](https://www.nuget.org/packages/MADE.UI.Controls.FilePicker/) | [![NuGet Downloads](https://img.shields.io/nuget/dt/MADE.UI.Controls.FilePicker.svg)](https://www.nuget.org/packages/MADE.UI.Controls.FilePicker) | +| UI.Controls.Validator | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Controls.Validator)](https://www.nuget.org/packages/MADE.UI.Controls.Validator/) | [![NuGet](https://img.shields.io/nuget/vpre/MADE.UI.Controls.Validator)](https://www.nuget.org/packages/MADE.UI.Controls.Validator/) | [![NuGet Downloads](https://img.shields.io/nuget/dt/MADE.UI.Controls.Validator.svg)](https://www.nuget.org/packages/MADE.UI.Controls.Validator) | +| UI.Styling | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Styling)](https://www.nuget.org/packages/MADE.UI.Styling/) | [![NuGet](https://img.shields.io/nuget/vpre/MADE.UI.Styling)](https://www.nuget.org/packages/MADE.UI.Styling/) | [![NuGet Downloads](https://img.shields.io/nuget/dt/MADE.UI.Styling.svg)](https://www.nuget.org/packages/MADE.UI.Styling) | +| UI.ViewManagement | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.ViewManagement)](https://www.nuget.org/packages/MADE.UI.ViewManagement/) | [![NuGet](https://img.shields.io/nuget/vpre/MADE.UI.ViewManagement)](https://www.nuget.org/packages/MADE.UI.ViewManagement/) | [![NuGet Downloads](https://img.shields.io/nuget/dt/MADE.UI.ViewManagement.svg)](https://www.nuget.org/packages/MADE.UI.ViewManagement) | +| UI.Views.Dialogs | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Views.Dialogs)](https://www.nuget.org/packages/MADE.UI.Views.Dialogs/) | [![NuGet](https://img.shields.io/nuget/vpre/MADE.UI.Views.Dialogs)](https://www.nuget.org/packages/MADE.UI.Views.Dialogs/) | [![NuGet Downloads](https://img.shields.io/nuget/dt/MADE.UI.Views.Dialogs.svg)](https://www.nuget.org/packages/MADE.UI.Views.Dialogs) | +| UI.Views.Navigation | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Views.Navigation)](https://www.nuget.org/packages/MADE.UI.Views.Navigation/) | [![NuGet](https://img.shields.io/nuget/vpre/MADE.UI.Views.Navigation)](https://www.nuget.org/packages/MADE.UI.Views.Navigation/) | [![NuGet Downloads](https://img.shields.io/nuget/dt/MADE.UI.Views.Navigation.svg)](https://www.nuget.org/packages/MADE.UI.Views.Navigation) | +| UI.Views.Navigation.Mvvm | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Views.Navigation.Mvvm)](https://www.nuget.org/packages/MADE.UI.Views.Navigation.Mvvm/) | [![NuGet](https://img.shields.io/nuget/vpre/MADE.UI.Views.Navigation.Mvvm)](https://www.nuget.org/packages/MADE.UI.Views.Navigation.Mvvm/) | [![NuGet Downloads](https://img.shields.io/nuget/dt/MADE.UI.Views.Navigation.Mvvm.svg)](https://www.nuget.org/packages/MADE.UI.Views.Navigation.Mvvm) | + +## Contributing 🚀 + +Looking to help build MADE Uno? Take a look through our [contribution guidelines](CONTRIBUTING.md). We actively encourage you to jump in and help with any issues! + +## Building MADE Uno 🛠 + +MADE Uno is built using .NET Standard, taking advantage of the new SDK-style projects and multi-targeting enabled with the help of [MSBuild.Sdk.Extras](https://github.com/novotnyllc/MSBuildSdkExtras). + +Each library is configured to take advantage of the Uno Platform libraries to provide cross-platform components. + +You can build the solution using Visual Studio with the following workloads installed: + +- .NET desktop development +- Universal Windows Platform development +- Mobile Development with .NET +- .NET Core cross-platform development + +## License + +MADE Uno is made available under the terms and conditions of the [MIT license](LICENSE). diff --git a/assets/Logo.afdesign b/assets/Logo.afdesign new file mode 100644 index 0000000..795c3cd Binary files /dev/null and b/assets/Logo.afdesign differ diff --git a/assets/Logo.png b/assets/Logo.png new file mode 100644 index 0000000..b11a964 Binary files /dev/null and b/assets/Logo.png differ diff --git a/assets/ProjectBanner.afdesign b/assets/ProjectBanner.afdesign new file mode 100644 index 0000000..52942ae Binary files /dev/null and b/assets/ProjectBanner.afdesign differ diff --git a/assets/ProjectBanner.png b/assets/ProjectBanner.png new file mode 100644 index 0000000..54e157d Binary files /dev/null and b/assets/ProjectBanner.png differ diff --git a/assets/ProjectIcon.jpg b/assets/ProjectIcon.jpg new file mode 100644 index 0000000..4baaf9c Binary files /dev/null and b/assets/ProjectIcon.jpg differ diff --git a/assets/ProjectIcon.png b/assets/ProjectIcon.png new file mode 100644 index 0000000..8f04322 Binary files /dev/null and b/assets/ProjectIcon.png differ diff --git a/assets/SampleIcons.afdesign b/assets/SampleIcons.afdesign new file mode 100644 index 0000000..ba3d264 Binary files /dev/null and b/assets/SampleIcons.afdesign differ diff --git a/build/GetBuildVersion.psm1 b/build/GetBuildVersion.psm1 new file mode 100644 index 0000000..11ea5d0 --- /dev/null +++ b/build/GetBuildVersion.psm1 @@ -0,0 +1,34 @@ +Function GetBuildVersion { + Param ( + [string]$VersionString + ) + + # Process through regex + $VersionString -match "(?\d+)(\.(?\d+))?(\.(?\d+))?(\-(?
[0-9A-Za-z\-\.]+))?(\+(?\d+))?" | Out-Null
+
+    if ($matches -eq $null) {
+        return "1.0.0-build"
+    }
+
+    # Extract the build metadata
+    $BuildRevision = [uint64]$matches['build']
+    # Extract the pre-release tag
+    $PreReleaseTag = [string]$matches['pre']
+    # Extract the patch
+    $Patch = [uint64]$matches['patch']
+    # Extract the minor
+    $Minor = [uint64]$matches['minor']
+    # Extract the major
+    $Major = [uint64]$matches['major']
+
+    $Version = [string]$Major + '.' + [string]$Minor + '.' + [string]$Patch;
+    if ($PreReleaseTag -ne [string]::Empty) {
+        $Version = $Version + '-' + $PreReleaseTag
+    }
+
+    if ($BuildRevision -ne 0) {
+        $Version = $Version + '.' + [string]$BuildRevision
+    }
+
+    return $Version
+}
\ No newline at end of file
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..4378419
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,9 @@
+###############
+#    folder   #
+###############
+/**/DROP/
+/**/TEMP/
+/**/packages/
+/**/bin/
+/**/obj/
+_site
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..04e60aa
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,29 @@
+# MADE Uno Documentation
+
+This folder contains source code for the generation of MADE Uno's documentation.
+
+## Contributing to the docs
+
+### Install dependencies
+
+Download and install docfx on your computer.
+
+#### MacOS
+
+```
+brew install docfx
+```
+
+#### Windows
+
+```
+choco install docfx
+```
+
+### Running locally
+
+```
+docfx .\docfx.json --serve
+```
+
+This will run the docs on `http://localhost:8080`
diff --git a/docs/api/.gitignore b/docs/api/.gitignore
new file mode 100644
index 0000000..e8079a3
--- /dev/null
+++ b/docs/api/.gitignore
@@ -0,0 +1,5 @@
+###############
+#  temp file  #
+###############
+*.yml
+.manifest
diff --git a/docs/api/index.md b/docs/api/index.md
new file mode 100644
index 0000000..cf187e1
--- /dev/null
+++ b/docs/api/index.md
@@ -0,0 +1,10 @@
+---
+uid: api-docs
+title: Explore the APIs
+---
+
+# Explore the APIs
+
+Here you'll find all of the generated code documentation for the MADE Uno projects, similar to what you might find on Microsoft Docs!
+
+This documentation is designed to show you how each component of MADE Uno is constructed and provide a reference for you when building your projects.
diff --git a/docs/articles/features/ui-controls-dropdownlist.md b/docs/articles/features/ui-controls-dropdownlist.md
new file mode 100644
index 0000000..3352da6
--- /dev/null
+++ b/docs/articles/features/ui-controls-dropdownlist.md
@@ -0,0 +1,68 @@
+---
+uid: package-ui-controls-dropdownlist
+title: Using the DropDownList control
+---
+
+# Using the DropDownList control
+
+The `MADE.UI.Controls.DropDownList` element is a custom-built UI element for Windows (UWP) applications that provides a selection user experience, allowing a user to select one or multiple items from a list.
+
+The control works in a similar way to the `ComboBox` element in the Windows SDK, with the added extensibility to change modes to select multiple items.
+
+Shown below is the visuals for the control in its default state, in a multiple selection mode.
+
+DropDownList control showing multiple selected items
+
+DropDownList control showing expanded selection with selected items
+
+## Example usage
+
+```xml
+
+
+    
+        
+    
+
+```
+
+## Customizing the DropDownList
+
+The control has many customization properties that are exposed to tailor the experience for your application. 
+
+### HeaderTemplate
+
+The `Header` can be customized to include custom UI elements as well as a string resource.
+
+The `HeaderTemplate` is also available to provide a `DataTemplate` for you to define the rendered UI for the `Header`.
+
+### ItemTemplate and ItemTemplateSelector
+
+The rendered UI elements for the items in the control can be customized with the `ItemTemplate` or `ItemTemplateSelector`.
+
+### SelectionMode
+
+The `DropDownList` has two selection modes, `Single` and `Multiple`. 
+
+By default, the control works in a `Single` selection mode. 
+
+### MaxDropDownHeight
+
+The height of the drop-down can be customized to allow you to show more results that the default expanded view. 
+
+By default, the drop down will expand to 248 pixels.
diff --git a/docs/articles/features/ui-controls-filepicker.md b/docs/articles/features/ui-controls-filepicker.md
new file mode 100644
index 0000000..56111f2
--- /dev/null
+++ b/docs/articles/features/ui-controls-filepicker.md
@@ -0,0 +1,95 @@
+---
+uid: package-ui-controls-filepicker
+title: Using the FilePicker control
+---
+
+# Using the FilePicker control
+
+The `MADE.UI.Controls.FilePicker` element is a custom-built UI element that works with [Uno's supported platforms](https://platform.uno/) that provides a file selection user experience.
+
+The control works in a similar way to the `` element in web applications.
+
+Shown below is the visuals for the control in its default state, in a multiple selection mode.
+
+FilePicker with chosen files
+
+## Example usage
+
+```xml
+
+
+    
+        
+    
+
+```
+
+## Retrieving selected files
+
+The control exposes the selected files through the `Files` list property.
+
+The type of objects contained in this collection will be `FilePickerItem` which contains the details for the file including:
+
+- The file as a `StorageFile`
+- The thumbnail as a `BitmapImage`
+- The file name including the extension
+- The display name
+- The file type
+- The file path
+
+## Customizing the FilePicker
+
+The control has many customization properties that are exposed to tailor the experience for your application.
+
+### HeaderTemplate
+
+The `Header` can be customized to include custom UI elements as well as a string resource.
+
+The `HeaderTemplate` is also available to provide a `DataTemplate` for you to define the rendered UI for the `Header`.
+
+### ChooseFileButtonContent and ChooseFileButtonContentTemplate
+
+The `ChooseFileButtonContent` can be used to set the UI elements or string resource displayed on the button.
+
+The rendered UI elements for the button content in the control can also be customized with the `ChooseFileButtonContentTemplate`.
+
+### SelectionMode
+
+The `FilePicker` has two selection modes, `Single` and `Multiple`. 
+
+By default, the control works in a `Single` selection mode. 
+
+### FileTypes
+
+When the user selects the button to choose files, you can customize what files can be selected using a list of file extensions with the `FileTypes` property.
+
+By default, the control will allow any file to be selected using the `*` selector.
+
+### AppendFiles
+
+If multiple selection is enabled, the `AppendFiles` boolean flag will allow your user to append additional files to the existing selections if they choose to add more files.
+
+By default, this is `false` which will overwrite the files chosen on subsequent additions.
+
+### ItemsViewStyle
+
+The `ItemsViewStyle` controls the styling applied to the view which displays the selected items. 
+
+The default user experience styling is shown at the top of this article.
diff --git a/docs/articles/features/ui-controls-validator.md b/docs/articles/features/ui-controls-validator.md
new file mode 100644
index 0000000..a9a7685
--- /dev/null
+++ b/docs/articles/features/ui-controls-validator.md
@@ -0,0 +1,115 @@
+---
+uid: package-ui-controls-validator
+title: Using the InputValidator control
+---
+
+# Using the InputValidator control
+
+The `MADE.UI.Controls.InputValidator` element is a custom-built UI element wrapper for input controls that works with [Uno's supported platforms](https://platform.uno/) that provides an input validation experience.
+
+Shown below is the visuals for the control in its default state validating a `TextBox` and `DatePicker` with input validators from the `MADE.Data.Validation` library.
+
+InputValidator usages for a TextBox and DatePicker
+
+## Example usage
+
+```xml
+
+
+    
+        
+            
+        
+
+        
+            
+        
+    
+
+```
+
+```csharp
+namespace InputValidatorSample
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Collections.ObjectModel;
+    using System.Diagnostics;
+    using global::Windows.UI.Xaml.Controls;
+    using MADE.Data.Validation;
+    using MADE.Data.Validation.Validators;
+    using MADE.UI.Controls;
+
+    public sealed partial class MainPage : Page
+    {
+        public MainPage()
+        {
+            this.InitializeComponent();
+
+            this.TextBoxValidator.Validators = new ValidatorCollection 
+            { 
+                new RequiredValidator(), 
+                new EmailValidator(),
+            };
+
+            this.DatePickerValidator.Validators = new ValidatorCollection
+            {
+                new RequiredValidator(), 
+                new BetweenValidator(DateTimeOffset.Now, DateTimeOffset.Now.AddDays(7)),
+            };
+        }
+    }
+}
+```
+
+## Validating an input
+
+The `InputValidator` is designed in a way that it can be used with any input control, whether in-built like `TextBox` or custom-built like the MADE `FilePicker` control. 
+
+Simply, the `Input` property of the validator needs to be bound to the input value reference from the wrapped input control that needs to be validated.
+
+You can then provide a `ValidatorCollection` instance from the [Data Validation package](data-validation.md), containing the `IValidator` instances that will be run on the input. 
+
+This can either be a bound property in your view-model, set in your view code-behind, or defined in your XAML as a static resource.
+
+The implementation of using `IValidator` instances allows you to dynamically configure your validators based on other criteria of your view.
+
+For example, you might want to validate two `DatePicker` controls that define a min/max range. The validator for the maximum date could be dynamically updated so that its minimum value is defined based on the value of the minimum date picker.
+
+## Extending input validation for your application's needs
+
+The validation of the `InputValidator` is based on `IValidator` instances from the Data Validation package.
+
+While the package provides a common set of validators for basic scenarios such as required, range, min, max, and email, you can create your own.
+
+Find more detail on creating your own custom `IValidator` types in our [Data Validation article](data-validation.md#creating-your-own-custom-data-validators).
+
+## Customizing the InputValidator
+
+The control has many customization properties that are exposed to tailor the experience for your application.
+
+### FeedbackMessageStyle
+
+The `FeedbackMessageStyle` controls the styling applied to the `TextBlock` that displays the validator messages. 
+
+The default user experience styling is shown at the top of this article.
diff --git a/docs/articles/features/ui-styling.md b/docs/articles/features/ui-styling.md
new file mode 100644
index 0000000..81b6fe6
--- /dev/null
+++ b/docs/articles/features/ui-styling.md
@@ -0,0 +1,37 @@
+---
+uid: package-ui-styling
+title: Using the UI Styling package
+---
+
+# Using the UI Styling package
+
+The UI Styling package is designed for improving the flow of designing native applications for Windows, Android, iOS, macOS, Linux, and the web.
+
+## Converting HEX strings to colors and SolidColorBrush with ColorExtensions
+
+The `MADE.UI.Styling.Colors.ColorExtensions` provides a collection of extensions that can be used to manipulate `System.Drawing.Color`, `Windows.UI.Color` or `Windows.UI.Xaml.Media.SolidColorBrush` objects such as converting a HEX value to them and back.
+
+Below are some example usages for your applications built for Windows and the Uno Platform.
+
+### Convert HEX String to Color and back example
+
+```csharp
+private void HexColorConversion()
+{
+    Windows.UI.Color redWindowsColor = "#FF0000".ToWindowsColor();
+    System.Drawing.Color redSystemColor = "#FF0000".ToSystemColor();
+
+    string redHex = redColor.ToHexString(); // or redSystemColor.ToHexString();
+}
+```
+
+**Note**, the `ToColor()` extension for HEX strings supported both RGB and ARGB formats, taking into consideration the transparency layer.
+
+### Convert Color to SolidColorBrush example
+
+```csharp
+private void ColorSolidColorBrushConversion()
+{
+    SolidColorBrush redBrush = Windows.UI.Colors.Red.ToSolidColorBrush(); // or System.Drawing.Color.Red.ToSolidColorBrush();
+}
+```
diff --git a/docs/articles/features/ui-view-management.md b/docs/articles/features/ui-view-management.md
new file mode 100644
index 0000000..2e6274e
--- /dev/null
+++ b/docs/articles/features/ui-view-management.md
@@ -0,0 +1,45 @@
+---
+uid: package-ui-view-management
+title: Using the UI View Management package
+---
+
+# Using the UI View Management package
+
+The UI View Management package is designed for improving how your applications can create and manage additional windows in Windows applications.
+
+## Creating a new application window with a Page type
+
+Windows application developers working with a navigation `Frame` will be aware of the ease of use for navigating your applications with `Page` object types.
+
+You can simply call `Navigate` passing a parameter object. So why shouldn't creating a new window follow the same way.
+
+The `WindowManager` helper class provides a `CreateNewWindowForPageAsync` method with multiple overloads with this exact capability.
+
+Below is an example of launching a new application window with a page type.
+
+```csharp
+private async Task LaunchNewWindow()
+{
+    await WindowManager.CreateNewWindowForPageAsync(typeof(MainPage), "ParameterObject");
+}
+```
+
+This example will launch a new Window with an initial page showing the `MainPage`, passing the string as a page navigation parameter.
+
+### Accessing the window's CoreDispatcher
+
+When a new window is launched using the `CreateNewWindowForPageAsync` methods, the view's `CoreDispatcher` instance will be registered with the `ViewCoreDispatcherManager` instance. 
+
+This can be accessed from anywhere in your application's executing code using the `ViewCoreDispatcherManager.Current.Get` method passing the identifier of the view.
+
+To keep an instance of the view ID associated with your page, when initializing your page class, you can retrieve the view ID using the following code.
+
+```csharp
+public MainPage()
+{
+    var view = ApplicationView.GetForCurrentView();
+    this.ViewId = view?.Id ?? -1;
+}
+
+public int ViewId { get; }
+```
diff --git a/docs/articles/features/ui.md b/docs/articles/features/ui.md
new file mode 100644
index 0000000..c667c36
--- /dev/null
+++ b/docs/articles/features/ui.md
@@ -0,0 +1,32 @@
+---
+uid: package-ui
+title: Using the UI package
+---
+
+# Using the UI package
+
+The UI package is a base package for building out UI components for native applications for Windows, Android, iOS, macOS, Linux, and the web.
+
+Its main purpose is to be used by the additional MADE Uno UI packages. However, it can be used to build your own custom UI elements for your own applications.
+
+## Building custom controls for Windows or Uno Platform applications
+
+The `MADE.UI.Controls.Control` is an extension to the [`Windows.UI.Xaml.Controls.Control`](https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.control) that provides additional base components to make it easier to build custom controls.
+
+For detail on building the custom control itself, we highly recommend these resources for information on building them.
+
+- [Nick's .NET Travels - How to create a XAML templated control](https://nicksnettravels.builttoroam.com/tutorial-how-to-create-a-xaml-templated-control/)
+
+With this base class, you get the following additional features to work with.
+
+### IsVisible property
+
+`IsVisible` is a boolean property that controls the `Visibility` state of the control.
+
+When updated, the `IsVisibleChanged` event is fired which can be used to handle additional functions when a control is shown or hidden.
+
+### GetChildView{TView} method
+
+`GetChildView{TView}(string)` is a method which sits on top of the `GetTemplateChild` method of the underlying `Control` class.
+
+The method simplifies the understanding and usability of retrieving child UI elements by retrieving your UI elements in the expected type.
diff --git a/docs/articles/intro.md b/docs/articles/intro.md
new file mode 100644
index 0000000..94a4f1e
--- /dev/null
+++ b/docs/articles/intro.md
@@ -0,0 +1,89 @@
+---
+uid: made-intro
+title: Getting Started
+---
+
+# Getting Started
+
+MADE Uno is a collection of components designed for building applications with the Uno Platform on Windows, Android, iOS, and WebAssembly.
+
+## Installation
+
+All packages listed below can be installed via NuGet or via the dotnet CLI by running the following command using a listed package name:
+
+```
+dotnet add package MADE.UI
+```
+
+### Available packages
+
+| Package | Version |
+| --- | --- |
+| MADE.UI | [![NuGet](https://img.shields.io/nuget/v/MADE.UI)](https://www.nuget.org/packages/MADE.UI/) |
+| MADE.UI.Controls.DropDownList | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Controls.DropDownList)](https://www.nuget.org/packages/MADE.UI.Controls.DropDownList/) |
+| MADE.UI.Controls.FilePicker | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Controls.FilePicker)](https://www.nuget.org/packages/MADE.UI.Controls.FilePicker/) |
+| MADE.UI.Controls.Validator | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Controls.Validator)](https://www.nuget.org/packages/MADE.UI.Controls.Validator/) |
+| MADE.UI.Styling | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.Styling)](https://www.nuget.org/packages/MADE.UI.Styling/) |
+| MADE.UI.ViewManagement | [![NuGet](https://img.shields.io/nuget/v/MADE.UI.ViewManagement)](https://www.nuget.org/packages/MADE.UI.ViewManagement/) |
+
+#### UI
+
+The UI package is a base library for building out great user experiences for applications built for Windows, Android, iOS, and the web. 
+
+Taking advantage of the Uno Platform, the UI packages provide extensible features such as:
+
+- Control, a base implementation on top of the XAML `Control` type with additional functionality such as `IsVisible` (to get and set the state of the control's visibility), and `GetChildView` (to find and retrieve a UI element which is a child of the element).
+- ContentControl, a base implementation on top of the XAML `ContentControl` type with additional functionality such as `IsVisible` (to get and set the state of the control's visibility), and `GetChildView` (to find and retrieve a UI element which is a child of the element).
+- ViewExtensions, a collection of extensions for manipulating XAML `UIElement` objects including `SetVisible` (to toggle the visible state of the element and child elements).
+
+
+
+[Discover UI](features/ui.md)
+
+
+
+#### UI.Controls.DropDownList
+
+The UI Controls DropDownList library contains a Windows UI element that provides a selection user experience, allowing a user to select one or multiple items from a list.
+
+The control works in a similar way to the `ComboBox` element in the Windows SDK, with the added extensibility to change modes to select multiple items.
+
+
+
+[Discover UI.Controls.DropDownList](features/ui-controls-dropdownlist.md)
+
+
+
+#### UI.Controls.FilePicker
+
+The UI Controls FilePicker library contains a cross-platform UI element that provides a web-like `` equivalent for native applications. 
+
+The control provides the capability to select one or multiple files of given types and show them within the UI.
+
+
+
+[Discover UI.Controls.FilePicker](features/ui-controls-filepicker.md)
+
+
+
+#### UI.Controls.Validator
+
+The UI Controls Validator library contains a cross-platform UI element that provides validation capabilities over any input element.
+
+Taking advantage of the Data Validation library, you can simply and easily setup input validation with error messaging for all input types, both built-in and custom, with minimal effort.
+
+
+
+[Discover UI.Controls.Validator](features/ui-controls-validator.md)
+
+
+
+#### UI.Styling
+
+The UI Styling library contains a collection of cross-platform UI styling components for improving the designing of applications.
+
+
+
+[Discover UI.Styling](features/ui-styling.md)
+
+
diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml
new file mode 100644
index 0000000..693f7e1
--- /dev/null
+++ b/docs/articles/toc.yml
@@ -0,0 +1,20 @@
+- name: Getting Started
+  topicHref: intro.md
+- name: Features
+  items:
+    - name: UI
+      items:
+        - name: Overview
+          href: features/ui.md
+        - name: Controls
+          items:
+            - name: DropDownList
+              href: features/ui-controls-dropdownlist.md
+            - name: FilePicker
+              href: features/ui-controls-filepicker.md
+            - name: Validator
+              href: features/ui-controls-validator.md
+        - name: Styling
+          href: features/ui-styling.md
+        - name: View Management
+          href: features/ui-view-management.md
diff --git a/docs/docfx.json b/docs/docfx.json
new file mode 100644
index 0000000..8496ba1
--- /dev/null
+++ b/docs/docfx.json
@@ -0,0 +1,82 @@
+{
+  "metadata": [
+    {
+      "src": [
+        {
+          "src": "../",
+          "files": [
+            "src/**.csproj"
+          ],
+          "exclude": [
+            "**/bin/**",
+            "**/obj/**",
+            "_site/**"
+          ]
+        }
+      ],
+      "dest": "api",
+      "disableGitFeatures": false,
+      "disableDefaultFilter": false,
+      "properties": {
+        "TargetFramework": "netstandard2.0"
+      }
+    }
+  ],
+  "build": {
+    "content": [
+      {
+        "files": [
+          "api/**.yml",
+          "api/index.md"
+        ]
+      },
+      {
+        "files": [
+          "articles/**.md",
+          "articles/**/toc.yml",
+          "toc.yml",
+          "*.md"
+        ]
+      }
+    ],
+    "resource": [
+      {
+        "files": [
+          "images/**"
+        ]
+      }
+    ],
+    "overwrite": [
+      {
+        "files": [
+          "apidoc/**.md"
+        ],
+        "exclude": [
+          "obj/**",
+          "_site/**"
+        ]
+      }
+    ],
+    "dest": "_site",
+    "globalMetadataFiles": [],
+    "fileMetadataFiles": [],
+    "template": [
+      "default",
+      "templates/material"
+    ],
+    "postProcessors": [],
+    "markdownEngineName": "markdig",
+    "noLangKeyword": false,
+    "keepFileLink": false,
+    "cleanupCacheHistory": false,
+    "disableGitFeatures": false,
+    "globalMetadata": {
+      "_appLogoPath": "images/Logo.png",
+      "_appFaviconPath": "images/Logo.png",
+      "_appTitle": "MADE Uno",
+      "_appFooter": "Copyright (c) MADE Apps",
+      "_enableSearch": true,
+      "_enableNewTab": true
+    }
+  }
+}
\ No newline at end of file
diff --git a/docs/images/FilePicker.png b/docs/images/FilePicker.png
new file mode 100644
index 0000000..6ba5bd3
Binary files /dev/null and b/docs/images/FilePicker.png differ
diff --git a/docs/images/FilePickerSample.png b/docs/images/FilePickerSample.png
new file mode 100644
index 0000000..e85613c
Binary files /dev/null and b/docs/images/FilePickerSample.png differ
diff --git a/docs/images/ImageBehavior.png b/docs/images/ImageBehavior.png
new file mode 100644
index 0000000..63fa46c
Binary files /dev/null and b/docs/images/ImageBehavior.png differ
diff --git a/docs/images/InputValidator.png b/docs/images/InputValidator.png
new file mode 100644
index 0000000..076b67b
Binary files /dev/null and b/docs/images/InputValidator.png differ
diff --git a/docs/images/Logo.png b/docs/images/Logo.png
new file mode 100644
index 0000000..8f44910
Binary files /dev/null and b/docs/images/Logo.png differ
diff --git a/docs/images/MultiSelectDropDownListCollapsed.png b/docs/images/MultiSelectDropDownListCollapsed.png
new file mode 100644
index 0000000..acfa051
Binary files /dev/null and b/docs/images/MultiSelectDropDownListCollapsed.png differ
diff --git a/docs/images/MultiSelectDropDownListExpanded.png b/docs/images/MultiSelectDropDownListExpanded.png
new file mode 100644
index 0000000..bfb9636
Binary files /dev/null and b/docs/images/MultiSelectDropDownListExpanded.png differ
diff --git a/docs/images/MultiWindow.png b/docs/images/MultiWindow.png
new file mode 100644
index 0000000..ccc8dc3
Binary files /dev/null and b/docs/images/MultiWindow.png differ
diff --git a/docs/images/ProjectBanner.png b/docs/images/ProjectBanner.png
new file mode 100644
index 0000000..554e4bc
Binary files /dev/null and b/docs/images/ProjectBanner.png differ
diff --git a/docs/images/icons/data.png b/docs/images/icons/data.png
new file mode 100644
index 0000000..f9f6e3d
Binary files /dev/null and b/docs/images/icons/data.png differ
diff --git a/docs/images/icons/github.png b/docs/images/icons/github.png
new file mode 100644
index 0000000..4845985
Binary files /dev/null and b/docs/images/icons/github.png differ
diff --git a/docs/images/icons/love.png b/docs/images/icons/love.png
new file mode 100644
index 0000000..090b6bf
Binary files /dev/null and b/docs/images/icons/love.png differ
diff --git a/docs/images/icons/model.png b/docs/images/icons/model.png
new file mode 100644
index 0000000..604336f
Binary files /dev/null and b/docs/images/icons/model.png differ
diff --git a/docs/images/icons/network.png b/docs/images/icons/network.png
new file mode 100644
index 0000000..7148e84
Binary files /dev/null and b/docs/images/icons/network.png differ
diff --git a/docs/images/icons/theme.png b/docs/images/icons/theme.png
new file mode 100644
index 0000000..59ad022
Binary files /dev/null and b/docs/images/icons/theme.png differ
diff --git a/docs/images/icons/validation.png b/docs/images/icons/validation.png
new file mode 100644
index 0000000..b5fb08b
Binary files /dev/null and b/docs/images/icons/validation.png differ
diff --git a/docs/images/icons/windows.png b/docs/images/icons/windows.png
new file mode 100644
index 0000000..f94daf2
Binary files /dev/null and b/docs/images/icons/windows.png differ
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..a8ac416
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,289 @@
+---
+uid: front-page
+title: Make App Development Easier
+---
+
+MADE project banner
+
+
+

+ Make app development easier with reusable code +

+ +
+ MADE Uno is a collection of components designed for building applications with the Uno Platform on Windows, Android, iOS, and WebAssembly. +
+ +
+ + +[Learn more](articles/intro.md) + + +
+ +
+ +
+ + Supports + +
+
+ +
+
+ + Windows + +
+
+ + UWP, WinUI + +
+
+
+
+
+ +
+
+ + Android + +
+
+ + 10.0+ + +
+
+
+
+
+ +
+
+ + iOS + +
+
+ + 10.0+ + +
+
+
+
+
+ +
+
+ + macOS + +
+
+ + Unified API + +
+
+
+
+
+ +
+
+ + Web + +
+
+ + WebAssembly (WASM) + +
+
+
+
+
+
+ + + +--- + +
+
+

+ UI Components +

+
+ MADE Uno provides a set of cross-platform UI components for Windows, WebAssembly, Android, iOS, macOS, and Linux. +
+
+
+ A File Picker UI component example on Windows +
+
+ +
+
+
+ A validation icon +

+ Get data validation in seconds +

+
+ MADE provides a lightweight, extensible data validation wrapper for input components in your applications +
+
+
+ A paintbrush icon +

+ Use the .NET Color you prefer +

+
+ Easy-to-use extensions for System.Drawing.Color and Windows.UI.Color to simplify the styling of your applications +
+
+
+
+
+ A windows icon +

+ Manage application windows +

+
+ Save time building multi-window applications with the WindowManager, designed to simplify the creation of new application windows +
+
+
+ A model icon +

+ Easy cross-platform page-to-page navigation +

+
+ Ease your approach to cross-platform page-to-page navigation using MADE's page navigation service built on top of the MVVM Toolkit +
+
+
+
+ +--- + +
+
+

+ MADE Uno is simple to install and it's easy to get started. +

+
+
+ + + +[Learn more](articles/intro.md) + + + +
+
+ +--- + +
+
+
+ Hands holding a heart icon +

+ Support MADE Uno +

+
+ If you'd like to support MADE Uno, considering donating to the project +
+ +
+
+
+
+ A GitHub icon +

+ Contribute on GitHub +

+
+ MADE Uno is open source and you can contribute on GitHub +
+
+
+
diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 0000000..ac86c37 --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,2389 @@ +{ + "name": "made-net-docs", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "made-net-docs", + "version": "1.0.0", + "devDependencies": { + "npm-watch": "^0.11.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-watch": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/npm-watch/-/npm-watch-0.11.0.tgz", + "integrity": "sha512-wAOd0moNX2kSA2FNvt8+7ORwYaJpQ1ZoWjUYdb1bBCxq4nkWuU0IiJa9VpVxrj5Ks+FGXQd62OC/Bjk0aSr+dg==", + "dev": true, + "dependencies": { + "nodemon": "^2.0.7", + "through2": "^4.0.2" + }, + "bin": { + "npm-watch": "cli.js" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "requires": { + "ini": "2.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "npm-watch": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/npm-watch/-/npm-watch-0.11.0.tgz", + "integrity": "sha512-wAOd0moNX2kSA2FNvt8+7ORwYaJpQ1ZoWjUYdb1bBCxq4nkWuU0IiJa9VpVxrj5Ks+FGXQd62OC/Bjk0aSr+dg==", + "dev": true, + "requires": { + "nodemon": "^2.0.7", + "through2": "^4.0.2" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..c5c083e --- /dev/null +++ b/docs/package.json @@ -0,0 +1,26 @@ +{ + "name": "made-net-docs", + "version": "1.0.0", + "scripts": { + "docfx": "npm-watch build_serve", + "build_serve": "docfx build .\\docfx.json --serve" + }, + "watch": { + "build_serve": { + "patterns": [ + "templates/**/*", + "api/**/*", + "articles/**/*", + "./*.md" + ], + "extensions": "md,yml,css,partial", + "quiet": true, + "legacyWatch": true, + "delay": 500, + "runOnChangeOnly": false + } + }, + "devDependencies": { + "npm-watch": "^0.11.0" + } +} \ No newline at end of file diff --git a/docs/templates/material/partials/head.tmpl.partial b/docs/templates/material/partials/head.tmpl.partial new file mode 100644 index 0000000..02298e3 --- /dev/null +++ b/docs/templates/material/partials/head.tmpl.partial @@ -0,0 +1,23 @@ +{{!Copyright (c) Oscar Vasquez. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} + + + + + {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} + + + + {{#_description}}{{/_description}} + + + + + + + + + + {{#_noindex}}{{/_noindex}} + {{#_enableSearch}}{{/_enableSearch}} + {{#_enableNewTab}}{{/_enableNewTab}} + \ No newline at end of file diff --git a/docs/templates/material/styles/main.css b/docs/templates/material/styles/main.css new file mode 100644 index 0000000..ceaad7a --- /dev/null +++ b/docs/templates/material/styles/main.css @@ -0,0 +1,493 @@ +/* COLOR VARIABLES*/ +:root { + --header-bg-color: #FF5259; + --header-ft-color: #fff; + --highlight-light: #FF9A9E; + --highlight-dark: #FF5259; + --accent-dim: #e0e0e0; + --accent-super-dim: #f3f3f3; + --font-color: #34393e; + --card-box-shadow: 0 1px 2px 0 rgba(61, 65, 68, 0.06), 0 1px 3px 1px rgba(61, 65, 68, 0.16); + --search-box-shadow: 0 1px 2px 0 rgba(41, 45, 48, 0.36), 0 1px 3px 1px rgba(41, 45, 48, 0.46); + --transition: 350ms; + --light-border: 1px solid rgba(0,0,0,.1); +} + +body { + color: var(--font-color); + font-family: "Roboto", sans-serif; + line-height: 1.5; + font-size: 16px; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + word-wrap: break-word; +} + +/* HIGHLIGHT COLOR */ + +button, +.button, +a { + color: var(--highlight-dark); + cursor: pointer; +} + +button:hover, +button:focus, +a:hover, +a:focus { + color: var(--highlight-light); + text-decoration: none; +} + +.toc .nav > li.active > a { + color: var(--highlight-dark); +} + +.toc .nav > li.active > a:hover, +.toc .nav > li.active > a:focus { + color: var(--highlight-light); +} + +.pagination > .active > a { + background-color: var(--header-bg-color); + border-color: var(--header-bg-color); +} + +.pagination > .active > a, +.pagination > .active > a:focus, +.pagination > .active > a:hover, +.pagination > .active > span, +.pagination > .active > span:focus, +.pagination > .active > span:hover { + background-color: var(--highlight-light); + border-color: var(--highlight-light); +} + +/* HEADINGS */ + +h1 { + font-weight: 600; + font-size: 32px; +} + +h2 { + font-weight: 600; + font-size: 24px; + line-height: 1.8; +} + +h3 { + font-weight: 600; + font-size: 20px; + line-height: 1.8; +} + +h5 { + font-size: 14px; + padding: 10px 0px; +} + +article h1, +article h2, +article h3, +article h4 { + margin-top: 35px; + margin-bottom: 15px; +} + +article h4 { + padding-bottom: 8px; + border-bottom: 2px solid #ddd; +} + +/* NAVBAR */ + +.navbar-brand > img { + color: var(--header-ft-color); +} + +.navbar { + border: none; + /* Both navbars use box-shadow */ + -webkit-box-shadow: var(--card-box-shadow); + -moz-box-shadow: var(--card-box-shadow); + box-shadow: var(--card-box-shadow); +} + +.subnav { + border-top: 1px solid #ddd; + background-color: #fff; +} + +.navbar-inverse { + background-color: var(--header-bg-color); + z-index: 100; +} + +.navbar-inverse .navbar-nav > li > a, +.navbar-inverse .navbar-text { + color: var(--header-ft-color); + background-color: var(--header-bg-color); + border-bottom: 3px solid transparent; + padding-bottom: 12px; + transition: 350ms; +} + +.navbar-inverse .navbar-nav > li > a:focus, +.navbar-inverse .navbar-nav > li > a:hover { + color: var(--header-ft-color); + background-color: var(--header-bg-color); + border-bottom: 3px solid white; +} + +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:focus, +.navbar-inverse .navbar-nav > .active > a:hover { + color: var(--header-ft-color); + background-color: var(--header-bg-color); + border-bottom: 3px solid white; +} + +.navbar-form .form-control { + border: 0; + border-radius: 4px; + box-shadow: var(--search-box-shadow); + transition:var(--transition); +} + +.navbar-form .form-control:hover { + background-color: var(--accent-dim); +} + +/* NAVBAR TOGGLED (small screens) */ + +.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { + border: none; +} +.navbar-inverse .navbar-toggle { + box-shadow: var(--card-box-shadow); + border: none; +} + +.navbar-inverse .navbar-toggle:focus, +.navbar-inverse .navbar-toggle:hover { + background-color: var(--highlight-dark); +} + +/* SIDEBAR */ + +.toc .level1 > li { + font-weight: 400; +} + +.toc .nav > li > a { + color: var(--font-color); +} + +.sidefilter { + background-color: #fff; + border-left: none; + border-right: none; +} + +.sidefilter { + background-color: #fff; + border-left: none; + border-right: none; +} + +.toc-filter { + padding: 5px; + margin: 0; + box-shadow: var(--card-box-shadow); + transition:var(--transition); +} + +.toc-filter:hover { + background-color: var(--accent-super-dim); +} + +.toc-filter > input { + border: none; + background-color: inherit; + transition: inherit; +} + +.toc-filter > .filter-icon { + display: none; +} + +.sidetoc > .toc { + background-color: #fff; + overflow-x: hidden; +} + +.sidetoc { + background-color: #fff; + border: none; +} + +/* ALERTS */ + +.alert { + padding: 0px 0px 5px 0px; + color: inherit; + background-color: inherit; + border: none; + box-shadow: var(--card-box-shadow); +} + +.alert > p { + margin-bottom: 0; + padding: 5px 10px; +} + +.alert > ul { + margin-bottom: 0; + padding: 5px 40px; +} + +.alert > h5 { + padding: 10px 15px; + margin-top: 0; + text-transform: uppercase; + font-weight: bold; + border-radius: 4px 4px 0 0; +} + +.alert-info > h5 { + color: #1976d2; + border-bottom: 4px solid #1976d2; + background-color: #e3f2fd; +} + +.alert-warning > h5 { + color: #f57f17; + border-bottom: 4px solid #f57f17; + background-color: #fff3e0; +} + +.alert-danger > h5 { + color: #d32f2f; + border-bottom: 4px solid #d32f2f; + background-color: #ffebee; +} + +/* CODE HIGHLIGHT */ +pre { + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + word-break: break-all; + word-wrap: break-word; + background-color: #fffaef; + border-radius: 4px; + border: none; + box-shadow: var(--card-box-shadow); +} + +/* STYLE FOR IMAGES */ + +.article .small-image { + margin-top: 15px; + box-shadow: var(--card-box-shadow); + max-width: 350px; +} + +.article .medium-image { + margin-top: 15px; + box-shadow: var(--card-box-shadow); + max-width: 550px; +} + +.article .large-image { + margin-top: 15px; + box-shadow: var(--card-box-shadow); + max-width: 700px; +} + +/* STYLE FOR BUTTONS */ + +.button { + display: inline-block; +} + +.button a { + display: inline-block; + padding: 12px 20px; + box-shadow: 0 2px 4px 0 rgba(31, 31, 31, 0.25); + border-radius: 3em; + transition: color 0.2s ease-in-out, + background-color 0.2s ease-in-out; +} + +.accent-button a { + background-color: var(--header-bg-color); + color: var(--header-ft-color); +} + +.sponsor-button .octicon { + vertical-align: text-top; + overflow: visible; + transition: transform .15s cubic-bezier(.2,0,.13,2); +} + +.text-pink { + color: #ea4aaa; +} + +.octicon { + display: inline-block; + fill: currentcolor; +} + +/* SITE STYLES */ + +hr { + margin-top: 0; + margin-bottom: 7rem; +} + +.article { + margin-top: 120px !important; +} + +.highlight-section { + max-width: 640px; + margin: 0 auto 8px; + display: block; +} + +.hero-layout { + text-align: center; +} + +.hero-image { + width: 100%; +} + +.hero-title { + font-size: 48px; + line-height: 52px; + margin-bottom: 1rem; +} + +.hero-subtitle { + font-size: 20px; + line-height: 32px; + margin-bottom: 1.5rem; +} + +.small-heading { + font-weight: 900; + letter-spacing: 0.35rem; + text-transform: uppercase; + font-size: 12px; + margin-bottom: 1rem; + display: block; +} + +.stat { + color: var(--font-color); + text-decoration: none; + padding: 0; + display: block; + margin-right: 8px; +} + +a.stat { + color: var(--header-bg-color); +} + +.stats-container > * { + flex: 1 1 0; + margin-bottom: 1.25rem; +} + +.stat-container { + text-align: left; + vertical-align: top; + border-radius: 4px; + padding: 0; +} + +.stat-header { + font-weight: 700; + font-size: 14px; + line-height: 16px; + margin-bottom: 2px; +} + +.stat-content { + color: var(--font-color); + font-size: 12px; + line-height: 14px; + clear: both; +} + +.md-header { + font-size: 32px; + line-height: 40px; + margin-bottom: 0.75rem; + font-weight: 800; +} + +.md-content { + font-size: 20px; + line-height: 32px; + color: var(--font-color); +} + +.sm-header { + font-size: 20px; + line-height: 24px; + margin-bottom: 0.5rem; +} + +.highlight-section .sm-header { + margin-top: 0; +} + +.sm-content { + font-size: 16px; + line-height: 1.5; + color: var(--font-color); +} + +.grid-item { + flex: 0 1 50%; + padding: 4rem 70px 4rem; +} + +.grid-item img { + max-height: 120px; + max-width: 120px; +} + +.grid-col { + margin: 0; + padding: 0; +} + +.home-row { + margin-bottom: 7rem; +} + +.home-row-centered-sm { + text-align: center; +} + +@media (min-width: 992px) { + .grid-border-bottom { + border-bottom: var(--light-border); + } + + .grid-border-right { + border-right: var(--light-border); + } + + .home-row-centered-sm { + text-align: unset; + } +} diff --git a/docs/toc.yml b/docs/toc.yml new file mode 100644 index 0000000..046f4b0 --- /dev/null +++ b/docs/toc.yml @@ -0,0 +1,5 @@ +- name: Docs + href: docs/ + homepage: articles/intro.md +- name: APIs + href: api/ \ No newline at end of file diff --git a/global.json b/global.json new file mode 100644 index 0000000..236e183 --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "msbuild-sdks": { + "MSBuild.Sdk.Extras": "3.0.44" + } +} \ No newline at end of file diff --git a/samples/.vsconfig b/samples/.vsconfig new file mode 100644 index 0000000..99c343c --- /dev/null +++ b/samples/.vsconfig @@ -0,0 +1,112 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Component.CoreEditor", + "Microsoft.VisualStudio.Workload.CoreEditor", + "Microsoft.NetCore.Component.Runtime.3.1", + "Microsoft.NetCore.Component.SDK", + "Microsoft.VisualStudio.Component.NuGet", + "Microsoft.Net.Component.4.6.1.TargetingPack", + "Microsoft.VisualStudio.Component.Roslyn.Compiler", + "Microsoft.VisualStudio.Component.Roslyn.LanguageServices", + "Microsoft.NetCore.Component.DevelopmentTools", + "Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions", + "Microsoft.VisualStudio.Component.DockerTools", + "Microsoft.NetCore.Component.Web", + "Microsoft.Net.Component.4.8.SDK", + "Microsoft.Net.Component.4.7.2.TargetingPack", + "Microsoft.Net.ComponentGroup.DevelopmentPrerequisites", + "Microsoft.VisualStudio.Component.TypeScript.4.0", + "Microsoft.VisualStudio.Component.JavaScript.TypeScript", + "Microsoft.VisualStudio.Component.JavaScript.Diagnostics", + "Microsoft.Component.MSBuild", + "Microsoft.VisualStudio.Component.TextTemplating", + "Component.Microsoft.VisualStudio.RazorExtension", + "Microsoft.VisualStudio.Component.IISExpress", + "Microsoft.VisualStudio.Component.SQL.ADAL", + "Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime", + "Microsoft.VisualStudio.Component.Common.Azure.Tools", + "Microsoft.VisualStudio.Component.SQL.CLR", + "Microsoft.VisualStudio.Component.MSODBC.SQL", + "Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils", + "Microsoft.VisualStudio.Component.ManagedDesktop.Core", + "Microsoft.Net.Component.4.5.2.TargetingPack", + "Microsoft.Net.Component.4.5.TargetingPack", + "Microsoft.VisualStudio.Component.SQL.SSDT", + "Microsoft.VisualStudio.Component.SQL.DataSources", + "Component.Microsoft.Web.LibraryManager", + "Microsoft.VisualStudio.ComponentGroup.Web", + "Microsoft.VisualStudio.Component.Web", + "Microsoft.VisualStudio.Component.IntelliCode", + "Component.Microsoft.VisualStudio.LiveShare", + "Microsoft.VisualStudio.ComponentGroup.Web.Client", + "Microsoft.Net.Component.4.TargetingPack", + "Microsoft.Net.Component.4.5.1.TargetingPack", + "Microsoft.Net.Component.4.6.TargetingPack", + "Microsoft.Net.ComponentGroup.TargetingPacks.Common", + "Component.Microsoft.VisualStudio.Web.AzureFunctions", + "Microsoft.VisualStudio.ComponentGroup.AzureFunctions", + "Microsoft.VisualStudio.Component.Azure.Compute.Emulator", + "Microsoft.VisualStudio.Component.Azure.Storage.Emulator", + "Microsoft.VisualStudio.Component.Azure.ClientLibs", + "Microsoft.VisualStudio.Component.Azure.AuthoringTools", + "Microsoft.VisualStudio.Component.CloudExplorer", + "Microsoft.VisualStudio.ComponentGroup.Web.CloudTools", + "Microsoft.VisualStudio.Component.DiagnosticTools", + "Microsoft.VisualStudio.Component.EntityFramework", + "Microsoft.VisualStudio.Component.AspNet45", + "Microsoft.VisualStudio.Component.AppInsights.Tools", + "Microsoft.VisualStudio.Component.WebDeploy", + "Microsoft.VisualStudio.Component.Wcf.Tooling", + "Microsoft.Net.Component.4.6.2.TargetingPack", + "Microsoft.Net.Component.4.7.TargetingPack", + "Microsoft.Net.Component.4.7.1.TargetingPack", + "Microsoft.VisualStudio.Workload.NetWeb", + "Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites", + "Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools", + "Microsoft.VisualStudio.Component.Azure.Waverton", + "Microsoft.Component.Azure.DataLake.Tools", + "Microsoft.VisualStudio.Component.Azure.Kubernetes.Tools", + "Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools", + "Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools", + "Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices", + "Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools", + "Microsoft.VisualStudio.Workload.Azure", + "Microsoft.VisualStudio.Component.VC.CoreIde", + "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", + "Microsoft.VisualStudio.Component.Graphics.Tools", + "Microsoft.VisualStudio.Component.Windows10SDK.19041", + "Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites", + "Microsoft.ComponentGroup.Blend", + "Microsoft.VisualStudio.Component.Debugger.JustInTime", + "Microsoft.VisualStudio.Component.PortableLibrary", + "Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Component.Windows10SDK.18362", + "Microsoft.VisualStudio.Component.Windows10SDK.17763", + "Microsoft.Component.NetFX.Native", + "Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard", + "Microsoft.VisualStudio.Component.Graphics", + "Microsoft.VisualStudio.ComponentGroup.UWP.Xamarin", + "Microsoft.VisualStudio.ComponentGroup.UWP.Support", + "Microsoft.VisualStudio.Component.VC.Tools.ARM64", + "Microsoft.VisualStudio.Component.UWP.VC.ARM64", + "Microsoft.VisualStudio.Component.VC.Tools.ARM", + "Microsoft.VisualStudio.ComponentGroup.UWP.VC", + "Microsoft.VisualStudio.Workload.Universal", + "Component.OpenJDK", + "Microsoft.VisualStudio.Component.MonoDebugger", + "Microsoft.VisualStudio.Component.Merq", + "Component.Xamarin.RemotedSimulator", + "Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine", + "Component.Xamarin", + "Component.Android.SDK28", + "Microsoft.VisualStudio.Workload.NetCrossPlat", + "Microsoft.VisualStudio.Workload.NetCoreTools", + "Microsoft.Net.Component.4.6.1.SDK", + "Microsoft.Net.Component.4.6.2.SDK", + "Microsoft.Net.Component.4.7.SDK", + "Microsoft.Net.Component.4.7.1.SDK", + "Microsoft.Net.Component.4.7.2.SDK" + ] +} diff --git a/samples/MADE.Samples/MADE.Samples.Droid/Assets/AboutAssets.txt b/samples/MADE.Samples/MADE.Samples.Droid/Assets/AboutAssets.txt new file mode 100644 index 0000000..ee39886 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Droid/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with you package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Droid/Assets/Fonts/uno-fluentui-assets.ttf b/samples/MADE.Samples/MADE.Samples.Droid/Assets/Fonts/uno-fluentui-assets.ttf new file mode 100644 index 0000000..fedc86f Binary files /dev/null and b/samples/MADE.Samples/MADE.Samples.Droid/Assets/Fonts/uno-fluentui-assets.ttf differ diff --git a/samples/MADE.Samples/MADE.Samples.Droid/MADE.Samples.Droid.csproj b/samples/MADE.Samples/MADE.Samples.Droid/MADE.Samples.Droid.csproj new file mode 100644 index 0000000..a6f14fe --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Droid/MADE.Samples.Droid.csproj @@ -0,0 +1,153 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {6D1F389A-9954-40C1-923D-254EEC7E7380} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + MADE.Samples.Droid + MADE.Samples.Droid + 512 + true + Resources\Resource.Designer.cs + true + Off + False + v10.0 + Properties\AndroidManifest.xml + True + ..\MADE.Samples.Shared\Strings + + + true + portable + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + True + None + + + portable + true + true + true + bin\Release\ + TRACE + prompt + 4 + False + SdkOnly + true + true + true + true + true + + + + + + + + + + + + + 7.1.2 + + + + + + + + + + + 5.0.2 + + + 2.1.0-uno.32 + + + 7.1.10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {774fd8d5-ccc1-4eed-aa14-f7069bfae5ce} + MADE.UI.Controls.FilePicker + + + {e2b20928-dae2-4a9c-bdaf-d787b4f48391} + MADE.UI.Controls.Validator + + + {f8d00106-0598-45e7-b92e-ef408249c02e} + MADE.UI.Styling + + + {442d1e25-ffd1-405d-a1fc-40cafcad190c} + MADE.UI.ViewManagement + + + {2b5c0bea-18d8-4b82-af64-ede15505e793} + MADE.UI.Views.Dialogs + + + {0ca60466-059c-42d3-9b68-6bbb75a75090} + MADE.UI.Views.Navigation.Mvvm + + + {99e31579-1168-4983-bced-e7853e33ef5b} + MADE.UI.Views.Navigation + + + {79afd8fc-7789-47b7-b808-26e03d0f1e05} + MADE.UI + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Droid/Main.cs b/samples/MADE.Samples/MADE.Samples.Droid/Main.cs new file mode 100644 index 0000000..80485e8 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Droid/Main.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using Com.Nostra13.Universalimageloader.Core; +using Windows.UI.Xaml.Media; + +namespace MADE.Samples.Droid +{ + [global::Android.App.ApplicationAttribute( + Label = "@string/ApplicationName", + LargeHeap = true, + HardwareAccelerated = true, + Theme = "@style/AppTheme" + )] + public class Application : Windows.UI.Xaml.NativeApplication + { + public Application(IntPtr javaReference, JniHandleOwnership transfer) + : base(() => new App(), javaReference, transfer) + { + ConfigureUniversalImageLoader(); + } + + private void ConfigureUniversalImageLoader() + { + // Create global configuration and initialize ImageLoader with this config + ImageLoaderConfiguration config = new ImageLoaderConfiguration + .Builder(Context) + .Build(); + + ImageLoader.Instance.Init(config); + + ImageSource.DefaultImageLoader = ImageLoader.Instance.LoadImageAsync; + } + } +} diff --git a/samples/MADE.Samples/MADE.Samples.Droid/MainActivity.cs b/samples/MADE.Samples/MADE.Samples.Droid/MainActivity.cs new file mode 100644 index 0000000..0068dd6 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Droid/MainActivity.cs @@ -0,0 +1,18 @@ +using Android.App; +using Android.Widget; +using Android.OS; +using Android.Content.PM; +using Android.Views; + +namespace MADE.Samples.Droid +{ + [Activity( + MainLauncher = true, + ConfigurationChanges = global::Uno.UI.ActivityHelper.AllConfigChanges, + WindowSoftInputMode = SoftInput.AdjustPan | SoftInput.StateHidden + )] + public class MainActivity : Windows.UI.Xaml.ApplicationActivity + { + } +} + diff --git a/samples/MADE.Samples/MADE.Samples.Droid/Properties/AndroidManifest.xml b/samples/MADE.Samples/MADE.Samples.Droid/Properties/AndroidManifest.xml new file mode 100644 index 0000000..680b738 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Droid/Properties/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/samples/MADE.Samples/MADE.Samples.Droid/Properties/AssemblyInfo.cs b/samples/MADE.Samples/MADE.Samples.Droid/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e001241 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Droid/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Android.App; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MADE.Samples.Droid")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MADE.Samples.Droid")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/MADE.Samples/MADE.Samples.Droid/Resources/AboutResources.txt b/samples/MADE.Samples/MADE.Samples.Droid/Resources/AboutResources.txt new file mode 100644 index 0000000..c2bca97 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Droid/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Droid/Resources/drawable/Icon.png b/samples/MADE.Samples/MADE.Samples.Droid/Resources/drawable/Icon.png new file mode 100644 index 0000000..8074c4c Binary files /dev/null and b/samples/MADE.Samples/MADE.Samples.Droid/Resources/drawable/Icon.png differ diff --git a/samples/MADE.Samples/MADE.Samples.Droid/Resources/values/Strings.xml b/samples/MADE.Samples/MADE.Samples.Droid/Resources/values/Strings.xml new file mode 100644 index 0000000..4920c84 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Droid/Resources/values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + MADE Sample Collection + diff --git a/samples/MADE.Samples/MADE.Samples.Droid/Resources/values/Styles.xml b/samples/MADE.Samples/MADE.Samples.Droid/Resources/values/Styles.xml new file mode 100644 index 0000000..d668a8e --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Droid/Resources/values/Styles.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/App.xaml b/samples/MADE.Samples/MADE.Samples.Shared/App.xaml new file mode 100644 index 0000000..a6d3413 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/App.xaml @@ -0,0 +1,7 @@ + + + diff --git a/samples/MADE.Samples/MADE.Samples.Shared/App.xaml.cs b/samples/MADE.Samples/MADE.Samples.Shared/App.xaml.cs new file mode 100644 index 0000000..c0c1358 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/App.xaml.cs @@ -0,0 +1,106 @@ +namespace MADE.Samples +{ + using System; + using CommunityToolkit.Mvvm.DependencyInjection; + using CommunityToolkit.Mvvm.Messaging; + using MADE.Diagnostics; + using MADE.Diagnostics.Logging; + using MADE.Samples.Features.Home.Pages; + using MADE.Samples.Infrastructure.ViewModels; + using MADE.UI.Views.Dialogs; + using MADE.UI.Views.Navigation; + using Microsoft.Extensions.DependencyInjection; + using Windows.ApplicationModel.Activation; + using Windows.UI.Xaml; + using Windows.UI.Xaml.Controls; + using Windows.UI.Xaml.Navigation; + + /// + /// Defines application-specific behavior to supplement the default Application class. + /// + public sealed partial class App : Application + { + private IServiceProvider serviceProvider; + + public App() + { + this.InitializeComponent(); + } + + public static IServiceProvider Services + { + get + { + IServiceProvider serviceProvider = ((App)Current).serviceProvider; + + if (serviceProvider is null) + { + throw new InvalidOperationException("Service provider is not initialized."); + } + + return serviceProvider; + } + } + + + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + this.Activate(e.PrelaunchActivated); + } + + private static IServiceProvider ConfigureServices(Frame rootFrame) + { + Ioc.Default.ConfigureServices( + new ServiceCollection() + .AddSingleton(provider => WeakReferenceMessenger.Default) + .AddSingleton(provider => new AppDialog(rootFrame.Dispatcher)) + .AddSingleton() + .AddSingleton() + .AddSingleton(provider => new NavigationService(rootFrame)) + .AddViewModels() + .BuildServiceProvider()); + + return Ioc.Default; + } + + private static void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new InvalidOperationException($"Failed to load page {e.SourcePageType.FullName}."); + } + + private void Activate(bool isPrelaunch) + { +#if NET5_0 && WINDOWS + var window = new Window(); + window.Activate(); +#else + Window window = Windows.UI.Xaml.Window.Current; +#endif + + if (!(window.Content is Frame rootFrame)) + { + rootFrame = new Frame(); + rootFrame.NavigationFailed += OnNavigationFailed; + + window.Content = rootFrame; + + this.serviceProvider = ConfigureServices(rootFrame); + + IAppDiagnostics diagnostics = this.serviceProvider.GetService(); + diagnostics?.StartRecordingDiagnosticsAsync(); + } + + Console.WriteLine($"Launching. IsPreLaunch: {isPrelaunch}. Content: {rootFrame.Content}"); + + if (!isPrelaunch) + { + if (rootFrame.Content is null) + { + rootFrame.Navigate(typeof(MainPage)); + } + + window.Activate(); + } + } + } +} diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Home/Pages/MainPage.xaml b/samples/MADE.Samples/MADE.Samples.Shared/Features/Home/Pages/MainPage.xaml new file mode 100644 index 0000000..62fd1a7 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Home/Pages/MainPage.xaml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Home/Pages/MainPage.xaml.cs b/samples/MADE.Samples/MADE.Samples.Shared/Features/Home/Pages/MainPage.xaml.cs new file mode 100644 index 0000000..e0927ab --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Home/Pages/MainPage.xaml.cs @@ -0,0 +1,17 @@ +namespace MADE.Samples.Features.Home.Pages +{ + using MADE.Samples.Features.Home.ViewModels; + using MADE.UI.Views.Navigation.Pages; + using Microsoft.Extensions.DependencyInjection; + + public sealed partial class MainPage : MvvmPage + { + public MainPage() + { + this.InitializeComponent(); + this.DataContext = App.Services.GetService(); + } + + public MainPageViewModel ViewModel => this.DataContext as MainPageViewModel; + } +} \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Home/ViewModels/MainPageViewModel.cs b/samples/MADE.Samples/MADE.Samples.Shared/Features/Home/ViewModels/MainPageViewModel.cs new file mode 100644 index 0000000..9fe86c7 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Home/ViewModels/MainPageViewModel.cs @@ -0,0 +1,80 @@ +namespace MADE.Samples.Features.Home.ViewModels +{ + using System.Collections.Generic; + using System.Linq; + using System.Windows.Input; + using CommunityToolkit.Mvvm.Input; + using CommunityToolkit.Mvvm.Messaging; + using MADE.Collections; + using MADE.Data.Validation.Extensions; + using MADE.Foundation.Platform; + using MADE.Samples.Features.Samples.Data; + using MADE.Samples.Features.Samples.Pages; + using MADE.UI.ViewManagement; + using MADE.UI.Views.Navigation; + using MADE.UI.Views.Navigation.ViewModels; + + public class MainPageViewModel : PageViewModel + { + public MainPageViewModel(INavigationService navigationService, IMessenger messenger) + : base(navigationService, messenger) + { + } + + public ICommand NavigateToSampleCommand => new RelayCommand(NavigateToSample); + + public ICollection SampleGroups { get; } = GetSampleGroups(); + + private static ICollection GetSampleGroups() + { + var controls = new SampleGroup + { + Name = "Controls", + Samples = + { + new Sample( + "FilePicker", + typeof(FilePickerPage), + "/Features/Samples/Assets/FilePicker/FilePicker.png"), + new Sample( + "InputValidator", + typeof(InputValidatorPage), + "/Features/Samples/Assets/InputValidator/InputValidator.png") + } + }; + + var helpers = new SampleGroup + { + Name = "Helpers", + Samples = + { + new Sample( + "AppDialog", + typeof(AppDialogPage), + "/Features/Samples/Assets/AppDialog/AppDialog.png") + } + }; + + if (PlatformApiHelper.IsTypeSupported(typeof(WindowManager))) + { + helpers.Samples.InsertAtPotentialIndex( + new Sample( + "WindowManager", + typeof(WindowManagerPage), + "/Features/Samples/Assets/WindowManager/WindowManager.png"), + (item, compare) => compare.Name.IsLessThanOrEqualTo(item.Name)); + } + + var list = new List { controls, helpers }; + + return list; + } + + public ICollection Samples => SampleGroups.SelectMany(x => x.Samples).ToList(); + + private void NavigateToSample(Sample sample) + { + NavigationService.NavigateTo(sample.Page); + } + } +} \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/AppDialog/AppDialog.png b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/AppDialog/AppDialog.png new file mode 100644 index 0000000..53001a4 Binary files /dev/null and b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/AppDialog/AppDialog.png differ diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/AppDialog/AppDialogCode.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/AppDialog/AppDialogCode.txt new file mode 100644 index 0000000..bff4b18 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/AppDialog/AppDialogCode.txt @@ -0,0 +1,25 @@ +private async Task ShowAppDialogAsync() +{ + // This can be registered globally in a service collection and made available through dependency injection. + IAppDialog appDialog = new AppDialog(this.Dispatcher); + + await appDialog.ShowAsync( + "Title", + "Message", + () => { Console.WriteLine("App dialog was dismissed!") }, + new DialogButton(DialogButtonType.Confirm) + { + Content = "Confirm", + InvokeAction = button => Console.WriteLine("App dialog confirm button clicked!") + }, + new DialogButton(DialogButtonType.Cancel) + { + Content = "Cancel", + InvokeAction = button => Console.WriteLine("App dialog cancel button clicked!") + }, + new DialogButton(DialogButtonType.Neutral) + { + Content = "Help", + InvokeAction = button => Console.WriteLine("App dialog help button clicked!") + }); +} \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/DropDownList/DropDownList.png b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/DropDownList/DropDownList.png new file mode 100644 index 0000000..69f9224 Binary files /dev/null and b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/DropDownList/DropDownList.png differ diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/FilePicker/FilePicker.png b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/FilePicker/FilePicker.png new file mode 100644 index 0000000..4a57c13 Binary files /dev/null and b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/FilePicker/FilePicker.png differ diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/FilePicker/FilePickerCode.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/FilePicker/FilePickerCode.txt new file mode 100644 index 0000000..03744c2 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/FilePicker/FilePickerCode.txt @@ -0,0 +1,4 @@ +public ObservableCollection FilePickerFiles { get; } = + new ObservableCollection(); + +public ICollection FilePickerTypes => new List { ".jpg" }; \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/FilePicker/FilePickerXaml.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/FilePicker/FilePickerXaml.txt new file mode 100644 index 0000000..c9da22a --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/FilePicker/FilePickerXaml.txt @@ -0,0 +1,21 @@ + + + + + + diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidator.png b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidator.png new file mode 100644 index 0000000..f90e68a Binary files /dev/null and b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidator.png differ diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorDatePickerCode.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorDatePickerCode.txt new file mode 100644 index 0000000..470e690 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorDatePickerCode.txt @@ -0,0 +1,7 @@ +public ValidatorCollection InputDateValidators { get; } = new ValidatorCollection { new RequiredValidator(), new BetweenValidator(DateTimeOffset.Now.AddDays(-7), DateTimeOffset.Now.AddDays(7)) }; + +public DateTimeOffset? InputDate +{ + get => inputDate; + set => this.SetProperty(ref inputDate, value); +} diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorDatePickerXaml.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorDatePickerXaml.txt new file mode 100644 index 0000000..488948a --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorDatePickerXaml.txt @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorTextBoxCode.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorTextBoxCode.txt new file mode 100644 index 0000000..29c3d29 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorTextBoxCode.txt @@ -0,0 +1,7 @@ +public ValidatorCollection InputTextValidators { get; } = new ValidatorCollection { new RequiredValidator(), new MaxLengthValidator(16) }; + +public string InputText +{ + get => inputText; + set => this.SetProperty(ref inputText, value); +} \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorTextBoxXaml.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorTextBoxXaml.txt new file mode 100644 index 0000000..10b229d --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorTextBoxXaml.txt @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/WindowManager/WindowManager.png b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/WindowManager/WindowManager.png new file mode 100644 index 0000000..469af74 Binary files /dev/null and b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/WindowManager/WindowManager.png differ diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/WindowManager/WindowManagerCode.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/WindowManager/WindowManagerCode.txt new file mode 100644 index 0000000..243202b --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/WindowManager/WindowManagerCode.txt @@ -0,0 +1,4 @@ +private async Task ShowNewWindowAsync() +{ + await WindowManager.CreateNewWindowForPageAsync(typeof(WindowManagerPage)); +} \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Data/Sample.cs b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Data/Sample.cs new file mode 100644 index 0000000..b569192 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Data/Sample.cs @@ -0,0 +1,24 @@ +namespace MADE.Samples.Features.Samples.Data +{ + using System; + + public class Sample + { + public Sample() + { + } + + public Sample(string name, Type page, string iconPath) + { + this.Name = name; + this.Page = page; + this.IconPath = iconPath; + } + + public string Name { get; set; } + + public string IconPath { get; set; } + + public Type Page { get; set; } + } +} \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Data/SampleGroup.cs b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Data/SampleGroup.cs new file mode 100644 index 0000000..c1514f7 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Data/SampleGroup.cs @@ -0,0 +1,11 @@ +namespace MADE.Samples.Features.Samples.Data +{ + using System.Collections.Generic; + + public class SampleGroup + { + public string Name { get; set; } + + public IList Samples { get; } = new List(); + } +} diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Pages/AppDialogPage.xaml b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Pages/AppDialogPage.xaml new file mode 100644 index 0000000..773c26f --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Pages/AppDialogPage.xaml @@ -0,0 +1,90 @@ + + + + + + + + + + +