STAR TREK PROBE - KEEN INVENTORY CONTROL / MODEL MAP v0.3
Generated: 2026-09-04T10:51:07.6967218-04:00
Game2: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2
Purpose: trace InventoryGrid / InventoryContainers / InventoryItemModel collection realization and refresh flow.
Streaming mode: each requested type is decompiled to C# and written incrementally; full-assembly IL is intentionally omitted.
ILSpy note: current ilspycmd -il output is assembly-wide even when -t is supplied; v0.2 accidentally repeated whole-assembly IL.

LOCATED TYPES:
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfiguration
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.IInventoryControl
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.IInventoryEffects
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItemEventArgs
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryPrimaryFilterType
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryPrimaryFilterViewModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll	Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.IInventoryFullnessProvider
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ITerminalInventory
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryFullnessModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModelStreamed
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryPermissionsValidator
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfiguration
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryValidators
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferData
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferData_Migrations
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferEvent
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferEvent_Migrations
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent
  C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll	Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryValidator

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.ComponentModel;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Interactivity;
using Avalonia.Layout;
using Avalonia.Markup.Xaml.MarkupExtensions;
using Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindings;
using Avalonia.Markup.Xaml.XamlIl.Runtime;
using Avalonia.Media;
using CompiledAvaloniaXaml;
using Keen.VRage.UI.AvaloniaInterface.Services;
using Keen.VRage.UI.Localization;
using Keen.VRage.UI.Shared.Extensions;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// Control for <see cref="T:Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel" />.
/// </summary>
[NeedsWindowStyles]
public class GridInventory : UserControl, IInventoryControl
{
	private class DynamicSetters_1203
	{
		public static void DynamicSetter_1(TextBlock P_0, object P_1)
		{
			if (P_1 is UnsetValueType)
			{
				P_0.SetValue(TextBlock.TextProperty, AvaloniaProperty.UnsetValue);
				return;
			}
			if (P_1 is IBinding)
			{
				IBinding binding = (IBinding)P_1;
				P_0.Bind(TextBlock.TextProperty, binding);
				return;
			}
			if (P_1 is string)
			{
				P_0.Text = (string?)P_1;
				return;
			}
			if (P_1 == null)
			{
				P_0.Text = (string?)P_1;
				return;
			}
			throw new InvalidCastException();
		}

		public static void DynamicSetter_2(StyledElement P_0, CompiledBindingExtension P_1)
		{
			if (P_1 != null)
			{
				IBinding binding = P_1;
				P_0.Bind(StyledElement.DataContextProperty, binding);
			}
			else
			{
				P_0.DataContext = P_1;
			}
		}
	}

	private TerminalScreenViewModel? _terminalScreenViewModel;

	private static Action<object> !XamlIlPopulateOverride;

	public GridInventory()
	{
		InitializeComponent();
	}

	protected override void OnLoaded(RoutedEventArgs e)
	{
		base.OnLoaded(e);
		_terminalScreenViewModel = this.FindParentOfType<TerminalScreen>()?.DataContext as TerminalScreenViewModel;
		AddHandler(InventoryItem.ActionEventProperty, OnActionHappen);
	}

	protected override void OnUnloaded(RoutedEventArgs e)
	{
		base.OnUnloaded(e);
		_terminalScreenViewModel = null;
		RemoveHandler(InventoryItem.ActionEventProperty, OnActionHappen);
	}

	private async void OnActionHappen(object? sender, InventoryItemEventArgs e)
	{
		TerminalScreenViewModel terminalScreenViewModel = _terminalScreenViewModel;
		if (terminalScreenViewModel != null)
		{
			if (e.Type == EventType.DoubleClick)
			{
				await terminalScreenViewModel.QuickTransferItemAsync(e.Item);
			}
			else if (e.Type == EventType.RightClick)
			{
				await terminalScreenViewModel.DropItemAsync(e.Item);
			}
		}
	}

	/// <summary>
	/// Wires up the controls and optionally loads XAML markup and attaches dev tools (if Avalonia.Diagnostics package is referenced).
	/// </summary>
	/// <param name="loadXaml">Should the XAML be loaded into the component.</param>
	public void InitializeComponent(bool loadXaml = true)
	{
		if (loadXaml)
		{
			!XamlIlPopulateTrampoline(this);
		}
	}

	static void !XamlIlPopulate(IServiceProvider P_0, GridInventory P_1)
	{
		CompiledAvaloniaXaml.XamlIlContext.Context<GridInventory> context = new CompiledAvaloniaXaml.XamlIlContext.Context<GridInventory>(P_0, new object[1] { !AvaloniaResources.NamespaceInfo:/UI/TerminalScreen/Inventory/GridInventory.axaml.Singleton }, "avares://Game2.Client/UI/TerminalScreen/Inventory/GridInventory.axaml");
		context.RootObject = P_1;
		context.IntermediateRoot = P_1;
		((ISupportInitialize)P_1).BeginInit();
		context.PushParent(P_1);
		Grid grid2;
		Grid grid = (grid2 = new Grid());
		((ISupportInitialize)grid).BeginInit();
		P_1.Content = grid;
		Grid grid4;
		Grid grid3 = (grid4 = grid2);
		context.PushParent(grid4);
		Grid grid5 = grid4;
		grid5.HorizontalAlignment = HorizontalAlignment.Stretch;
		grid5.VerticalAlignment = VerticalAlignment.Stretch;
		Controls children = grid5.Children;
		TextBlock textBlock2;
		TextBlock textBlock = (textBlock2 = new TextBlock());
		((ISupportInitialize)textBlock).BeginInit();
		children.Add(textBlock);
		TextBlock textBlock4;
		TextBlock textBlock3 = (textBlock4 = textBlock2);
		context.PushParent(textBlock4);
		Grid.SetColumn(textBlock4, 0);
		Grid.SetRow(textBlock4, 0);
		textBlock4.Classes.Add("SubTitle");
		textBlock4.HorizontalAlignment = HorizontalAlignment.Center;
		textBlock4.VerticalAlignment = VerticalAlignment.Center;
		textBlock4.TextAlignment = TextAlignment.Center;
		StyledProperty<bool> isVisibleProperty = Visual.IsVisibleProperty;
		CompiledBindingExtension compiledBindingExtension = new CompiledBindingExtension(new CompiledBindingPathBuilder().Not().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel,Game2.Client.HasValidConnection!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
		context.ProvideTargetProperty = Visual.IsVisibleProperty;
		CompiledBindingExtension binding = compiledBindingExtension.ProvideValue(context);
		context.ProvideTargetProperty = null;
		textBlock4.Bind(isVisibleProperty, binding);
		LocExtension obj = new LocExtension
		{
			TextKey = "TerminalScreenNoConnectionToGrid"
		};
		context.ProvideTargetProperty = TextBlock.TextProperty;
		object obj2 = obj.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1203.DynamicSetter_1(textBlock4, obj2);
		context.PopParent();
		((ISupportInitialize)textBlock3).EndInit();
		Controls children2 = grid5.Children;
		Grid grid7;
		Grid grid6 = (grid7 = new Grid());
		((ISupportInitialize)grid6).BeginInit();
		children2.Add(grid6);
		Grid grid8 = (grid4 = grid7);
		context.PushParent(grid4);
		Grid grid9 = grid4;
		Grid.SetColumn(grid9, 0);
		Grid.SetRow(grid9, 0);
		ColumnDefinitions columnDefinitions = new ColumnDefinitions();
		columnDefinitions.Capacity = 3;
		columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
		columnDefinitions.Add(new ColumnDefinition(new GridLength(50.0, GridUnitType.Pixel)));
		columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
		grid9.ColumnDefinitions = columnDefinitions;
		StyledProperty<bool> isVisibleProperty2 = Visual.IsVisibleProperty;
		CompiledBindingExtension compiledBindingExtension2 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel,Game2.Client.HasValidConnection!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
		context.ProvideTargetProperty = Visual.IsVisibleProperty;
		CompiledBindingExtension binding2 = compiledBindingExtension2.ProvideValue(context);
		context.ProvideTargetProperty = null;
		grid9.Bind(isVisibleProperty2, binding2);
		Controls children3 = grid9.Children;
		InventoryList inventoryList2;
		InventoryList inventoryList = (inventoryList2 = new InventoryList());
		((ISupportInitialize)inventoryList).BeginInit();
		children3.Add(inventoryList);
		InventoryList inventoryList4;
		InventoryList inventoryList3 = (inventoryList4 = inventoryList2);
		context.PushParent(inventoryList4);
		InventoryList inventoryList5 = inventoryList4;
		Grid.SetColumn(inventoryList5, 0);
		inventoryList5.Width = 877.0;
		CompiledBindingExtension compiledBindingExtension3 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel,Game2.Client.LeftInventory!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
		context.ProvideTargetProperty = StyledElement.DataContextProperty;
		CompiledBindingExtension compiledBindingExtension4 = compiledBindingExtension3.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1203.DynamicSetter_2(inventoryList5, compiledBindingExtension4);
		context.PopParent();
		((ISupportInitialize)inventoryList3).EndInit();
		Controls children4 = grid9.Children;
		InventoryList inventoryList7;
		InventoryList inventoryList6 = (inventoryList7 = new InventoryList());
		((ISupportInitialize)inventoryList6).BeginInit();
		children4.Add(inventoryList6);
		InventoryList inventoryList8 = (inventoryList4 = inventoryList7);
		context.PushParent(inventoryList4);
		InventoryList inventoryList9 = inventoryList4;
		Grid.SetColumn(inventoryList9, 2);
		inventoryList9.Width = 877.0;
		CompiledBindingExtension compiledBindingExtension5 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel,Game2.Client.RightInventory!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
		context.ProvideTargetProperty = StyledElement.DataContextProperty;
		CompiledBindingExtension compiledBindingExtension6 = compiledBindingExtension5.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1203.DynamicSetter_2(inventoryList9, compiledBindingExtension6);
		context.PopParent();
		((ISupportInitialize)inventoryList8).EndInit();
		context.PopParent();
		((ISupportInitialize)grid8).EndInit();
		context.PopParent();
		((ISupportInitialize)grid3).EndInit();
		context.PopParent();
		((ISupportInitialize)P_1).EndInit();
		if (P_1 is StyledElement styled)
		{
			NameScope.SetNameScope(styled, context.AvaloniaNameScope);
		}
		context.AvaloniaNameScope.Complete();
	}

	private static void !XamlIlPopulateTrampoline(GridInventory P_0)
	{
		if (!XamlIlPopulateOverride != null)
		{
			!XamlIlPopulateOverride(P_0);
		}
		else
		{
			!XamlIlPopulate(XamlIlRuntimeHelpers.CreateRootServiceProviderV3(null), P_0);
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfiguration
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Binary;
using Keen.VRage.Library.Serialization.Json;
using Keen.VRage.Library.Serialization.ObjectBuilders;
using Keen.VRage.Library.Serialization.Serializers;
using Keen.VRage.Library.Serialization.Validation;
using Keen.VRage.Library.Utils;
using Keen.VRage.Library.Utils.Cloning;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// Configuration for grid inventory screen.
/// </summary>
[Cloneable]
[DoNotValidateMembers(new string[]
{
	"AllInventoriesKey", "AllConnectedInventoriesKey", "NoneFilterKey", "AllSourcesKey", "CharacterSourceKey", "CharacterInventoryKey", "FilteredInventoryKey", "FullInventoryKey", "InventoryMissingKey", "ToggleShowEmptyKey",
	"ToggleHideEmptyKey", "ShowConnectedInventoriesOnlyKey", "ShowAllInventoriesKey", "DisabledInventoryTooltip"
})]
public class GridInventoryConfiguration : Configuration, ISerializable<GridInventoryConfiguration>, ISerializable, IObjectBuilderInitializable<GridInventoryConfigurationObjectBuilder>, IObjectBuilderInitializable, IDeepCloneable<GridInventoryConfiguration>, IAccessible
{
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public new class Serializer : ObjectBuilderInitializer<GridInventoryConfiguration, GridInventoryConfigurationObjectBuilder>, INamedObjectSerializer<GridInventoryConfiguration>, INamedObjectSerializer, ISerializer
	{
		/// <inheritdoc />
		public new static readonly Serializer Instance = new Serializer();

		/// <inheritdoc />
		ISerializer<GridInventoryConfiguration> INamedObjectSerializer<GridInventoryConfiguration>.NameSerializer => ImmutableSingleton<NameProxySerializer<GridInventoryConfiguration, Guid>>.Instance;

		/// <inheritdoc />
		ISerializer INamedObjectSerializer.NameSerializer => ImmutableSingleton<NameProxySerializer<GridInventoryConfiguration, Guid>>.Instance;

		/// <inheritdoc />
		Type INamedObjectSerializer.NameType => typeof(Guid);

		/// <inheritdoc />
		bool INamedObjectSerializer<GridInventoryConfiguration>.ShouldSerializeAsName(SerializationContext context, in GridInventoryConfiguration value)
		{
			return ((ISerializableNamedObject<Guid>)value).ShouldSerializeAsName(context);
		}

		/// <inheritdoc />
		bool INamedObjectSerializer.ShouldSerializeAsName(SerializationContext context, in object value)
		{
			return ((INamedObjectSerializer<GridInventoryConfiguration>)this).ShouldSerializeAsName(context, (GridInventoryConfiguration)value);
		}
	}

	private class Cloner : IDeepCloner<GridInventoryConfiguration>, IDeepCloner
	{
		GridInventoryConfiguration IDeepCloner<GridInventoryConfiguration>.Clone(GridInventoryConfiguration value, ref CloningContext context)
		{
			if (((ICloneableNamedObject)value).UseShallowCopy(ref context))
			{
				return value;
			}
			ref GridInventoryConfiguration reference = ref context.ClonedOrNullRef(value);
			if (!Unsafe.IsNullRef(in reference))
			{
				return reference;
			}
			return new GridInventoryConfiguration(in value, ref context);
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public new class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 26;

		static TypeInfoHolder()
		{
			int num = 11;
			RawAccessors = new(string, IMemberAccessor)[14]
			{
				("AllInventoriesKey", AllInventoriesKeyAccessor()),
				("AllConnectedInventoriesKey", AllConnectedInventoriesKeyAccessor()),
				("NoneFilterKey", NoneFilterKeyAccessor()),
				("AllSourcesKey", AllSourcesKeyAccessor()),
				("CharacterSourceKey", CharacterSourceKeyAccessor()),
				("CharacterInventoryKey", CharacterInventoryKeyAccessor()),
				("FilteredInventoryKey", FilteredInventoryKeyAccessor()),
				("FullInventoryKey", FullInventoryKeyAccessor()),
				("InventoryMissingKey", InventoryMissingKeyAccessor()),
				("ToggleShowEmptyKey", ToggleShowEmptyKeyAccessor()),
				("ToggleHideEmptyKey", ToggleHideEmptyKeyAccessor()),
				("ShowConnectedInventoriesOnlyKey", ShowConnectedInventoriesOnlyKeyAccessor()),
				("ShowAllInventoriesKey", ShowAllInventoriesKeyAccessor()),
				("DisabledInventoryTooltip", DisabledInventoryTooltipAccessor())
			};
			string documentation = "Configuration for grid inventory screen.";
			MemberInfo[] array = new MemberInfo[15]
			{
				typeof(GridInventoryConfiguration).GetProperty("AllInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("AllConnectedInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("NoneFilterKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("AllSourcesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("CharacterSourceKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("CharacterInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("FilteredInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("FullInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("InventoryMissingKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("ToggleShowEmptyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("ToggleHideEmptyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("ShowConnectedInventoriesOnlyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("ShowAllInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetProperty("DisabledInventoryTooltip", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfiguration).GetMethod("Init", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(GridInventoryConfigurationObjectBuilder) }, null)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					"Lockey for \"All Inventories\" secondary filter"
				},
				{
					array[1],
					"Lockey for the \"All connected inventories\" secondary filter"
				},
				{
					array[2],
					"Lockey for the \"None\" inventory source"
				},
				{
					array[3],
					"Lockey for the \"Character + Grids\" inventory source"
				},
				{
					array[4],
					"Lockey for the \"Character + Grids\" inventory source"
				},
				{
					array[5],
					"Lockey for the character inventory tag."
				},
				{
					array[6],
					"Lockey indicating no accepting inventory was found on drop target"
				},
				{
					array[7],
					"Lockey indicating no empty inventory was found on drop target"
				},
				{
					array[8],
					"Lockey indicating no inventory was found"
				},
				{
					array[9],
					"Lockey for show empty filter"
				},
				{
					array[10],
					"Lockey for hide empty filter"
				},
				{
					array[11],
					"Lockey for show empty filter"
				},
				{
					array[12],
					"Lockey for hide empty filter"
				},
				{
					array[13],
					"A tooltip key for the not-connected /not accessible inventories"
				},
				{
					array[14],
					null
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					ListReader<Attribute>.Empty
				},
				{
					array[4],
					ListReader<Attribute>.Empty
				},
				{
					array[5],
					ListReader<Attribute>.Empty
				},
				{
					array[6],
					ListReader<Attribute>.Empty
				},
				{
					array[7],
					ListReader<Attribute>.Empty
				},
				{
					array[8],
					ListReader<Attribute>.Empty
				},
				{
					array[9],
					ListReader<Attribute>.Empty
				},
				{
					array[10],
					ListReader<Attribute>.Empty
				},
				{
					array[11],
					ListReader<Attribute>.Empty
				},
				{
					array[12],
					ListReader<Attribute>.Empty
				},
				{
					array[13],
					ListReader<Attribute>.Empty
				},
				{
					array[14],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				},
				{
					array[4],
					num + 4
				},
				{
					array[5],
					num + 5
				},
				{
					array[6],
					num + 6
				},
				{
					array[7],
					num + 7
				},
				{
					array[8],
					num + 8
				},
				{
					array[9],
					num + 9
				},
				{
					array[10],
					num + 10
				},
				{
					array[11],
					num + 11
				},
				{
					array[12],
					num + 12
				},
				{
					array[13],
					num + 13
				},
				{
					array[14],
					num + 14
				}
			});
			RawAccessors = Configuration.TypeInfoHolder.RawAccessors.Concat<(string, IMemberAccessor)>(RawAccessors).ToArray();
			builder.AddRange(Configuration.TypeInfoHolder.Value.MembersDocumentation);
			builder3.AddRange(Configuration.TypeInfoHolder.Value.MembersDeclarationOrder);
			builder2.AddRange(Configuration.TypeInfoHolder.Value.MembersAttributes);
			Value = new AccessibleTypeInfo(typeof(GridInventoryConfiguration), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor AllInventoriesKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("AllInventoriesKey", "AllInventoriesKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("AllInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.AllInventoriesKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.AllInventoriesKey = value;
			}, null);
		}

		private static IMemberAccessor AllConnectedInventoriesKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("AllConnectedInventoriesKey", "AllConnectedInventoriesKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("AllConnectedInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.AllConnectedInventoriesKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.AllConnectedInventoriesKey = value;
			}, null);
		}

		private static IMemberAccessor NoneFilterKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("NoneFilterKey", "NoneFilterKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("NoneFilterKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.NoneFilterKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.NoneFilterKey = value;
			}, null);
		}

		private static IMemberAccessor AllSourcesKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("AllSourcesKey", "AllSourcesKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("AllSourcesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.AllSourcesKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.AllSourcesKey = value;
			}, null);
		}

		private static IMemberAccessor CharacterSourceKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("CharacterSourceKey", "CharacterSourceKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("CharacterSourceKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.CharacterSourceKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.CharacterSourceKey = value;
			}, null);
		}

		private static IMemberAccessor CharacterInventoryKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("CharacterInventoryKey", "CharacterInventoryKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("CharacterInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.CharacterInventoryKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.CharacterInventoryKey = value;
			}, null);
		}

		private static IMemberAccessor FilteredInventoryKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("FilteredInventoryKey", "FilteredInventoryKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("FilteredInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.FilteredInventoryKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.FilteredInventoryKey = value;
			}, null);
		}

		private static IMemberAccessor FullInventoryKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("FullInventoryKey", "FullInventoryKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("FullInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.FullInventoryKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.FullInventoryKey = value;
			}, null);
		}

		private static IMemberAccessor InventoryMissingKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("InventoryMissingKey", "InventoryMissingKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("InventoryMissingKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.InventoryMissingKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.InventoryMissingKey = value;
			}, null);
		}

		private static IMemberAccessor ToggleShowEmptyKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("ToggleShowEmptyKey", "ToggleShowEmptyKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("ToggleShowEmptyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.ToggleShowEmptyKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.ToggleShowEmptyKey = value;
			}, null);
		}

		private static IMemberAccessor ToggleHideEmptyKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("ToggleHideEmptyKey", "ToggleHideEmptyKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("ToggleHideEmptyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.ToggleHideEmptyKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.ToggleHideEmptyKey = value;
			}, null);
		}

		private static IMemberAccessor ShowConnectedInventoriesOnlyKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("ShowConnectedInventoriesOnlyKey", "ShowConnectedInventoriesOnlyKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("ShowConnectedInventoriesOnlyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.ShowConnectedInventoriesOnlyKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.ShowConnectedInventoriesOnlyKey = value;
			}, null);
		}

		private static IMemberAccessor ShowAllInventoriesKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("ShowAllInventoriesKey", "ShowAllInventoriesKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("ShowAllInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.ShowAllInventoriesKey, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.ShowAllInventoriesKey = value;
			}, null);
		}

		private static IMemberAccessor DisabledInventoryTooltipAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfiguration, LocKey>("DisabledInventoryTooltip", "DisabledInventoryTooltip", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfiguration).GetProperty("DisabledInventoryTooltip", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfiguration instance) => instance.DisabledInventoryTooltip, delegate(GridInventoryConfiguration instance, in LocKey value)
			{
				instance.DisabledInventoryTooltip = value;
			}, null);
		}
	}

	/// <summary>
	/// Lockey for "All Inventories" secondary filter
	/// </summary>
	public LocKey AllInventoriesKey { get; private set; } = LocKey.FromString("AllInventories");

	/// <summary>
	/// Lockey for the "All connected inventories" secondary filter
	/// </summary>
	public LocKey AllConnectedInventoriesKey { get; private set; } = LocKey.FromString("AllConnectedInventories");

	/// <summary>
	/// Lockey for the "None" inventory source
	/// </summary>
	public LocKey NoneFilterKey { get; private set; } = LocKey.FromString("InventorySourceNone");

	/// <summary>
	/// Lockey for the "Character + Grids" inventory source
	/// </summary>
	public LocKey AllSourcesKey { get; private set; } = LocKey.FromString("InventorySourceAll");

	/// <summary>
	/// Lockey for the "Character + Grids" inventory source
	/// </summary>
	public LocKey CharacterSourceKey { get; private set; } = LocKey.FromString("CharacterFilter");

	/// <summary>
	/// Lockey for the character inventory tag.
	/// </summary>
	public LocKey CharacterInventoryKey { get; private set; } = LocKey.FromString("CharacterInventory");

	/// <summary>
	/// Lockey indicating no accepting inventory was found on drop target
	/// </summary>
	public LocKey FilteredInventoryKey { get; private set; } = LocKey.FromString("InventoryFiltered");

	/// <summary>
	/// Lockey indicating no empty inventory was found on drop target
	/// </summary>
	public LocKey FullInventoryKey { get; private set; } = LocKey.FromString("InventoryFull");

	/// <summary>
	/// Lockey indicating no inventory was found
	/// </summary>
	public LocKey InventoryMissingKey { get; private set; } = LocKey.FromString("InventoryMissing");

	/// <summary>
	/// Lockey for show empty filter
	/// </summary>
	public LocKey ToggleShowEmptyKey { get; private set; } = LocKey.FromString("InventoryToggleShowEmpty");

	/// <summary>
	/// Lockey for hide empty filter
	/// </summary>
	public LocKey ToggleHideEmptyKey { get; private set; } = LocKey.FromString("InventoryToggleHideEmpty");

	/// <summary>
	/// Lockey for show empty filter
	/// </summary>
	public LocKey ShowConnectedInventoriesOnlyKey { get; private set; } = LocKey.FromString("ShowConnectedInventoriesOnly");

	/// <summary>
	/// Lockey for hide empty filter
	/// </summary>
	public LocKey ShowAllInventoriesKey { get; private set; } = LocKey.FromString("ShowAllInventories");

	/// <summary>
	/// A tooltip key for the not-connected /not accessible inventories
	/// </summary>
	public LocKey DisabledInventoryTooltip { get; private set; } = LocKey.FromString("InventoryDisabledTooltip");

	unsafe static BuildableTypeInfo IObjectBuilderInitializable.BuildableInfo
	{
		get
		{
			return new BuildableTypeInfo
			{
				ObjectType = typeof(GridInventoryConfiguration),
				BuilderType = typeof(GridInventoryConfigurationObjectBuilder),
				InitMethod = &Init
			};
			static void Init(object instance, IObjectBuilder builder, ObjectBuilderLoadingContext? context)
			{
				Unsafe.As<GridInventoryConfiguration>(instance).Init(Unsafe.As<GridInventoryConfigurationObjectBuilder>(builder));
			}
		}
	}

	/// <inheritdoc />
	static ISerializer<GridInventoryConfiguration> ISerializable<GridInventoryConfiguration>.Serializer => Serializer.Instance;

	static IDeepCloner<GridInventoryConfiguration> IDeepCloneable<GridInventoryConfiguration>.Cloner { get; } = new Cloner();

	/// <inheritdoc />
	public new static IStreamSerializer<GridInventoryConfiguration> GetStreamSerializer(SerializerFormat format)
	{
		return format switch
		{
			SerializerFormat.Binary => ImmutableSingleton<BinaryStreamSerializer<GridInventoryConfiguration>>.Instance, 
			SerializerFormat.Json => ImmutableSingleton<JsonStreamSerializer<GridInventoryConfiguration>>.Instance, 
		};
	}

	public void Init(GridInventoryConfigurationObjectBuilder builder)
	{
		Init((ConfigurationObjectBuilder)builder);
		AllInventoriesKey = builder.AllInventoriesKey;
		AllConnectedInventoriesKey = builder.AllConnectedInventoriesKey;
		NoneFilterKey = builder.NoneFilterKey;
		AllSourcesKey = builder.AllSourcesKey;
		CharacterSourceKey = builder.CharacterSourceKey;
		CharacterInventoryKey = builder.CharacterInventoryKey;
		FilteredInventoryKey = builder.FilteredInventoryKey;
		FullInventoryKey = builder.FullInventoryKey;
		InventoryMissingKey = builder.InventoryMissingKey;
		ToggleShowEmptyKey = builder.ToggleShowEmptyKey;
		ToggleHideEmptyKey = builder.ToggleHideEmptyKey;
		ShowConnectedInventoriesOnlyKey = builder.ShowConnectedInventoriesOnlyKey;
		ShowAllInventoriesKey = builder.ShowAllInventoriesKey;
		DisabledInventoryTooltip = builder.DisabledInventoryTooltip;
	}

	public GridInventoryConfiguration()
	{
	}

	[SetsRequiredMembers]
	protected GridInventoryConfiguration(in GridInventoryConfiguration instance, ref CloningContext context)
		: base((Configuration)instance, ref context)
	{
		ref GridInventoryConfiguration reference = ref context.ClonedOrNewRef(instance, out var exists);
		if (!exists)
		{
			reference = this;
		}
		AllInventoriesKey = instance.AllInventoriesKey;
		AllConnectedInventoriesKey = instance.AllConnectedInventoriesKey;
		NoneFilterKey = instance.NoneFilterKey;
		AllSourcesKey = instance.AllSourcesKey;
		CharacterSourceKey = instance.CharacterSourceKey;
		CharacterInventoryKey = instance.CharacterInventoryKey;
		FilteredInventoryKey = instance.FilteredInventoryKey;
		FullInventoryKey = instance.FullInventoryKey;
		InventoryMissingKey = instance.InventoryMissingKey;
		ToggleShowEmptyKey = instance.ToggleShowEmptyKey;
		ToggleHideEmptyKey = instance.ToggleHideEmptyKey;
		ShowConnectedInventoriesOnlyKey = instance.ShowConnectedInventoriesOnlyKey;
		ShowAllInventoriesKey = instance.ShowAllInventoriesKey;
		DisabledInventoryTooltip = instance.DisabledInventoryTooltip;
	}

	public override GridInventoryConfiguration DeepClone()
	{
		CloningContext context = new CloningContext();
		return DeepClone(ref context);
	}

	public override GridInventoryConfiguration DeepClone(ref CloningContext context)
	{
		return CloningHelper.GetCloner<GridInventoryConfiguration>().Clone(this, ref context);
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public override AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.Json;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Binary;
using Keen.VRage.Library.Serialization.Generic;
using Keen.VRage.Library.Serialization.Json;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.ObjectBuilders;
using Keen.VRage.Library.Utils;
using Keen.VRage.Library.Utils.Cloning;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

[Serialize]
[Cloneable]
[KeyType]
public class GridInventoryConfigurationObjectBuilder : ConfigurationObjectBuilder, IObjectBuilder, ISerializable<GridInventoryConfigurationObjectBuilder>, ISerializable, IDeepCloneable<GridInventoryConfigurationObjectBuilder>, IAccessible
{
	/// <inheritdoc />
	/// <inheritdoc />
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	[SerializerBundle("Game2", "2.4.0.95")]
	[SerializerBundle("VRage", "2.4.0.95")]
	public new class Serializer : ConfigurationObjectBuilder.Serializer, IJsonSerializer<GridInventoryConfigurationObjectBuilder>, IJsonSerializer, ISerializer, ISerializer<GridInventoryConfigurationObjectBuilder>, IJsonObjectSerializer, IBinarySerializer<GridInventoryConfigurationObjectBuilder>, IBinarySerializer, IGenericObjectSerializer<GridInventoryConfigurationObjectBuilder>, IGenericObjectSerializer
	{
		/// <inheritdoc />
		public new static readonly Serializer Instance = new Serializer();

		private static readonly bool IsDiskBlittable = (Instance.GetSchema(SerializationHelper.MaxVersion).Flags & SerializableTypeFlags.DiskBlittable) != 0;

		private ImmutableArray<BundleInfo> _bundles = ImmutableArray<BundleInfo>.Empty;

		private readonly IMigrations _typeMigrations = new GridInventoryConfigurationObjectBuilder_Migrations();

		public new IMigrations TypeVersionInfo => _typeMigrations;

		/// <inheritdoc />
		public new ImmutableArray<BundleInfo> Bundles
		{
			get
			{
				if (_bundles.IsEmpty)
				{
					_bundles = SerializationHelper.GetSerializerBundles(GetType());
				}
				return _bundles;
			}
		}

		public new SerializableTypeFlags Flags => TypeVersionInfo.LatestSchema.Flags;

		/// <inheritdoc />
		public new void DeserializeInto(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeInto(ref source, ref Unsafe.As<object, GridInventoryConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref JsonDeserializationContext source, ref GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.Reader.TokenType == JsonTokenType.Null)
			{
				source.Reader.Read();
				value = null;
				return;
			}
			if (value == null)
			{
				value = new GridInventoryConfigurationObjectBuilder();
			}
			if (!JsonHelper.TryMigrateType(ref source, flags, ref value))
			{
				source.AssertTokenAndRead(JsonTokenType.StartObject);
				DeserializeMembers(ref source, ref value, flags);
				source.AssertTokenAndRead(JsonTokenType.EndObject);
			}
		}

		public void DeserializeMembers(ref JsonDeserializationContext source, ref GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = new GridInventoryConfigurationObjectBuilder();
			}
			while (source.Reader.TokenType == JsonTokenType.PropertyName)
			{
				ReadOnlySpan<byte> property = source.Reader.ValueSpan;
				source.Reader.Read();
				if (!TryDeserializeMember(ref source, StableHashing.Hash(property), in property, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(GridInventoryConfigurationObjectBuilder), Encoding.UTF8.GetString(property));
					source.Reader.Skip();
					source.Reader.Read();
				}
			}
		}

		protected bool TryDeserializeMember(ref JsonDeserializationContext source, int propertyHash, in ReadOnlySpan<byte> property, GridInventoryConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (TryDeserializeMember(ref source, propertyHash, in property, (ConfigurationObjectBuilder)value, flags))
			{
				return true;
			}
			switch (propertyHash)
			{
			case 33094520:
				if ("AllInventoriesKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags12 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.AllInventoriesKey, SerializerFlags.None | serializerFlags12);
					return true;
				}
				break;
			case -7026043:
				if ("AllConnectedInventoriesKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags4 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.AllConnectedInventoriesKey, SerializerFlags.None | serializerFlags4);
					return true;
				}
				break;
			case 1423315098:
				if ("NoneFilterKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags8 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.NoneFilterKey, SerializerFlags.None | serializerFlags8);
					return true;
				}
				break;
			case 312511407:
				if ("AllSourcesKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags14 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.AllSourcesKey, SerializerFlags.None | serializerFlags14);
					return true;
				}
				break;
			case 821218850:
				if ("CharacterSourceKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags10 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.CharacterSourceKey, SerializerFlags.None | serializerFlags10);
					return true;
				}
				break;
			case -1146388741:
				if ("CharacterInventoryKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags6 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.CharacterInventoryKey, SerializerFlags.None | serializerFlags6);
					return true;
				}
				break;
			case -547689514:
				if ("FilteredInventoryKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags2 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.FilteredInventoryKey, SerializerFlags.None | serializerFlags2);
					return true;
				}
				break;
			case -72155303:
				if ("FullInventoryKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags13 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.FullInventoryKey, SerializerFlags.None | serializerFlags13);
					return true;
				}
				break;
			case 501703937:
				if ("InventoryMissingKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags11 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.InventoryMissingKey, SerializerFlags.None | serializerFlags11);
					return true;
				}
				break;
			case -441161305:
				if ("ToggleShowEmptyKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags9 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ToggleShowEmptyKey, SerializerFlags.None | serializerFlags9);
					return true;
				}
				break;
			case 807280816:
				if ("ToggleHideEmptyKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags7 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ToggleHideEmptyKey, SerializerFlags.None | serializerFlags7);
					return true;
				}
				break;
			case 996001446:
				if ("ShowConnectedInventoriesOnlyKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags5 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ShowConnectedInventoriesOnlyKey, SerializerFlags.None | serializerFlags5);
					return true;
				}
				break;
			case 437686947:
				if ("ShowAllInventoriesKey"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags3 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ShowAllInventoriesKey, SerializerFlags.None | serializerFlags3);
					return true;
				}
				break;
			case -361496027:
				if ("DisabledInventoryTooltip"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.DisabledInventoryTooltip, SerializerFlags.None | serializerFlags);
					return true;
				}
				break;
			}
			return false;
		}

		/// <inheritdoc />
		public new GridInventoryConfigurationObjectBuilder? Deserialize(ref JsonDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			GridInventoryConfigurationObjectBuilder value = null;
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref JsonSerializationContext destination, in GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				destination.Writer.WriteNullValue();
				return;
			}
			destination.Writer.WriteStartObject();
			SerializeMembers(ref destination, in value, flags);
			destination.Writer.WriteEndObject();
		}

		/// <inheritdoc />
		public new void Serialize(ref JsonSerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, (GridInventoryConfigurationObjectBuilder)value, flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref JsonSerializationContext destination, in GridInventoryConfigurationObjectBuilder value, SerializerFlags flags)
		{
			ConfigurationObjectBuilder value2 = value;
			SerializeMembers(ref destination, in value2, flags);
			destination.Writer.WritePropertyName("AllInventoriesKey"u8);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.AllInventoriesKey, SerializerFlags.None | serializerFlags);
			destination.Writer.WritePropertyName("AllConnectedInventoriesKey"u8);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.AllConnectedInventoriesKey, SerializerFlags.None | serializerFlags2);
			destination.Writer.WritePropertyName("NoneFilterKey"u8);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.NoneFilterKey, SerializerFlags.None | serializerFlags3);
			destination.Writer.WritePropertyName("AllSourcesKey"u8);
			SerializerFlags serializerFlags4 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.AllSourcesKey, SerializerFlags.None | serializerFlags4);
			destination.Writer.WritePropertyName("CharacterSourceKey"u8);
			SerializerFlags serializerFlags5 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.CharacterSourceKey, SerializerFlags.None | serializerFlags5);
			destination.Writer.WritePropertyName("CharacterInventoryKey"u8);
			SerializerFlags serializerFlags6 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.CharacterInventoryKey, SerializerFlags.None | serializerFlags6);
			destination.Writer.WritePropertyName("FilteredInventoryKey"u8);
			SerializerFlags serializerFlags7 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.FilteredInventoryKey, SerializerFlags.None | serializerFlags7);
			destination.Writer.WritePropertyName("FullInventoryKey"u8);
			SerializerFlags serializerFlags8 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.FullInventoryKey, SerializerFlags.None | serializerFlags8);
			destination.Writer.WritePropertyName("InventoryMissingKey"u8);
			SerializerFlags serializerFlags9 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.InventoryMissingKey, SerializerFlags.None | serializerFlags9);
			destination.Writer.WritePropertyName("ToggleShowEmptyKey"u8);
			SerializerFlags serializerFlags10 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.ToggleShowEmptyKey, SerializerFlags.None | serializerFlags10);
			destination.Writer.WritePropertyName("ToggleHideEmptyKey"u8);
			SerializerFlags serializerFlags11 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.ToggleHideEmptyKey, SerializerFlags.None | serializerFlags11);
			destination.Writer.WritePropertyName("ShowConnectedInventoriesOnlyKey"u8);
			SerializerFlags serializerFlags12 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.ShowConnectedInventoriesOnlyKey, SerializerFlags.None | serializerFlags12);
			destination.Writer.WritePropertyName("ShowAllInventoriesKey"u8);
			SerializerFlags serializerFlags13 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.ShowAllInventoriesKey, SerializerFlags.None | serializerFlags13);
			destination.Writer.WritePropertyName("DisabledInventoryTooltip"u8);
			SerializerFlags serializerFlags14 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.DisabledInventoryTooltip, SerializerFlags.None | serializerFlags14);
		}

		/// <inheritdoc />
		public override void SerializeMembers(ref JsonSerializationContext destination, object value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, (GridInventoryConfigurationObjectBuilder)value, flags);
		}

		/// <inheritdoc />
		public override void DeserializeMembers(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeMembers(ref source, ref Unsafe.As<object, GridInventoryConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public new void DeserializeInto(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeInto(ref source, ref Unsafe.As<object, GridInventoryConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public new void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeIntoSlow(ref source, ref Unsafe.As<object, GridInventoryConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref BinaryDeserializationContext source, ref GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.IsNull(advance: false))
			{
				source.ReadObjectPrefix();
				value = null;
				return;
			}
			if (value == null)
			{
				value = new GridInventoryConfigurationObjectBuilder();
			}
			if (BinaryHelper.ShouldUseFastPath(ref source, typeof(GridInventoryConfigurationObjectBuilder)))
			{
				source.ReadObjectPrefix();
				DeserializeFast(ref source, value, flags);
			}
			else if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		public void DeserializeMembers(ref BinaryDeserializationContext source, ref GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = new GridInventoryConfigurationObjectBuilder();
			}
			if (BinaryHelper.ShouldUseDeltaEncodedPath(ref source, out var memberCount))
			{
				DeserializeDeltaEncoded(ref source, value, memberCount, flags);
				return;
			}
			source.ReadObjectPrefix();
			if (!source.TypeModel.IsInterned(typeof(GridInventoryConfigurationObjectBuilder), out var index))
			{
				throw new SerializationException("Type GridInventoryConfigurationObjectBuilder not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			int position = source.Reader.Position;
			foreach (var (text2, memberData2) in entry.Members)
			{
				if (entry.IsDiskBlittable)
				{
					source.Reader.Position = position + memberData2.Offset;
				}
				if (!TryDeserializeMember(ref source, text2, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(GridInventoryConfigurationObjectBuilder), text2);
				}
			}
			if (entry.IsDiskBlittable)
			{
				source.Reader.Position = position + entry.Size;
			}
		}

		/// <inheritdoc />
		public void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.IsNull(advance: false))
			{
				source.ReadObjectPrefix();
				value = null;
				return;
			}
			if (value == null)
			{
				value = new GridInventoryConfigurationObjectBuilder();
			}
			if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		protected bool TryDeserializeMember(ref BinaryDeserializationContext source, string property, GridInventoryConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (TryDeserializeMember(ref source, property, (ConfigurationObjectBuilder)value, flags))
			{
				return true;
			}
			switch (property)
			{
			case "AllInventoriesKey":
			{
				SerializerFlags serializerFlags14 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.AllInventoriesKey, SerializerFlags.None | serializerFlags14);
				return true;
			}
			case "AllConnectedInventoriesKey":
			{
				SerializerFlags serializerFlags13 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.AllConnectedInventoriesKey, SerializerFlags.None | serializerFlags13);
				return true;
			}
			case "NoneFilterKey":
			{
				SerializerFlags serializerFlags12 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.NoneFilterKey, SerializerFlags.None | serializerFlags12);
				return true;
			}
			case "AllSourcesKey":
			{
				SerializerFlags serializerFlags11 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.AllSourcesKey, SerializerFlags.None | serializerFlags11);
				return true;
			}
			case "CharacterSourceKey":
			{
				SerializerFlags serializerFlags10 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.CharacterSourceKey, SerializerFlags.None | serializerFlags10);
				return true;
			}
			case "CharacterInventoryKey":
			{
				SerializerFlags serializerFlags9 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.CharacterInventoryKey, SerializerFlags.None | serializerFlags9);
				return true;
			}
			case "FilteredInventoryKey":
			{
				SerializerFlags serializerFlags8 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.FilteredInventoryKey, SerializerFlags.None | serializerFlags8);
				return true;
			}
			case "FullInventoryKey":
			{
				SerializerFlags serializerFlags7 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.FullInventoryKey, SerializerFlags.None | serializerFlags7);
				return true;
			}
			case "InventoryMissingKey":
			{
				SerializerFlags serializerFlags6 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.InventoryMissingKey, SerializerFlags.None | serializerFlags6);
				return true;
			}
			case "ToggleShowEmptyKey":
			{
				SerializerFlags serializerFlags5 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.ToggleShowEmptyKey, SerializerFlags.None | serializerFlags5);
				return true;
			}
			case "ToggleHideEmptyKey":
			{
				SerializerFlags serializerFlags4 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.ToggleHideEmptyKey, SerializerFlags.None | serializerFlags4);
				return true;
			}
			case "ShowConnectedInventoriesOnlyKey":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.ShowConnectedInventoriesOnlyKey, SerializerFlags.None | serializerFlags3);
				return true;
			}
			case "ShowAllInventoriesKey":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.ShowAllInventoriesKey, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "DisabledInventoryTooltip":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.DisabledInventoryTooltip, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		protected void DeserializeFast(ref BinaryDeserializationContext source, GridInventoryConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (value == null)
			{
				value = new GridInventoryConfigurationObjectBuilder();
			}
			DeserializeFast(ref source, (ConfigurationObjectBuilder)value, flags);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.AllInventoriesKey, SerializerFlags.None | serializerFlags);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.AllConnectedInventoriesKey, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.NoneFilterKey, SerializerFlags.None | serializerFlags3);
			SerializerFlags serializerFlags4 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.AllSourcesKey, SerializerFlags.None | serializerFlags4);
			SerializerFlags serializerFlags5 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.CharacterSourceKey, SerializerFlags.None | serializerFlags5);
			SerializerFlags serializerFlags6 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.CharacterInventoryKey, SerializerFlags.None | serializerFlags6);
			SerializerFlags serializerFlags7 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.FilteredInventoryKey, SerializerFlags.None | serializerFlags7);
			SerializerFlags serializerFlags8 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.FullInventoryKey, SerializerFlags.None | serializerFlags8);
			SerializerFlags serializerFlags9 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.InventoryMissingKey, SerializerFlags.None | serializerFlags9);
			SerializerFlags serializerFlags10 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ToggleShowEmptyKey, SerializerFlags.None | serializerFlags10);
			SerializerFlags serializerFlags11 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ToggleHideEmptyKey, SerializerFlags.None | serializerFlags11);
			SerializerFlags serializerFlags12 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ShowConnectedInventoriesOnlyKey, SerializerFlags.None | serializerFlags12);
			SerializerFlags serializerFlags13 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ShowAllInventoriesKey, SerializerFlags.None | serializerFlags13);
			SerializerFlags serializerFlags14 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.DisabledInventoryTooltip, SerializerFlags.None | serializerFlags14);
		}

		protected void DeserializeDeltaEncoded(ref BinaryDeserializationContext source, GridInventoryConfigurationObjectBuilder value, int memberCount, SerializerFlags flags)
		{
			if (!source.TypeModel.IsInterned(typeof(GridInventoryConfigurationObjectBuilder), out var index))
			{
				throw new SerializationException("Type GridInventoryConfigurationObjectBuilder not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			for (int i = 0; i < memberCount; i++)
			{
				int index2 = source.Reader.Read<ushort>();
				MemberData memberData = entry.OrderedMembers[index2];
				string name = memberData.Name;
				if ((source.PeekObjectPrefix() & ValuePrefix.DeltaEncoded) == 0)
				{
					source.DeltaEncoded = false;
					if (memberData.Type.IsValueType)
					{
						source.ReadObjectPrefix();
					}
				}
				if (!TryDeserializeMember(ref source, name, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(GridInventoryConfigurationObjectBuilder), name);
				}
				source.DeltaEncoded = true;
			}
		}

		/// <inheritdoc />
		public new GridInventoryConfigurationObjectBuilder? Deserialize(ref BinaryDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			GridInventoryConfigurationObjectBuilder value = null;
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref BinarySerializationContext destination, in GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				destination.WriteIsNull(isNull: true);
				return;
			}
			destination.WritePrefix(ValuePrefix.Value);
			SerializeMembers(ref destination, in value, flags);
		}

		/// <inheritdoc />
		public new void Serialize(ref BinarySerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, (GridInventoryConfigurationObjectBuilder)value, flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref BinarySerializationContext destination, in GridInventoryConfigurationObjectBuilder value, SerializerFlags flags)
		{
			ConfigurationObjectBuilder value2 = value;
			SerializeMembers(ref destination, in value2, flags);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.AllInventoriesKey, SerializerFlags.None | serializerFlags);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.AllConnectedInventoriesKey, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.NoneFilterKey, SerializerFlags.None | serializerFlags3);
			SerializerFlags serializerFlags4 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.AllSourcesKey, SerializerFlags.None | serializerFlags4);
			SerializerFlags serializerFlags5 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.CharacterSourceKey, SerializerFlags.None | serializerFlags5);
			SerializerFlags serializerFlags6 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.CharacterInventoryKey, SerializerFlags.None | serializerFlags6);
			SerializerFlags serializerFlags7 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.FilteredInventoryKey, SerializerFlags.None | serializerFlags7);
			SerializerFlags serializerFlags8 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.FullInventoryKey, SerializerFlags.None | serializerFlags8);
			SerializerFlags serializerFlags9 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.InventoryMissingKey, SerializerFlags.None | serializerFlags9);
			SerializerFlags serializerFlags10 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.ToggleShowEmptyKey, SerializerFlags.None | serializerFlags10);
			SerializerFlags serializerFlags11 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.ToggleHideEmptyKey, SerializerFlags.None | serializerFlags11);
			SerializerFlags serializerFlags12 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.ShowConnectedInventoriesOnlyKey, SerializerFlags.None | serializerFlags12);
			SerializerFlags serializerFlags13 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.ShowAllInventoriesKey, SerializerFlags.None | serializerFlags13);
			SerializerFlags serializerFlags14 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.DisabledInventoryTooltip, SerializerFlags.None | serializerFlags14);
		}

		/// <inheritdoc />
		public new void DeserializeInto(ref GenericObjectDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeInto(ref source, ref Unsafe.As<object, GridInventoryConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref GenericObjectDeserializationContext source, ref GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.Object == null)
			{
				value = null;
				return;
			}
			if (value == null)
			{
				value = new GridInventoryConfigurationObjectBuilder();
			}
			if (source.Object is GridInventoryConfigurationObjectBuilder gridInventoryConfigurationObjectBuilder)
			{
				value = gridInventoryConfigurationObjectBuilder;
			}
			else
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		public void DeserializeMembers(ref GenericObjectDeserializationContext source, ref GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = new GridInventoryConfigurationObjectBuilder();
			}
			foreach (var (text2, obj2) in source.GenericObject)
			{
				GenericObjectDeserializationContext source2 = new GenericObjectDeserializationContext(source.Context, obj2, source.SourceFormat);
				if (!TryDeserializeMember(ref source2, text2, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(GridInventoryConfigurationObjectBuilder), text2);
				}
			}
		}

		protected bool TryDeserializeMember(ref GenericObjectDeserializationContext source, string property, GridInventoryConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (TryDeserializeMember(ref source, property, (ConfigurationObjectBuilder)value, flags))
			{
				return true;
			}
			switch (property)
			{
			case "AllInventoriesKey":
			{
				SerializerFlags serializerFlags14 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.AllInventoriesKey, SerializerFlags.None | serializerFlags14);
				return true;
			}
			case "AllConnectedInventoriesKey":
			{
				SerializerFlags serializerFlags13 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.AllConnectedInventoriesKey, SerializerFlags.None | serializerFlags13);
				return true;
			}
			case "NoneFilterKey":
			{
				SerializerFlags serializerFlags12 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.NoneFilterKey, SerializerFlags.None | serializerFlags12);
				return true;
			}
			case "AllSourcesKey":
			{
				SerializerFlags serializerFlags11 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.AllSourcesKey, SerializerFlags.None | serializerFlags11);
				return true;
			}
			case "CharacterSourceKey":
			{
				SerializerFlags serializerFlags10 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.CharacterSourceKey, SerializerFlags.None | serializerFlags10);
				return true;
			}
			case "CharacterInventoryKey":
			{
				SerializerFlags serializerFlags9 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.CharacterInventoryKey, SerializerFlags.None | serializerFlags9);
				return true;
			}
			case "FilteredInventoryKey":
			{
				SerializerFlags serializerFlags8 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.FilteredInventoryKey, SerializerFlags.None | serializerFlags8);
				return true;
			}
			case "FullInventoryKey":
			{
				SerializerFlags serializerFlags7 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.FullInventoryKey, SerializerFlags.None | serializerFlags7);
				return true;
			}
			case "InventoryMissingKey":
			{
				SerializerFlags serializerFlags6 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.InventoryMissingKey, SerializerFlags.None | serializerFlags6);
				return true;
			}
			case "ToggleShowEmptyKey":
			{
				SerializerFlags serializerFlags5 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ToggleShowEmptyKey, SerializerFlags.None | serializerFlags5);
				return true;
			}
			case "ToggleHideEmptyKey":
			{
				SerializerFlags serializerFlags4 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ToggleHideEmptyKey, SerializerFlags.None | serializerFlags4);
				return true;
			}
			case "ShowConnectedInventoriesOnlyKey":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ShowConnectedInventoriesOnlyKey, SerializerFlags.None | serializerFlags3);
				return true;
			}
			case "ShowAllInventoriesKey":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.ShowAllInventoriesKey, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "DisabledInventoryTooltip":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.DisabledInventoryTooltip, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		/// <inheritdoc />
		public new GridInventoryConfigurationObjectBuilder? Deserialize(ref GenericObjectDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			GridInventoryConfigurationObjectBuilder value = null;
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		public new ImmutableArray<MigrationInfo> GetMigrations()
		{
			return _typeMigrations.GetMigrations();
		}

		public new SerializationSchema GetSchema(Version version)
		{
			return _typeMigrations.GetSchema(version);
		}

		public new bool TryGetDeltaSchema(Version version, out SerializationSchema? schema)
		{
			schema = null;
			return false;
		}

		void IJsonSerializer<GridInventoryConfigurationObjectBuilder>.Serialize(ref JsonSerializationContext destination, in GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in value, flags);
		}

		void IBinarySerializer<GridInventoryConfigurationObjectBuilder>.Serialize(ref BinarySerializationContext destination, in GridInventoryConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in value, flags);
		}
	}

	private class Cloner : IDeepCloner<GridInventoryConfigurationObjectBuilder>, IDeepCloner
	{
		GridInventoryConfigurationObjectBuilder IDeepCloner<GridInventoryConfigurationObjectBuilder>.Clone(GridInventoryConfigurationObjectBuilder value, ref CloningContext context)
		{
			ref GridInventoryConfigurationObjectBuilder reference = ref context.ClonedOrNullRef(value);
			if (!Unsafe.IsNullRef(in reference))
			{
				return reference;
			}
			return new GridInventoryConfigurationObjectBuilder(in value, ref context);
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public new class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 16;

		static TypeInfoHolder()
		{
			int num = 2;
			RawAccessors = new(string, IMemberAccessor)[14]
			{
				("AllInventoriesKey", AllInventoriesKeyAccessor()),
				("AllConnectedInventoriesKey", AllConnectedInventoriesKeyAccessor()),
				("NoneFilterKey", NoneFilterKeyAccessor()),
				("AllSourcesKey", AllSourcesKeyAccessor()),
				("CharacterSourceKey", CharacterSourceKeyAccessor()),
				("CharacterInventoryKey", CharacterInventoryKeyAccessor()),
				("FilteredInventoryKey", FilteredInventoryKeyAccessor()),
				("FullInventoryKey", FullInventoryKeyAccessor()),
				("InventoryMissingKey", InventoryMissingKeyAccessor()),
				("ToggleShowEmptyKey", ToggleShowEmptyKeyAccessor()),
				("ToggleHideEmptyKey", ToggleHideEmptyKeyAccessor()),
				("ShowConnectedInventoriesOnlyKey", ShowConnectedInventoriesOnlyKeyAccessor()),
				("ShowAllInventoriesKey", ShowAllInventoriesKeyAccessor()),
				("DisabledInventoryTooltip", DisabledInventoryTooltipAccessor())
			};
			string documentation = null;
			MemberInfo[] array = new MemberInfo[14]
			{
				typeof(GridInventoryConfigurationObjectBuilder).GetField("AllInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("AllConnectedInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("NoneFilterKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("AllSourcesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("CharacterSourceKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("CharacterInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("FilteredInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("FullInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("InventoryMissingKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("ToggleShowEmptyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("ToggleHideEmptyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("ShowConnectedInventoriesOnlyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("ShowAllInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(GridInventoryConfigurationObjectBuilder).GetField("DisabledInventoryTooltip", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					"Lockey for \"All Inventories\" secondary filter"
				},
				{
					array[1],
					"Lockey for the \"All connected inventories\" secondary filter"
				},
				{
					array[2],
					"Lockey for the \"None\" inventory source"
				},
				{
					array[3],
					"Lockey for the \"Character + Grids\" inventory source"
				},
				{
					array[4],
					"Lockey for the \"Character + Grids\" inventory source"
				},
				{
					array[5],
					"Lockey for the character inventory tag."
				},
				{
					array[6],
					"Lockey indicating no accepting inventory was found on drop target"
				},
				{
					array[7],
					"Lockey indicating no empty inventory was found on drop target"
				},
				{
					array[8],
					"Lockey indicating no inventory was found"
				},
				{
					array[9],
					"Lockey for show empty filter"
				},
				{
					array[10],
					"Lockey for hide empty filter"
				},
				{
					array[11],
					"Lockey for show empty filter"
				},
				{
					array[12],
					"Lockey for hide empty filter"
				},
				{
					array[13],
					"A tooltip key for the not-connected /not accessible inventories"
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					ListReader<Attribute>.Empty
				},
				{
					array[4],
					ListReader<Attribute>.Empty
				},
				{
					array[5],
					ListReader<Attribute>.Empty
				},
				{
					array[6],
					ListReader<Attribute>.Empty
				},
				{
					array[7],
					ListReader<Attribute>.Empty
				},
				{
					array[8],
					ListReader<Attribute>.Empty
				},
				{
					array[9],
					ListReader<Attribute>.Empty
				},
				{
					array[10],
					ListReader<Attribute>.Empty
				},
				{
					array[11],
					ListReader<Attribute>.Empty
				},
				{
					array[12],
					ListReader<Attribute>.Empty
				},
				{
					array[13],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				},
				{
					array[4],
					num + 4
				},
				{
					array[5],
					num + 5
				},
				{
					array[6],
					num + 6
				},
				{
					array[7],
					num + 7
				},
				{
					array[8],
					num + 8
				},
				{
					array[9],
					num + 9
				},
				{
					array[10],
					num + 10
				},
				{
					array[11],
					num + 11
				},
				{
					array[12],
					num + 12
				},
				{
					array[13],
					num + 13
				}
			});
			RawAccessors = ConfigurationObjectBuilder.TypeInfoHolder.RawAccessors.Concat<(string, IMemberAccessor)>(RawAccessors).ToArray();
			builder.AddRange(ConfigurationObjectBuilder.TypeInfoHolder.Value.MembersDocumentation);
			builder3.AddRange(ConfigurationObjectBuilder.TypeInfoHolder.Value.MembersDeclarationOrder);
			builder2.AddRange(ConfigurationObjectBuilder.TypeInfoHolder.Value.MembersAttributes);
			Value = new AccessibleTypeInfo(typeof(GridInventoryConfigurationObjectBuilder), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor AllInventoriesKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("AllInventoriesKey", "AllInventoriesKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("AllInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.AllInventoriesKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.AllInventoriesKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.AllInventoriesKey));
		}

		private static IMemberAccessor AllConnectedInventoriesKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("AllConnectedInventoriesKey", "AllConnectedInventoriesKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("AllConnectedInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.AllConnectedInventoriesKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.AllConnectedInventoriesKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.AllConnectedInventoriesKey));
		}

		private static IMemberAccessor NoneFilterKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("NoneFilterKey", "NoneFilterKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("NoneFilterKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.NoneFilterKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.NoneFilterKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.NoneFilterKey));
		}

		private static IMemberAccessor AllSourcesKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("AllSourcesKey", "AllSourcesKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("AllSourcesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.AllSourcesKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.AllSourcesKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.AllSourcesKey));
		}

		private static IMemberAccessor CharacterSourceKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("CharacterSourceKey", "CharacterSourceKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("CharacterSourceKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.CharacterSourceKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.CharacterSourceKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.CharacterSourceKey));
		}

		private static IMemberAccessor CharacterInventoryKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("CharacterInventoryKey", "CharacterInventoryKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("CharacterInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.CharacterInventoryKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.CharacterInventoryKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.CharacterInventoryKey));
		}

		private static IMemberAccessor FilteredInventoryKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("FilteredInventoryKey", "FilteredInventoryKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("FilteredInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.FilteredInventoryKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.FilteredInventoryKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.FilteredInventoryKey));
		}

		private static IMemberAccessor FullInventoryKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("FullInventoryKey", "FullInventoryKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("FullInventoryKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.FullInventoryKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.FullInventoryKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.FullInventoryKey));
		}

		private static IMemberAccessor InventoryMissingKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("InventoryMissingKey", "InventoryMissingKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("InventoryMissingKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.InventoryMissingKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.InventoryMissingKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.InventoryMissingKey));
		}

		private static IMemberAccessor ToggleShowEmptyKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("ToggleShowEmptyKey", "ToggleShowEmptyKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("ToggleShowEmptyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.ToggleShowEmptyKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.ToggleShowEmptyKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.ToggleShowEmptyKey));
		}

		private static IMemberAccessor ToggleHideEmptyKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("ToggleHideEmptyKey", "ToggleHideEmptyKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("ToggleHideEmptyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.ToggleHideEmptyKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.ToggleHideEmptyKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.ToggleHideEmptyKey));
		}

		private static IMemberAccessor ShowConnectedInventoriesOnlyKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("ShowConnectedInventoriesOnlyKey", "ShowConnectedInventoriesOnlyKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("ShowConnectedInventoriesOnlyKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.ShowConnectedInventoriesOnlyKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.ShowConnectedInventoriesOnlyKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.ShowConnectedInventoriesOnlyKey));
		}

		private static IMemberAccessor ShowAllInventoriesKeyAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("ShowAllInventoriesKey", "ShowAllInventoriesKey", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("ShowAllInventoriesKey", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.ShowAllInventoriesKey, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.ShowAllInventoriesKey = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.ShowAllInventoriesKey));
		}

		private static IMemberAccessor DisabledInventoryTooltipAccessor()
		{
			return new ClassMemberAccessor<GridInventoryConfigurationObjectBuilder, LocKey>("DisabledInventoryTooltip", "DisabledInventoryTooltip", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(GridInventoryConfigurationObjectBuilder).GetField("DisabledInventoryTooltip", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (GridInventoryConfigurationObjectBuilder instance) => instance.DisabledInventoryTooltip, delegate(GridInventoryConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.DisabledInventoryTooltip = value;
			}, (GridInventoryConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.DisabledInventoryTooltip));
		}
	}

	/// <summary>
	/// Lockey for "All Inventories" secondary filter
	/// </summary>
	public LocKey AllInventoriesKey;

	/// <summary>
	/// Lockey for the "All connected inventories" secondary filter
	/// </summary>
	public LocKey AllConnectedInventoriesKey;

	/// <summary>
	/// Lockey for the "None" inventory source
	/// </summary>
	public LocKey NoneFilterKey;

	/// <summary>
	/// Lockey for the "Character + Grids" inventory source
	/// </summary>
	public LocKey AllSourcesKey;

	/// <summary>
	/// Lockey for the "Character + Grids" inventory source
	/// </summary>
	public LocKey CharacterSourceKey;

	/// <summary>
	/// Lockey for the character inventory tag.
	/// </summary>
	public LocKey CharacterInventoryKey;

	/// <summary>
	/// Lockey indicating no accepting inventory was found on drop target
	/// </summary>
	public LocKey FilteredInventoryKey;

	/// <summary>
	/// Lockey indicating no empty inventory was found on drop target
	/// </summary>
	public LocKey FullInventoryKey;

	/// <summary>
	/// Lockey indicating no inventory was found
	/// </summary>
	public LocKey InventoryMissingKey;

	/// <summary>
	/// Lockey for show empty filter
	/// </summary>
	public LocKey ToggleShowEmptyKey;

	/// <summary>
	/// Lockey for hide empty filter
	/// </summary>
	public LocKey ToggleHideEmptyKey;

	/// <summary>
	/// Lockey for show empty filter
	/// </summary>
	public LocKey ShowConnectedInventoriesOnlyKey;

	/// <summary>
	/// Lockey for hide empty filter
	/// </summary>
	public LocKey ShowAllInventoriesKey;

	/// <summary>
	/// A tooltip key for the not-connected /not accessible inventories
	/// </summary>
	public LocKey DisabledInventoryTooltip;

	static BuildableTypeInfo IObjectBuilder.BuildableInfo => ObjectBuilder.GetBuildableInfo<GridInventoryConfiguration>();

	/// <inheritdoc />
	static ISerializer<GridInventoryConfigurationObjectBuilder> ISerializable<GridInventoryConfigurationObjectBuilder>.Serializer => Serializer.Instance;

	static IDeepCloner<GridInventoryConfigurationObjectBuilder> IDeepCloneable<GridInventoryConfigurationObjectBuilder>.Cloner { get; } = new Cloner();

	public GridInventoryConfigurationObjectBuilder()
	{
		AllInventoriesKey = LocKey.FromString("AllInventories");
		AllConnectedInventoriesKey = LocKey.FromString("AllConnectedInventories");
		NoneFilterKey = LocKey.FromString("InventorySourceNone");
		AllSourcesKey = LocKey.FromString("InventorySourceAll");
		CharacterSourceKey = LocKey.FromString("CharacterFilter");
		CharacterInventoryKey = LocKey.FromString("CharacterInventory");
		FilteredInventoryKey = LocKey.FromString("InventoryFiltered");
		FullInventoryKey = LocKey.FromString("InventoryFull");
		InventoryMissingKey = LocKey.FromString("InventoryMissing");
		ToggleShowEmptyKey = LocKey.FromString("InventoryToggleShowEmpty");
		ToggleHideEmptyKey = LocKey.FromString("InventoryToggleHideEmpty");
		ShowConnectedInventoriesOnlyKey = LocKey.FromString("ShowConnectedInventoriesOnly");
		ShowAllInventoriesKey = LocKey.FromString("ShowAllInventories");
		DisabledInventoryTooltip = LocKey.FromString("InventoryDisabledTooltip");
	}

	/// <inheritdoc />
	public new static IStreamSerializer<GridInventoryConfigurationObjectBuilder> GetStreamSerializer(SerializerFormat format)
	{
		return format switch
		{
			SerializerFormat.Binary => ImmutableSingleton<BinaryStreamSerializer<GridInventoryConfigurationObjectBuilder>>.Instance, 
			SerializerFormat.Json => ImmutableSingleton<JsonStreamSerializer<GridInventoryConfigurationObjectBuilder>>.Instance, 
		};
	}

	[SetsRequiredMembers]
	protected GridInventoryConfigurationObjectBuilder(in GridInventoryConfigurationObjectBuilder instance, ref CloningContext context)
		: base((ConfigurationObjectBuilder)instance, ref context)
	{
		ref GridInventoryConfigurationObjectBuilder reference = ref context.ClonedOrNewRef(instance, out var exists);
		if (!exists)
		{
			reference = this;
		}
		AllInventoriesKey = instance.AllInventoriesKey;
		AllConnectedInventoriesKey = instance.AllConnectedInventoriesKey;
		NoneFilterKey = instance.NoneFilterKey;
		AllSourcesKey = instance.AllSourcesKey;
		CharacterSourceKey = instance.CharacterSourceKey;
		CharacterInventoryKey = instance.CharacterInventoryKey;
		FilteredInventoryKey = instance.FilteredInventoryKey;
		FullInventoryKey = instance.FullInventoryKey;
		InventoryMissingKey = instance.InventoryMissingKey;
		ToggleShowEmptyKey = instance.ToggleShowEmptyKey;
		ToggleHideEmptyKey = instance.ToggleHideEmptyKey;
		ShowConnectedInventoriesOnlyKey = instance.ShowConnectedInventoriesOnlyKey;
		ShowAllInventoriesKey = instance.ShowAllInventoriesKey;
		DisabledInventoryTooltip = instance.DisabledInventoryTooltip;
	}

	public override GridInventoryConfigurationObjectBuilder DeepClone()
	{
		CloningContext context = new CloningContext();
		return DeepClone(ref context);
	}

	public override GridInventoryConfigurationObjectBuilder DeepClone(ref CloningContext context)
	{
		return CloningHelper.GetCloner<GridInventoryConfigurationObjectBuilder>().Clone(this, ref context);
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public override AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Immutable;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.Migrations.Internal;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

[Migrations(typeof(GridInventoryConfigurationObjectBuilder))]
public class GridInventoryConfigurationObjectBuilder_Migrations : IMigrations
{
	private readonly ImmutableArray<MigrationInfo> _migrationInfos;

	private static readonly ImmutableArray<LayoutInfo> VersionLayouts;

	private static readonly ImmutableArray<VersionLayoutDelta> VersionLayoutDeltas;

	private static LayoutInfo DiskBlittableLayout;

	private static TypeSerializationSchemas _schemas;

	[Version(0)]
	private static readonly TypeStructureDelta Version_0_0_0_0_Delta;

	public ref readonly SerializationSchema LatestSchema => ref _schemas.GetLatestSchema();

	public GridInventoryConfigurationObjectBuilder_Migrations()
	{
		ImmutableArray<MigrationInfo>.Builder builder = ImmutableArray.CreateBuilder<MigrationInfo>(0);
		_migrationInfos = MigrationsHelper.CombineMigrations<ConfigurationObjectBuilder>(builder);
	}

	static GridInventoryConfigurationObjectBuilder_Migrations()
	{
		VersionLayoutDeltas = ImmutableArray<VersionLayoutDelta>.Empty;
		DiskBlittableLayout = default(LayoutInfo);
		Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("AllInventoriesKey", typeof(LocKey))).Add(new MemberData("AllConnectedInventoriesKey", typeof(LocKey))).Add(new MemberData("NoneFilterKey", typeof(LocKey)))
			.Add(new MemberData("AllSourcesKey", typeof(LocKey)))
			.Add(new MemberData("CharacterSourceKey", typeof(LocKey)))
			.Add(new MemberData("CharacterInventoryKey", typeof(LocKey)))
			.Add(new MemberData("FilteredInventoryKey", typeof(LocKey)))
			.Add(new MemberData("FullInventoryKey", typeof(LocKey)))
			.Add(new MemberData("InventoryMissingKey", typeof(LocKey)))
			.Add(new MemberData("ToggleShowEmptyKey", typeof(LocKey)))
			.Add(new MemberData("ToggleHideEmptyKey", typeof(LocKey)))
			.Add(new MemberData("ShowConnectedInventoriesOnlyKey", typeof(LocKey)))
			.Add(new MemberData("ShowAllInventoriesKey", typeof(LocKey)))
			.Add(new MemberData("DisabledInventoryTooltip", typeof(LocKey)));
		ImmutableArray<VersionLayoutDelta> baseLayout = MigrationsHelper.GetBaseLayout<ConfigurationObjectBuilder>();
		ImmutableArray<VersionLayoutDelta>.Builder builder = ImmutableArray.CreateBuilder<VersionLayoutDelta>(1 + baseLayout.Length);
		builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
		VersionLayoutDeltas = MigrationsHelper.CombineLayouts(baseLayout, builder);
		VersionLayouts = MigrationsHelper.ConstructFinalVersionLayouts(typeof(GridInventoryConfigurationObjectBuilder), VersionLayoutDeltas);
		SerializableTypeFlags flags = SerializableTypeFlags.KeyType;
		_schemas = new TypeSerializationSchemas(typeof(GridInventoryConfigurationObjectBuilder), null, VersionLayouts, flags, DiskBlittableLayout);
	}

	public ImmutableArray<MigrationInfo> GetMigrations()
	{
		return _migrationInfos;
	}

	public ImmutableArray<VersionLayoutDelta> GetLayoutDeltas()
	{
		return VersionLayoutDeltas;
	}

	public SerializationSchema GetSchema(Version version)
	{
		return _schemas.GetSchema(version);
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Threading;
using Keen.Game2.Simulation.GameSystems.Economy;
using Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;
using Keen.Game2.Simulation.WorldObjects.Characters;
using Keen.Game2.Simulation.WorldObjects.CubeBlocks;
using Keen.Game2.Simulation.WorldObjects.CubeGrids;
using Keen.VRage.DCS.Components;
using Keen.VRage.DCS.ObjectBuilders;
using Keen.VRage.Library.Collections;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.Library.Extensions;
using Keen.VRage.Library.Reflection.DependencyInjections;
using Keen.VRage.Library.Threading;
using Keen.VRage.Library.UI;
using Keen.VRage.Multiplayer.Sessions;
using Keen.VRage.UI.Screens;
using Keen.VRage.UI.Shared.ViewModels;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// View model for managing the grid inventory view
/// </summary>
public class GridInventoryViewModel : AttachedViewModel
{
	private readonly IViewModelFactory _factory;

	[Configuration]
	private GridInventoryConfiguration _configuration;

	[Service]
	private readonly IEntityReplication _replication;

	[Service]
	private readonly IReplicationMapping _mapping;

	[Notify]
	private InventoryListViewModel _leftInventory;

	[Notify]
	private InventoryListViewModel _rightInventory;

	private readonly SemaphoreSlim _updateInventoryLock = new SemaphoreSlim(1, 1);

	private bool _updateInventoriesRequested;

	private ObservableList<InventoryContainerModel>? _interactedInventoryContainers;

	private ObservableList<InventoryContainerModel>? _interactorInventoryContainers;

	private ObservableList<InventoryContainerModel>? InteractedInventoryContainers
	{
		get
		{
			return _interactedInventoryContainers;
		}
		set
		{
			SetInventoryContainer(ref _interactedInventoryContainers, value);
		}
	}

	private ObservableList<InventoryContainerModel>? InteractorInventoryContainers
	{
		get
		{
			return _interactorInventoryContainers;
		}
		set
		{
			SetInventoryContainer(ref _interactorInventoryContainers, value);
		}
	}

	/// <summary>
	/// Are we interacting with a valid grid/backpack?
	/// UI will show "no grid connection" if not (e.g. accessing via character inventory)
	/// </summary>
	public bool HasValidConnection { get; }

	private TerminalInventoryInteraction Interaction { get; }

	public InventoryListViewModel LeftInventory
	{
		get
		{
			return _leftInventory;
		}
		set
		{
			SetProperty(ref _leftInventory, value, "LeftInventory");
		}
	}

	public InventoryListViewModel RightInventory
	{
		get
		{
			return _rightInventory;
		}
		set
		{
			SetProperty(ref _rightInventory, value, "RightInventory");
		}
	}

	public GridInventoryViewModel(TerminalInventoryInteraction interaction, IViewModelFactory factory)
		: base(factory)
	{
		_factory = factory;
		Interaction = interaction;
		HasValidConnection = interaction.InteractionInfo.InteractedEntity != null && interaction.InteractionInfo.InteractedEntity != interaction.InteractionInfo.InteractorEntity;
		interaction.PropertyChanged += InteractionOnPropertyChanged;
		_leftInventory = Attach(new InventoryListViewModel(InventoriesSortMethod, PrimaryFilterSortMethod, factory));
		_rightInventory = Attach(new InventoryListViewModel(InventoriesSortMethod, PrimaryFilterSortMethod, factory));
		InteractorInventoryContainers = interaction.InteractorInventoryView?.InventoryContainers;
		InteractedInventoryContainers = interaction.InteractedInventoryView?.InventoryContainers;
		ObservableList<InventoryContainerModel>? interactorInventoryContainers = InteractorInventoryContainers;
		if (interactorInventoryContainers == null || interactorInventoryContainers.Count <= 0)
		{
			ObservableList<InventoryContainerModel>? interactedInventoryContainers = InteractedInventoryContainers;
			if (interactedInventoryContainers == null || interactedInventoryContainers.Count <= 0)
			{
				goto IL_0122;
			}
		}
		UpdateInventoriesDebouncedAsync().SkipWait();
		goto IL_0122;
		IL_0122:
		OnPropertyChanged("LeftInventory");
		OnPropertyChanged("RightInventory");
	}

	protected override void OnDispose()
	{
		base.OnDispose();
		Interaction.PropertyChanged -= InteractionOnPropertyChanged;
		InteractedInventoryContainers = null;
		InteractorInventoryContainers = null;
	}

	public void ForEachInventory(Action<InventoryViewModel> visitor, bool left = true, bool right = true)
	{
		if (left)
		{
			Visit(_leftInventory);
		}
		if (right)
		{
			Visit(_rightInventory);
		}
		void Visit(InventoryListViewModel vm)
		{
			foreach (InventoryContainerViewModel inventoryContainer in vm.InventoryContainers)
			{
				foreach (InventoryViewModel inventory in inventoryContainer.Inventories)
				{
					visitor(inventory);
				}
			}
		}
	}

	private void SetInventoryContainer(ref ObservableList<InventoryContainerModel>? field, ObservableList<InventoryContainerModel>? value)
	{
		if (field != value)
		{
			if (field != null)
			{
				field.CollectionChanged -= InventoryContainersChanged;
			}
			field = value;
			if (field != null)
			{
				field.CollectionChanged += InventoryContainersChanged;
			}
		}
	}

	private void InteractionOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
	{
		InteractorInventoryContainers = Interaction.InteractorInventoryView?.InventoryContainers;
		InteractedInventoryContainers = Interaction.InteractedInventoryView?.InventoryContainers;
	}

	private void InventoryContainersChanged(object? sender, NotifyCollectionChangedEventArgs e)
	{
		UpdateInventoriesDebouncedAsync().SkipWait();
	}

	private async Task UpdateInventoriesDebouncedAsync()
	{
		_updateInventoriesRequested = true;
		if (!(await _updateInventoryLock.WaitAsync(0)))
		{
			return;
		}
		try
		{
			while (_updateInventoriesRequested)
			{
				_updateInventoriesRequested = false;
				await UpdateInventoriesAsync();
			}
		}
		finally
		{
			_updateInventoryLock.Release();
		}
	}

	private async Task UpdateInventoriesAsync()
	{
		using PooledList<Task<InventoryContainerViewModel?>> tasks = new PooledList<Task<InventoryContainerViewModel>>();
		if (InteractorInventoryContainers != null)
		{
			foreach (InventoryContainerModel interactorInventoryContainer in InteractorInventoryContainers)
			{
				tasks.Add(CreateInventoryContainerViewModel(interactorInventoryContainer));
			}
		}
		if (InteractedInventoryContainers != null)
		{
			foreach (InventoryContainerModel interactedInventoryContainer in InteractedInventoryContainers)
			{
				tasks.Add(CreateInventoryContainerViewModel(interactedInventoryContainer));
			}
		}
		using PooledList<InventoryContainerViewModel> allInventories = new PooledList<InventoryContainerViewModel>();
		PooledList<InventoryContainerViewModel> pooledList = allInventories;
		pooledList.AddRange((await Task.CollectResults(tasks.ToImmutableArray())).WhereNotNull());
		LeftInventory.SetInventories(CopyVMs(allInventories.Where(delegate(InventoryContainerViewModel inv)
		{
			if (inv.IsTrader)
			{
				return false;
			}
			if (inv.RootEntity.TryGet<CubeGridComponent>() != null)
			{
				return true;
			}
			return inv.IsCharacter ? true : false;
		})));
		RightInventory.SetInventories(CopyVMs(allInventories.Where((InventoryContainerViewModel inv) => !inv.IsTrader && !inv.IsCharacter)));
		using (Profiler.Begin("Terminal.Inventory.DisposeOriginalVMs", Profiler.Color.Null, 290, "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Client\\UI\\TerminalScreen\\Inventory\\GridInventoryViewModel.cs"))
		{
			allInventories.ForEach(delegate(InventoryContainerViewModel inv)
			{
				inv.DetachAndDispose();
			});
			allInventories.Clear();
		}
		LeftInventory.SelectFilters(InventoryPrimaryFilterType.Character);
		CubeBlockComponent cubeBlockComponent = Interaction.InteractionInfo.InteractedEntity?.TryGet<CubeBlockComponent>();
		if (cubeBlockComponent != null)
		{
			RightInventory.SelectFilters(InventoryPrimaryFilterType.Entity, cubeBlockComponent.Grid.Entity);
			return;
		}
		Entity interactedEntity = Interaction.InteractionInfo.InteractedEntity;
		if (interactedEntity != null)
		{
			RightInventory.SelectFilters(InventoryPrimaryFilterType.Entity, interactedEntity);
		}
		else
		{
			RightInventory.SetInventories(Array.Empty<InventoryContainerViewModel>());
		}
	}

	private IEnumerable<InventoryContainerViewModel> CopyVMs(IEnumerable<InventoryContainerViewModel> source)
	{
		foreach (InventoryContainerViewModel item in source)
		{
			yield return new InventoryContainerViewModel(item.Entity, item.Model, _factory, item.IsTrader);
		}
	}

	private async Task<InventoryContainerViewModel?> CreateInventoryContainerViewModel(InventoryContainerModel model)
	{
		Entity entity = await _replication.AwaitReplication(model.EntityId, this);
		if (entity == null)
		{
			return null;
		}
		bool trader = _mapping.GetServerComposite(entity.GetComposition()).Has<TraderComponent>();
		return new InventoryContainerViewModel(entity, model, _factory, trader);
	}

	private IComparable PrimaryFilterSortMethod(InventoryPrimaryFilterViewModel x)
	{
		bool flag = x.Entity?.TryGet<CubeBlockComponent>()?.Grid.Entity == Interaction.RootInteractedEntity;
		return (x.Entity?.TryGet<CharacterComponent>() == null, !flag, x.DisplayName.EvaluateText());
	}

	private IComparable InventoriesSortMethod(InventoryContainerViewModel x)
	{
		bool flag = x.Entity == Interaction.InteractionInfo.InteractedEntity;
		bool flag2 = x.Entity.TryGet<CubeBlockComponent>()?.Grid.Entity == Interaction.RootInteractedEntity;
		return (!flag, !x.IsCharacter, !flag2, !x.AnyConnected, x.IsContainerEmpty(), x.Model.DisplayName.EvaluateText());
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.IInventoryControl
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// Defines the interface for inventory controls
/// </summary>
public interface IInventoryControl
{
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.IInventoryEffects
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using Keen.Game2.Simulation.WorldObjects.Items;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// Plays audio for inventory actions
/// </summary>
public interface IInventoryEffects
{
	/// <summary>
	/// Pick up an item
	/// </summary>
	void PickupItem();

	/// <summary>
	/// Pick up an item
	/// </summary>
	void DropItem();

	/// <summary>
	/// Notify the result of an inventory item transfer
	/// </summary>
	void NotifyInventoryTransferResult(ItemTransferResult result, InventoryDefinition? inventory);
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Data;
using Avalonia.Data.Converters;
using Avalonia.Input;
using Avalonia.Layout;
using Avalonia.Markup.Xaml;
using Avalonia.Markup.Xaml.MarkupExtensions;
using Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindings;
using Avalonia.Markup.Xaml.Templates;
using Avalonia.Markup.Xaml.XamlIl.Runtime;
using Avalonia.Media;
using Avalonia.Media.Immutable;
using CompiledAvaloniaXaml;
using Keen.Game2.Client.UI.Converters;
using Keen.Game2.Client.UI.Library.Controls;
using Keen.VRage.Library.Units;
using Keen.VRage.UI.AvaloniaInterface.Services;
using Keen.VRage.UI.AvaloniaInterface.Utilities;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// Control for <see cref="T:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel" />
/// </summary>
[NeedsWindowStyles]
public class InventoryContainer : UserControl
{
	private class XamlClosure_1204
	{
		public static object Build(IServiceProvider P_0)
		{
			CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer> context = new CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer>(P_0, new object[1] { !AvaloniaResources.NamespaceInfo:/UI/TerminalScreen/Inventory/InventoryContainer.axaml.Singleton }, "avares://Game2.Client/UI/TerminalScreen/Inventory/InventoryContainer.axaml");
			if (P_0 != null)
			{
				object service = P_0.GetService(typeof(IRootObjectProvider));
				if (service != null)
				{
					service = ((IRootObjectProvider)service).RootObject;
					context.RootObject = (InventoryContainer)service;
				}
			}
			PercentageToForegroundConverter percentageToForegroundConverter;
			PercentageToForegroundConverter result = (percentageToForegroundConverter = new PercentageToForegroundConverter());
			context.PushParent(percentageToForegroundConverter);
			StaticResourceExtension staticResourceExtension = new StaticResourceExtension("Primary");
			context.ProvideTargetProperty = CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.Converters.PercentageToForegroundConverter,Game2.Client.InfoColor!Property();
			object? obj = staticResourceExtension.ProvideValue(context);
			context.ProvideTargetProperty = null;
			percentageToForegroundConverter.InfoColor = (IBrush)obj;
			StaticResourceExtension staticResourceExtension2 = new StaticResourceExtension("Warning");
			context.ProvideTargetProperty = CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.Converters.PercentageToForegroundConverter,Game2.Client.WarningColor!Property();
			object? obj2 = staticResourceExtension2.ProvideValue(context);
			context.ProvideTargetProperty = null;
			percentageToForegroundConverter.WarningColor = (IBrush)obj2;
			StaticResourceExtension staticResourceExtension3 = new StaticResourceExtension("Error");
			context.ProvideTargetProperty = CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.Converters.PercentageToForegroundConverter,Game2.Client.ErrorColor!Property();
			object? obj3 = staticResourceExtension3.ProvideValue(context);
			context.ProvideTargetProperty = null;
			percentageToForegroundConverter.ErrorColor = (IBrush)obj3;
			context.PopParent();
			return result;
		}
	}

	private class DynamicSetters_1205
	{
		public static void DynamicSetter_1(ToolTip P_0, CompiledBindingExtension P_1)
		{
			if (P_1 != null)
			{
				IBinding binding = P_1;
				P_0.Bind(ToolTip.TipProperty, binding);
			}
			else
			{
				ToolTip.SetTip(P_0, P_1);
			}
		}

		public static void DynamicSetter_2(Border P_0, object P_1)
		{
			if (P_1 is UnsetValueType)
			{
				P_0.SetValue(Border.BorderBrushProperty, AvaloniaProperty.UnsetValue);
				return;
			}
			if (P_1 is IBinding)
			{
				IBinding binding = (IBinding)P_1;
				P_0.Bind(Border.BorderBrushProperty, binding);
				return;
			}
			if (P_1 is IBrush)
			{
				P_0.BorderBrush = (IBrush?)P_1;
				return;
			}
			if (P_1 == null)
			{
				P_0.BorderBrush = (IBrush?)P_1;
				return;
			}
			throw new InvalidCastException();
		}

		public static void DynamicSetter_3(Decorator P_0, object P_1)
		{
			if (P_1 is UnsetValueType)
			{
				P_0.SetValue(Decorator.PaddingProperty, AvaloniaProperty.UnsetValue);
				return;
			}
			if (P_1 is IBinding)
			{
				IBinding binding = (IBinding)P_1;
				P_0.Bind(Decorator.PaddingProperty, binding);
				return;
			}
			if (P_1 is Thickness)
			{
				P_0.Padding = (Thickness)P_1;
				return;
			}
			if (P_1 == null)
			{
				throw new NullReferenceException();
			}
			throw new InvalidCastException();
		}
	}

	private class XamlClosure_1206
	{
		private class DynamicSetters_1207
		{
			public static void DynamicSetter_1(TextBlock P_0, object P_1)
			{
				if (P_1 is UnsetValueType)
				{
					P_0.SetValue(TextBlock.FontSizeProperty, AvaloniaProperty.UnsetValue);
					return;
				}
				if (P_1 is IBinding)
				{
					IBinding binding = (IBinding)P_1;
					P_0.Bind(TextBlock.FontSizeProperty, binding);
					return;
				}
				if (P_1 is double)
				{
					P_0.FontSize = (double)P_1;
					return;
				}
				if (P_1 == null)
				{
					throw new NullReferenceException();
				}
				throw new InvalidCastException();
			}

			public static void DynamicSetter_2(StackPanel P_0, object P_1)
			{
				if (P_1 is UnsetValueType)
				{
					P_0.SetValue(StackPanel.SpacingProperty, AvaloniaProperty.UnsetValue);
					return;
				}
				if (P_1 is IBinding)
				{
					IBinding binding = (IBinding)P_1;
					P_0.Bind(StackPanel.SpacingProperty, binding);
					return;
				}
				if (P_1 is double)
				{
					P_0.Spacing = (double)P_1;
					return;
				}
				if (P_1 == null)
				{
					throw new NullReferenceException();
				}
				throw new InvalidCastException();
			}
		}

		public static object Build(IServiceProvider P_0)
		{
			CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer> context = new CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer>(P_0, new object[1] { !AvaloniaResources.NamespaceInfo:/UI/TerminalScreen/Inventory/InventoryContainer.axaml.Singleton }, "avares://Game2.Client/UI/TerminalScreen/Inventory/InventoryContainer.axaml");
			if (P_0 != null)
			{
				object service = P_0.GetService(typeof(IRootObjectProvider));
				if (service != null)
				{
					service = ((IRootObjectProvider)service).RootObject;
					context.RootObject = (InventoryContainer)service;
				}
			}
			context.IntermediateRoot = new Grid();
			object intermediateRoot = context.IntermediateRoot;
			((ISupportInitialize)intermediateRoot).BeginInit();
			Grid grid = (Grid)intermediateRoot;
			context.PushParent(grid);
			RowDefinitions rowDefinitions = new RowDefinitions();
			rowDefinitions.Capacity = 2;
			rowDefinitions.Add(new RowDefinition(new GridLength(30.0, GridUnitType.Pixel)));
			rowDefinitions.Add(new RowDefinition(new GridLength(1.0, GridUnitType.Star)));
			grid.RowDefinitions = rowDefinitions;
			ColumnDefinitions columnDefinitions = new ColumnDefinitions();
			columnDefinitions.Capacity = 3;
			columnDefinitions.Add(new ColumnDefinition(new GridLength(25.0, GridUnitType.Pixel)));
			columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
			columnDefinitions.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
			grid.ColumnDefinitions = columnDefinitions;
			grid.Margin = new Thickness(0.0, 6.0, 0.0, 6.0);
			Controls children = grid.Children;
			Image image2;
			Image image = (image2 = new Image());
			((ISupportInitialize)image).BeginInit();
			children.Add(image);
			Image image4;
			Image image3 = (image4 = image2);
			context.PushParent(image4);
			Image image5 = image4;
			Grid.SetRow(image5, 0);
			Grid.SetColumn(image5, 0);
			image5.HorizontalAlignment = HorizontalAlignment.Left;
			image5.VerticalAlignment = VerticalAlignment.Bottom;
			image5.Margin = new Thickness(20.0, 12.0, 10.0, 12.0);
			image5.Width = 25.0;
			image5.Height = 25.0;
			CompiledBindingExtension compiledBindingExtension = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Model!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel,Game2.Simulation.IsConnected!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = "class:Connected";
			CompiledBindingExtension compiledBindingExtension2 = compiledBindingExtension.ProvideValue(context);
			context.ProvideTargetProperty = null;
			IBinding source = compiledBindingExtension2;
			image5.BindClass("Connected", source, null);
			CompiledBindingExtension compiledBindingExtension3 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Not().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Model!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel,Game2.Simulation.IsConnected!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor)
				.Build());
			context.ProvideTargetProperty = "class:NotConnected";
			CompiledBindingExtension compiledBindingExtension4 = compiledBindingExtension3.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension4;
			image5.BindClass("NotConnected", source, null);
			context.PopParent();
			((ISupportInitialize)image3).EndInit();
			Controls children2 = grid.Children;
			TextBlock textBlock2;
			TextBlock textBlock = (textBlock2 = new TextBlock());
			((ISupportInitialize)textBlock).BeginInit();
			children2.Add(textBlock);
			TextBlock textBlock4;
			TextBlock textBlock3 = (textBlock4 = textBlock2);
			context.PushParent(textBlock4);
			TextBlock textBlock5 = textBlock4;
			Grid.SetRow(textBlock5, 0);
			Grid.SetColumn(textBlock5, 1);
			textBlock5.HorizontalAlignment = HorizontalAlignment.Left;
			textBlock5.VerticalAlignment = VerticalAlignment.Bottom;
			textBlock5.FontWeight = FontWeight.Normal;
			StaticResourceExtension staticResourceExtension = new StaticResourceExtension("Text-Size-SmallVariant");
			context.ProvideTargetProperty = TextBlock.FontSizeProperty;
			object? obj = staticResourceExtension.ProvideValue(context);
			context.ProvideTargetProperty = null;
			DynamicSetters_1207.DynamicSetter_1(textBlock5, obj);
			textBlock5.TextTrimming = TextTrimming.CharacterEllipsis;
			textBlock5.TextWrapping = TextWrapping.NoWrap;
			textBlock5.Margin = new Thickness(0.0, 10.0, 0.0, 10.0);
			StyledProperty<string?> textProperty = TextBlock.TextProperty;
			CompiledBindingExtension compiledBindingExtension5 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Model!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel,Game2.Simulation.DisplayName!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = TextBlock.TextProperty;
			CompiledBindingExtension binding = compiledBindingExtension5.ProvideValue(context);
			context.ProvideTargetProperty = null;
			textBlock5.Bind(textProperty, binding);
			CompiledBindingExtension compiledBindingExtension6 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Not().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Model!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel,Game2.Simulation.IsConnected!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor)
				.Build());
			context.ProvideTargetProperty = "class:Disabled";
			CompiledBindingExtension compiledBindingExtension7 = compiledBindingExtension6.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension7;
			textBlock5.BindClass("Disabled", source, null);
			CompiledBindingExtension compiledBindingExtension8 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Error!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = "class:Error";
			CompiledBindingExtension compiledBindingExtension9 = compiledBindingExtension8.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension9;
			textBlock5.BindClass("Error", source, null);
			CompiledBindingExtension compiledBindingExtension10 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Not().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Error!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = "class:HighContrast";
			CompiledBindingExtension compiledBindingExtension11 = compiledBindingExtension10.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension11;
			textBlock5.BindClass("HighContrast", source, null);
			context.PopParent();
			((ISupportInitialize)textBlock3).EndInit();
			Controls children3 = grid.Children;
			StackPanel stackPanel2;
			StackPanel stackPanel = (stackPanel2 = new StackPanel());
			((ISupportInitialize)stackPanel).BeginInit();
			children3.Add(stackPanel);
			StackPanel stackPanel4;
			StackPanel stackPanel3 = (stackPanel4 = stackPanel2);
			context.PushParent(stackPanel4);
			StackPanel stackPanel5 = stackPanel4;
			Grid.SetRow(stackPanel5, 0);
			Grid.SetColumn(stackPanel5, 2);
			stackPanel5.Margin = new Thickness(1.0, 0.0, 1.0, 10.0);
			stackPanel5.Orientation = Orientation.Horizontal;
			StaticResourceExtension staticResourceExtension2 = new StaticResourceExtension("Spacing-Small");
			context.ProvideTargetProperty = StackPanel.SpacingProperty;
			object? obj2 = staticResourceExtension2.ProvideValue(context);
			context.ProvideTargetProperty = null;
			DynamicSetters_1207.DynamicSetter_2(stackPanel5, obj2);
			stackPanel5.HorizontalAlignment = HorizontalAlignment.Right;
			stackPanel5.VerticalAlignment = VerticalAlignment.Bottom;
			Controls children4 = stackPanel5.Children;
			StackPanel stackPanel7;
			StackPanel stackPanel6 = (stackPanel7 = new StackPanel());
			((ISupportInitialize)stackPanel6).BeginInit();
			children4.Add(stackPanel6);
			StackPanel stackPanel8 = (stackPanel4 = stackPanel7);
			context.PushParent(stackPanel4);
			StackPanel stackPanel9 = stackPanel4;
			stackPanel9.Orientation = Orientation.Horizontal;
			stackPanel9.VerticalAlignment = VerticalAlignment.Center;
			stackPanel9.Height = 32.0;
			Controls children5 = stackPanel9.Children;
			FormattedTextBlock formattedTextBlock2;
			FormattedTextBlock formattedTextBlock = (formattedTextBlock2 = new FormattedTextBlock());
			((ISupportInitialize)formattedTextBlock).BeginInit();
			children5.Add(formattedTextBlock);
			FormattedTextBlock formattedTextBlock4;
			FormattedTextBlock formattedTextBlock3 = (formattedTextBlock4 = formattedTextBlock2);
			context.PushParent(formattedTextBlock4);
			FormattedTextBlock formattedTextBlock5 = formattedTextBlock4;
			formattedTextBlock5.HorizontalAlignment = HorizontalAlignment.Right;
			formattedTextBlock5.VerticalAlignment = VerticalAlignment.Center;
			formattedTextBlock5.FontWeight = FontWeight.Light;
			StaticResourceExtension staticResourceExtension3 = new StaticResourceExtension("Text-Size-SmallVariant");
			context.ProvideTargetProperty = TextBlock.FontSizeProperty;
			object? obj3 = staticResourceExtension3.ProvideValue(context);
			context.ProvideTargetProperty = null;
			DynamicSetters_1207.DynamicSetter_1(formattedTextBlock5, obj3);
			DirectProperty<FormattedTextBlock, int> currentProperty = FormattedTextBlock.CurrentProperty;
			CompiledBindingExtension compiledBindingExtension12 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Model!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel,Game2.Simulation.Mass!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = FormattedTextBlock.CurrentProperty;
			CompiledBindingExtension binding2 = compiledBindingExtension12.ProvideValue(context);
			context.ProvideTargetProperty = null;
			formattedTextBlock5.Bind(currentProperty, binding2);
			CompiledBindingExtension compiledBindingExtension13 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Error!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = "class:Error";
			CompiledBindingExtension compiledBindingExtension14 = compiledBindingExtension13.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension14;
			formattedTextBlock5.BindClass("Error", source, null);
			CompiledBindingExtension compiledBindingExtension15 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Not().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Error!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = "class:Primary";
			CompiledBindingExtension compiledBindingExtension16 = compiledBindingExtension15.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension16;
			formattedTextBlock5.BindClass("Primary", source, null);
			formattedTextBlock5.Unit = Unit.Kilograms;
			context.PopParent();
			((ISupportInitialize)formattedTextBlock3).EndInit();
			Controls children6 = stackPanel9.Children;
			TextBlock textBlock7;
			TextBlock textBlock6 = (textBlock7 = new TextBlock());
			((ISupportInitialize)textBlock6).BeginInit();
			children6.Add(textBlock6);
			TextBlock textBlock8 = (textBlock4 = textBlock7);
			context.PushParent(textBlock4);
			TextBlock textBlock9 = textBlock4;
			textBlock9.HorizontalAlignment = HorizontalAlignment.Right;
			textBlock9.VerticalAlignment = VerticalAlignment.Center;
			textBlock9.FontWeight = FontWeight.Light;
			StaticResourceExtension staticResourceExtension4 = new StaticResourceExtension("Text-Size-SmallVariant");
			context.ProvideTargetProperty = TextBlock.FontSizeProperty;
			object? obj4 = staticResourceExtension4.ProvideValue(context);
			context.ProvideTargetProperty = null;
			DynamicSetters_1207.DynamicSetter_1(textBlock9, obj4);
			CompiledBindingExtension compiledBindingExtension17 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Error!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = "class:Error";
			CompiledBindingExtension compiledBindingExtension18 = compiledBindingExtension17.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension18;
			textBlock9.BindClass("Error", source, null);
			CompiledBindingExtension compiledBindingExtension19 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Not().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Error!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = "class:Primary";
			CompiledBindingExtension compiledBindingExtension20 = compiledBindingExtension19.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension20;
			textBlock9.BindClass("Primary", source, null);
			textBlock9.Text = "/";
			context.PopParent();
			((ISupportInitialize)textBlock8).EndInit();
			Controls children7 = stackPanel9.Children;
			FormattedTextBlock formattedTextBlock7;
			FormattedTextBlock formattedTextBlock6 = (formattedTextBlock7 = new FormattedTextBlock());
			((ISupportInitialize)formattedTextBlock6).BeginInit();
			children7.Add(formattedTextBlock6);
			FormattedTextBlock formattedTextBlock8 = (formattedTextBlock4 = formattedTextBlock7);
			context.PushParent(formattedTextBlock4);
			FormattedTextBlock formattedTextBlock9 = formattedTextBlock4;
			formattedTextBlock9.HorizontalAlignment = HorizontalAlignment.Right;
			formattedTextBlock9.VerticalAlignment = VerticalAlignment.Center;
			formattedTextBlock9.FontWeight = FontWeight.Light;
			CompiledBindingExtension compiledBindingExtension21 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Error!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = "class:Error";
			CompiledBindingExtension compiledBindingExtension22 = compiledBindingExtension21.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension22;
			formattedTextBlock9.BindClass("Error", source, null);
			CompiledBindingExtension compiledBindingExtension23 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Not().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Error!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = "class:Primary";
			CompiledBindingExtension compiledBindingExtension24 = compiledBindingExtension23.ProvideValue(context);
			context.ProvideTargetProperty = null;
			source = compiledBindingExtension24;
			formattedTextBlock9.BindClass("Primary", source, null);
			StaticResourceExtension staticResourceExtension5 = new StaticResourceExtension("Text-Size-SmallVariant");
			context.ProvideTargetProperty = TextBlock.FontSizeProperty;
			object? obj5 = staticResourceExtension5.ProvideValue(context);
			context.ProvideTargetProperty = null;
			DynamicSetters_1207.DynamicSetter_1(formattedTextBlock9, obj5);
			DirectProperty<FormattedTextBlock, int> currentProperty2 = FormattedTextBlock.CurrentProperty;
			CompiledBindingExtension compiledBindingExtension25 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Model!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel,Game2.Simulation.MaxMass!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = FormattedTextBlock.CurrentProperty;
			CompiledBindingExtension binding3 = compiledBindingExtension25.ProvideValue(context);
			context.ProvideTargetProperty = null;
			formattedTextBlock9.Bind(currentProperty2, binding3);
			formattedTextBlock9.Unit = Unit.Kilograms;
			context.PopParent();
			((ISupportInitialize)formattedTextBlock8).EndInit();
			context.PopParent();
			((ISupportInitialize)stackPanel8).EndInit();
			Controls children8 = stackPanel5.Children;
			ProgressBar progressBar2;
			ProgressBar progressBar = (progressBar2 = new ProgressBar());
			((ISupportInitialize)progressBar).BeginInit();
			children8.Add(progressBar);
			ProgressBar progressBar4;
			ProgressBar progressBar3 = (progressBar4 = progressBar2);
			context.PushParent(progressBar4);
			progressBar4.HorizontalAlignment = HorizontalAlignment.Right;
			progressBar4.VerticalAlignment = VerticalAlignment.Center;
			StyledProperty<double> valueProperty = RangeBase.ValueProperty;
			CompiledBindingExtension compiledBindingExtension26 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Mass!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = RangeBase.ValueProperty;
			CompiledBindingExtension binding4 = compiledBindingExtension26.ProvideValue(context);
			context.ProvideTargetProperty = null;
			progressBar4.Bind(valueProperty, binding4);
			StyledProperty<double> maximumProperty = RangeBase.MaximumProperty;
			CompiledBindingExtension compiledBindingExtension27 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.MaxMass!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = RangeBase.MaximumProperty;
			CompiledBindingExtension binding5 = compiledBindingExtension27.ProvideValue(context);
			context.ProvideTargetProperty = null;
			progressBar4.Bind(maximumProperty, binding5);
			progressBar4.Orientation = Orientation.Horizontal;
			progressBar4.Width = 192.0;
			progressBar4.Height = 16.0;
			progressBar4.Classes.Add("Simple");
			StyledProperty<IBrush?> foregroundProperty = TemplatedControl.ForegroundProperty;
			MultiBinding multiBinding;
			MultiBinding binding6 = (multiBinding = new MultiBinding());
			context.PushParent(multiBinding);
			StaticResourceExtension staticResourceExtension6 = new StaticResourceExtension("PercentageToForegroundConverter");
			context.ProvideTargetProperty = CompiledAvaloniaXaml.XamlIlHelpers.Avalonia.Data.MultiBinding,Avalonia.Markup.Converter!Property();
			object? obj6 = staticResourceExtension6.ProvideValue(context);
			context.ProvideTargetProperty = null;
			multiBinding.Converter = (IMultiValueConverter)obj6;
			IList<IBinding> bindings = multiBinding.Bindings;
			CompiledBindingExtension obj7 = new CompiledBindingExtension
			{
				Path = new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Mass!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build()
			};
			context.ProvideTargetProperty = CompiledAvaloniaXaml.XamlIlHelpers.Avalonia.Data.MultiBinding,Avalonia.Markup.Bindings!Property();
			CompiledBindingExtension item = obj7.ProvideValue(context);
			context.ProvideTargetProperty = null;
			bindings.Add(item);
			IList<IBinding> bindings2 = multiBinding.Bindings;
			CompiledBindingExtension obj8 = new CompiledBindingExtension
			{
				Path = new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.MaxMass!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build()
			};
			context.ProvideTargetProperty = CompiledAvaloniaXaml.XamlIlHelpers.Avalonia.Data.MultiBinding,Avalonia.Markup.Bindings!Property();
			CompiledBindingExtension item2 = obj8.ProvideValue(context);
			context.ProvideTargetProperty = null;
			bindings2.Add(item2);
			context.PopParent();
			progressBar4.Bind(foregroundProperty, binding6);
			progressBar4.RenderTransform = new RotateTransform
			{
				Angle = -180.0
			};
			context.PopParent();
			((ISupportInitialize)progressBar3).EndInit();
			Controls children9 = stackPanel5.Children;
			Image image7;
			Image image6 = (image7 = new Image());
			((ISupportInitialize)image6).BeginInit();
			children9.Add(image6);
			Image image8 = (image4 = image7);
			context.PushParent(image4);
			Image image9 = image4;
			StyledProperty<IImage?> sourceProperty = Image.SourceProperty;
			VRageDynamicResource vRageDynamicResource = new VRageDynamicResource("IconsConfiguration_InventoryIcon");
			context.ProvideTargetProperty = Image.SourceProperty;
			IBinding binding7 = vRageDynamicResource.ProvideValue(context);
			context.ProvideTargetProperty = null;
			image9.Bind(sourceProperty, binding7);
			image9.VerticalAlignment = VerticalAlignment.Center;
			image9.Width = 25.0;
			image9.Height = 25.0;
			context.PopParent();
			((ISupportInitialize)image8).EndInit();
			context.PopParent();
			((ISupportInitialize)stackPanel3).EndInit();
			Controls children10 = grid.Children;
			InventoryGrid inventoryGrid2;
			InventoryGrid inventoryGrid = (inventoryGrid2 = new InventoryGrid());
			((ISupportInitialize)inventoryGrid).BeginInit();
			children10.Add(inventoryGrid);
			InventoryGrid inventoryGrid4;
			InventoryGrid inventoryGrid3 = (inventoryGrid4 = inventoryGrid2);
			context.PushParent(inventoryGrid4);
			Grid.SetRow(inventoryGrid4, 1);
			Grid.SetColumn(inventoryGrid4, 0);
			Grid.SetColumnSpan(inventoryGrid4, 3);
			inventoryGrid4.HorizontalAlignment = HorizontalAlignment.Left;
			StyledProperty<bool> isEnabledProperty = InputElement.IsEnabledProperty;
			CompiledBindingExtension compiledBindingExtension28 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Model!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel,Game2.Simulation.IsConnected!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = InputElement.IsEnabledProperty;
			CompiledBindingExtension binding8 = compiledBindingExtension28.ProvideValue(context);
			context.ProvideTargetProperty = null;
			inventoryGrid4.Bind(isEnabledProperty, binding8);
			DirectProperty<InventoryGrid, int?> maxStacksProperty = InventoryGrid.MaxStacksProperty;
			CompiledBindingExtension compiledBindingExtension29 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel,Game2.Client.Model!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel,Game2.Simulation.MaxStacks!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
			context.ProvideTargetProperty = InventoryGrid.MaxStacksProperty;
			CompiledBindingExtension binding9 = compiledBindingExtension29.ProvideValue(context);
			context.ProvideTargetProperty = null;
			inventoryGrid4.Bind(maxStacksProperty, binding9);
			context.PopParent();
			((ISupportInitialize)inventoryGrid3).EndInit();
			context.PopParent();
			((ISupportInitialize)intermediateRoot).EndInit();
			return intermediateRoot;
		}
	}

	internal Border PART_Border;

	private static Action<object> !XamlIlPopulateOverride;

	public InventoryContainer()
	{
		InitializeComponent();
	}

	/// <summary>
	/// Wires up the controls and optionally loads XAML markup and attaches dev tools (if Avalonia.Diagnostics package is referenced).
	/// </summary>
	/// <param name="loadXaml">Should the XAML be loaded into the component.</param>
	public void InitializeComponent(bool loadXaml = true)
	{
		if (loadXaml)
		{
			!XamlIlPopulateTrampoline(this);
		}
		PART_Border = this.FindNameScope()?.Find<Border>("PART_Border");
	}

	static void !XamlIlPopulate(IServiceProvider P_0, InventoryContainer P_1)
	{
		CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer> context = new CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer>(P_0, new object[1] { !AvaloniaResources.NamespaceInfo:/UI/TerminalScreen/Inventory/InventoryContainer.axaml.Singleton }, "avares://Game2.Client/UI/TerminalScreen/Inventory/InventoryContainer.axaml");
		context.RootObject = P_1;
		context.IntermediateRoot = P_1;
		((ISupportInitialize)P_1).BeginInit();
		context.PushParent(P_1);
		((ResourceDictionary)P_1.Resources).AddDeferred((object)"PercentageToForegroundConverter", XamlIlRuntimeHelpers.DeferredTransformationFactoryV2<object>(XamlClosure_1204.Build, context));
		Grid grid2;
		Grid grid = (grid2 = new Grid());
		((ISupportInitialize)grid).BeginInit();
		P_1.Content = grid;
		Grid grid4;
		Grid grid3 = (grid4 = grid2);
		context.PushParent(grid4);
		ColumnDefinitions columnDefinitions = new ColumnDefinitions();
		columnDefinitions.Capacity = 2;
		columnDefinitions.Add(new ColumnDefinition(new GridLength(6.0, GridUnitType.Pixel)));
		columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
		grid4.ColumnDefinitions = columnDefinitions;
		grid4.Margin = new Thickness(0.0, 6.0, 0.0, 6.0);
		grid4.Background = new ImmutableSolidColorBrush(16777215u);
		CompiledBindingExtension compiledBindingExtension = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel,Game2.Client.ToolTipText!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
		context.ProvideTargetProperty = ToolTip.TipProperty;
		CompiledBindingExtension compiledBindingExtension2 = compiledBindingExtension.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1205.DynamicSetter_1((ToolTip)(object)grid4, compiledBindingExtension2);
		Controls children = grid4.Children;
		Border border2;
		Border border = (border2 = new Border());
		((ISupportInitialize)border).BeginInit();
		children.Add(border);
		Border border4;
		Border border3 = (border4 = border2);
		context.PushParent(border4);
		Grid.SetColumn(border4, 1);
		border4.Name = "PART_Border";
		object element = border4;
		context.AvaloniaNameScope.Register("PART_Border", element);
		StaticResourceExtension staticResourceExtension = new StaticResourceExtension("Primary");
		context.ProvideTargetProperty = Border.BorderBrushProperty;
		object? obj = staticResourceExtension.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1205.DynamicSetter_2(border4, obj);
		border4.BorderThickness = new Thickness(0.0, 0.0, 0.0, 0.0);
		StaticResourceExtension staticResourceExtension2 = new StaticResourceExtension("Margin-Medium-Horizontal");
		context.ProvideTargetProperty = Decorator.PaddingProperty;
		object? obj2 = staticResourceExtension2.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1205.DynamicSetter_3(border4, obj2);
		ItemsControl itemsControl2;
		ItemsControl itemsControl = (itemsControl2 = new ItemsControl());
		((ISupportInitialize)itemsControl).BeginInit();
		border4.Child = itemsControl;
		ItemsControl itemsControl4;
		ItemsControl itemsControl3 = (itemsControl4 = itemsControl2);
		context.PushParent(itemsControl4);
		StyledProperty<IEnumerable?> itemsSourceProperty = ItemsControl.ItemsSourceProperty;
		CompiledBindingExtension compiledBindingExtension3 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel,Game2.Client.Inventories!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
		context.ProvideTargetProperty = ItemsControl.ItemsSourceProperty;
		CompiledBindingExtension binding = compiledBindingExtension3.ProvideValue(context);
		context.ProvideTargetProperty = null;
		itemsControl4.Bind(itemsSourceProperty, binding);
		itemsControl4.Background = new ImmutableSolidColorBrush(16777215u);
		DataTemplate dataTemplate;
		DataTemplate itemTemplate = (dataTemplate = new DataTemplate());
		context.PushParent(dataTemplate);
		dataTemplate.DataType = typeof(InventoryViewModel);
		dataTemplate.Content = XamlIlRuntimeHelpers.DeferredTransformationFactoryV2<Control>(XamlClosure_1206.Build, context);
		context.PopParent();
		itemsControl4.ItemTemplate = itemTemplate;
		context.PopParent();
		((ISupportInitialize)itemsControl3).EndInit();
		context.PopParent();
		((ISupportInitialize)border3).EndInit();
		context.PopParent();
		((ISupportInitialize)grid3).EndInit();
		context.PopParent();
		((ISupportInitialize)P_1).EndInit();
		if (P_1 is StyledElement styled)
		{
			NameScope.SetNameScope(styled, context.AvaloniaNameScope);
		}
		context.AvaloniaNameScope.Complete();
	}

	private static void !XamlIlPopulateTrampoline(InventoryContainer P_0)
	{
		if (!XamlIlPopulateOverride != null)
		{
			!XamlIlPopulateOverride(P_0);
		}
		else
		{
			!XamlIlPopulate(XamlIlRuntimeHelpers.CreateRootServiceProviderV3(null), P_0);
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Reactive.Subjects;
using DynamicData;
using DynamicData.Binding;
using Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;
using Keen.Game2.Simulation.WorldObjects.Characters;
using Keen.Game2.Simulation.WorldObjects.CubeBlocks;
using Keen.VRage.Core.Game.Components;
using Keen.VRage.DCS.Components;
using Keen.VRage.Library.Extensions;
using Keen.VRage.Library.Reflection.DependencyInjections;
using Keen.VRage.UI.Screens;
using Keen.VRage.UI.Shared.ViewModels;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// View model allocated per block/entity found in interacted grid.
///
/// Handles all connected inventories to a block (there may be multiple).
/// </summary>
public class InventoryContainerViewModel : AttachedViewModel
{
	[Configuration]
	private GridInventoryConfiguration _configuration;

	private ReadOnlyObservableCollection<InventoryViewModel> _inventories;

	private SourceList<InventoryViewModel> _inventoryCache = new SourceList<InventoryViewModel>();

	private bool _showShortName;

	private Subject<Func<InventoryViewModel, bool>> _containerFilter = new Subject<Func<InventoryViewModel, bool>>();

	private BehaviorSubject<Func<InventoryItemModel, bool>> _itemFilter = new BehaviorSubject<Func<InventoryItemModel, bool>>((InventoryItemModel x) => true);

	private string _searchQuery = string.Empty;

	private bool _showEmpty = true;

	public InventoryContainerModel Model { get; }

	public Entity Entity { get; }

	public Entity RootEntity { get; }

	public bool IsCharacter { get; }

	public bool IsTrader { get; }

	public bool AnyAccessed => _inventories.Any((InventoryViewModel x) => x.Model.IsAccessed);

	public bool AnyConnected => _inventories.Any((InventoryViewModel x) => x.Model.IsConnected);

	public float TotalMaxMass => _inventories.Sum((InventoryViewModel x) => x.MaxMass);

	public float TotalMass => _inventories.Sum((InventoryViewModel x) => x.Mass);

	public string? ToolTipText
	{
		get
		{
			if (!AnyConnected)
			{
				return _configuration.DisabledInventoryTooltip.EvaluateText();
			}
			return null;
		}
	}

	public ReadOnlyObservableCollection<InventoryViewModel> Inventories => _inventories;

	public bool ShowShortName
	{
		get
		{
			return _showShortName;
		}
		set
		{
			if (value == _showShortName)
			{
				return;
			}
			_showShortName = value;
			OnPropertyChanged("ShowShortName");
			if (Entity != RootEntity)
			{
				_inventoryCache.Items.ForEach(delegate(InventoryViewModel x)
				{
					x.Model.DisplayParentName = !_showShortName;
				});
			}
		}
	}

	public event Action<InventoryViewModel>? InventoryChanged;

	public InventoryContainerViewModel(Entity entity, InventoryContainerModel model, IViewModelFactory factory, bool trader)
		: base(factory)
	{
		Model = model;
		Entity = entity;
		RootEntity = Entity.TryGet<CubeBlockComponent>()?.Grid.Entity ?? Entity;
		IsCharacter = Entity.TryGet<CharacterComponent>() != null;
		IsTrader = trader;
		Model.Inventories.CollectionChanged += InventoriesChanged;
		_inventoryCache.Connect().Sort(SortExpressionComparer<InventoryViewModel>.Ascending((InventoryViewModel x) => x.Model.DisplayName)).Filter(_containerFilter)
			.Bind(out _inventories)
			.Subscribe();
		_containerFilter.OnNext((InventoryViewModel _) => true);
		_itemFilter.OnNext((InventoryItemModel _) => true);
		InventoriesChanged(null, null);
	}

	protected override void OnDispose()
	{
		base.OnDispose();
		Model.Inventories.CollectionChanged -= InventoriesChanged;
	}

	public bool IsContainerEmpty()
	{
		Func<InventoryItemModel, bool> value = _itemFilter.Value;
		foreach (InventoryViewModel inventory in Inventories)
		{
			if (inventory.Model.Items.Where(value).Count() != 0)
			{
				return false;
			}
		}
		return true;
	}

	private void InventoriesChanged(object? sender, NotifyCollectionChangedEventArgs? e)
	{
		foreach (InventoryViewModel item in _inventoryCache.Items)
		{
			item.PropertyChanged -= ViewModelOnPropertyChanged;
			item.DetachAndDispose();
		}
		_inventoryCache.Clear();
		foreach (InventoryModel inventory in Model.Inventories)
		{
			InventoryViewModel inventoryViewModel = new InventoryViewModel(Entity.GetSession(), inventory, _itemFilter, this);
			inventoryViewModel.PropertyChanged += ViewModelOnPropertyChanged;
			Attach(inventoryViewModel);
			_inventoryCache.Add(inventoryViewModel);
		}
		_itemFilter.OnNext((InventoryItemModel _) => true);
	}

	private void ViewModelOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
	{
		if (e.PropertyName == "Mass")
		{
			OnPropertyChanged("TotalMass");
		}
		else if (e.PropertyName == "MaxMass")
		{
			OnPropertyChanged("TotalMaxMass");
		}
	}

	public void ItemsChanged(InventoryViewModel inventoryViewModel)
	{
		InventoryChanged.InvokeIfNotNull(inventoryViewModel);
	}

	public void SetSearchQuery(string value)
	{
		_searchQuery = value;
		ApplyAllFilters();
		_itemFilter.OnNext((InventoryItemModel x) => string.IsNullOrWhiteSpace(_searchQuery) || x.Name.ToString().Contains(_searchQuery, StringComparison.OrdinalIgnoreCase));
	}

	public void SetEmptyFilter(bool showEmpty)
	{
		_showEmpty = showEmpty;
		ApplyAllFilters();
	}

	private void ApplyAllFilters()
	{
		bool isSearching = !string.IsNullOrWhiteSpace(_searchQuery);
		_containerFilter.OnNext(delegate(InventoryViewModel inventory)
		{
			if (isSearching && inventory.InventoryItems.Count == 0)
			{
				return false;
			}
			if (!isSearching && !_showEmpty && inventory.InventoryItems.Count == 0)
			{
				return false;
			}
			if (isSearching)
			{
				bool flag = inventory.Model.DisplayName.Contains(_searchQuery, StringComparison.OrdinalIgnoreCase);
				bool flag2 = inventory.InventoryItems.Any((InventoryItemModel item) => item.Name.ToString().Contains(_searchQuery, StringComparison.OrdinalIgnoreCase));
				if (!flag && !flag2)
				{
					return false;
				}
			}
			return true;
		});
	}

	public override string ToString()
	{
		return Model.DisplayName.EvaluateText();
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using Avalonia;
using Avalonia.Controls.Primitives;
using Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;
using Keen.VRage.Library.Collections;
using Keen.VRage.Library.Utils;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
///
/// </summary>
public class InventoryContainers : TemplatedControl
{
	public static readonly DirectProperty<InventoryContainers, ObservableList<InventoryContainerModel>?> ContainersProperty = AvaloniaProperty.RegisterDirect("Containers", (InventoryContainers o) => o.Containers, delegate(InventoryContainers o, ObservableList<InventoryContainerModel>? v)
	{
		o.Containers = v;
	});

	public static readonly DirectProperty<InventoryContainers, bool> FilterEnabledProperty = AvaloniaProperty.RegisterDirect("FilterEnabled", (InventoryContainers o) => o.FilterEnabled, delegate(InventoryContainers o, bool v)
	{
		o.FilterEnabled = v;
	}, unsetValue: false);

	public static readonly StyledProperty<InventoryContainerModel?> FocusedContainerProperty = AvaloniaProperty.Register<InventoryContainers, InventoryContainerModel>("FocusedContainer");

	public static readonly StyledProperty<string> SearchQueryProperty = AvaloniaProperty.Register<InventoryContainers, string>("SearchQuery", string.Empty);

	private ObservableList<InventoryContainerModel>? _containers;

	private ObservableList<InventoryContainerModel> _sortedContainers = new ObservableList<InventoryContainerModel>();

	private bool _filterEnabled = true;

	private ObservableList<InventoryContainerModel>? Containers
	{
		get
		{
			return _sortedContainers;
		}
		set
		{
			if (_containers != null)
			{
				_containers.CollectionChanged -= ContainersOnPropertyChanged;
			}
			_containers = value;
			if (_containers != null)
			{
				_containers.CollectionChanged += ContainersOnPropertyChanged;
			}
			UpdateContent();
			RaisePropertyChanged(ContainersProperty, null, _sortedContainers);
		}
	}

	private bool IsSearching
	{
		get
		{
			if (!string.IsNullOrWhiteSpace(GetValue(SearchQueryProperty)))
			{
				return FilterEnabled;
			}
			return false;
		}
	}

	public string SearchQuery
	{
		get
		{
			return GetValue(SearchQueryProperty);
		}
		set
		{
			SetValue(SearchQueryProperty, value);
		}
	}

	public bool FilterEnabled
	{
		get
		{
			return _filterEnabled;
		}
		set
		{
			bool filterEnabled = _filterEnabled;
			_filterEnabled = value;
			UpdateContent();
			RaisePropertyChanged(FilterEnabledProperty, filterEnabled, _filterEnabled);
			RaisePropertyChanged(ContainersProperty, null, _sortedContainers);
		}
	}

	private InventoryContainerModel? FocusedContainer
	{
		get
		{
			return GetValue(FocusedContainerProperty);
		}
		set
		{
			SetValue(FocusedContainerProperty, value);
		}
	}

	protected override void OnInitialized()
	{
		base.OnInitialized();
		base.PropertyChanged += delegate(object? _, AvaloniaPropertyChangedEventArgs args)
		{
			if (args.Property == SearchQueryProperty)
			{
				UpdateContent();
			}
		};
	}

	private void ContainersOnPropertyChanged(object? sender, NotifyCollectionChangedEventArgs e)
	{
		UpdateContent();
	}

	private void UpdateContent()
	{
		_sortedContainers.Clear();
		if (!_filterEnabled || _containers == null || _containers.Count == 0)
		{
			return;
		}
		using (PooledList<InventoryContainerModel> pooledList = new PooledList<InventoryContainerModel>(_containers.Count))
		{
			string[] filters = SearchQuery.Split(' ');
			IEnumerable<InventoryContainerModel> enumerable;
			if (!IsSearching)
			{
				IEnumerable<InventoryContainerModel> containers = _containers;
				enumerable = containers;
			}
			else
			{
				enumerable = _containers.Where((InventoryContainerModel c) => filters.Aggregate(seed: true, (bool current, string filter) => current && c.DisplayName.EvaluateText().Contains(filter, StringComparison.InvariantCultureIgnoreCase)) || c.Inventories.Any((InventoryModel inv) => inv.Items.Any((InventoryItemModel item) => filters.Aggregate(seed: true, (bool current, string filter) => current && item.Name.EvaluateText().Contains(filter, StringComparison.InvariantCultureIgnoreCase)))));
			}
			IEnumerable<InventoryContainerModel> items = enumerable;
			pooledList.AddRange(items);
			pooledList.Sort(ContainersComparator);
			_sortedContainers.AddRange(pooledList);
		}
		int ContainersComparator(InventoryContainerModel a, InventoryContainerModel b)
		{
			if (a != FocusedContainer)
			{
				if (b != FocusedContainer)
				{
					return ImmutableSingleton<AlphabeticalComparer>.Instance.Compare(a.DisplayName.EvaluateText(), b.DisplayName.EvaluateText());
				}
				return 1;
			}
			return -1;
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
#define FEATURE_ASSERTIONS
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using Keen.Game2.Client.UI.HUD.Toolbar.ToolbarState;
using Keen.Game2.Client.UI.InGame;
using Keen.Game2.Client.UI.Library.Controls.QuickMenu;
using Keen.Game2.Simulation.GameSystems.Toolbars;
using Keen.Game2.Simulation.StreamedUI.Terminal;
using Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Audio;
using Keen.VRage.Core.Game.Components;
using Keen.VRage.Core.Game.GameSystems.Audio;
using Keen.VRage.Core.Game.Systems;
using Keen.VRage.DCS.Annotations;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.Library.Reflection.DependencyInjections;
using Keen.VRage.Library.Utils;
using Keen.VRage.Multiplayer.Annotations;
using Keen.VRage.UI.EngineComponents;
using Keen.VRage.UI.Screens;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <inheritdoc cref="T:Keen.Game2.Client.UI.TerminalScreen.Inventory.IInventoryEffects" />&gt;
public class InventoryEffectsSessionComponent : SessionComponent, IInventoryEffects, IInSceneListener
{
	private ToolbarSelection _currentToolbarIndex;

	private IObservableDisposable? _terminalScreen;

	private TerminalScreenViewModel? _terminalScreenViewModel;

	[Configuration]
	private InventoryEffectsSessionComponentConfiguration _configuration;

	[Service]
	private IAudioManager _audio;

	[Service]
	private UIEngineComponent _ui;

	[Component]
	private PlayerToolbarStateSessionComponent _toolbarState;

	private IAudioEventInstance? _errorAudio;

	private bool IsTerminalOpen => _terminalScreen != null;

	void IInSceneListener.OnAddedToScene()
	{
		_currentToolbarIndex = _toolbarState.Selection;
		_toolbarState.OnToolbarSelectionChanged += OnToolbarSelectionChanged;
		_toolbarState.Tiles.CollectionChanged += OnToolbarTilesCollectionChanged;
		OnToolbarTilesCollectionChanged(null, null);
		_ui.ScreenManager.OnScreenOpened += OnScreenOpened;
	}

	void IInSceneListener.OnBeforeRemovedFromScene()
	{
		if (IsTerminalOpen)
		{
			DetachFromTerminal(playAudio: false);
		}
		_toolbarState.Tiles.CollectionChanged -= OnToolbarTilesCollectionChanged;
		_toolbarState.OnToolbarSelectionChanged -= OnToolbarSelectionChanged;
		_ui.ScreenManager.OnScreenOpened -= OnScreenOpened;
		_errorAudio?.Dispose();
		_errorAudio = null;
	}

	private void OnToolbarSelectionChanged(ToolbarTile? tile)
	{
		ToolbarSelection currentToolbarIndex = _currentToolbarIndex;
		ToolbarSelection selection = _toolbarState.Selection;
		ToolbarSelection toolbarSelection = currentToolbarIndex;
		_currentToolbarIndex = selection;
		if (toolbarSelection.ToolbarIndexIndex != _currentToolbarIndex.ToolbarIndexIndex)
		{
			_configuration.OnChangeToolbarAudioEvent?.Play(_audio);
		}
		else if (!IsTerminalOpen && tile != null && toolbarSelection.TileIndex != _currentToolbarIndex.TileIndex && _configuration.OnToolbarLoadUnloadAudioEvent.HasValue)
		{
			IAudioEventInstance audioEventInstance = _audio.CreateAudioEventInstance(_configuration.OnToolbarLoadUnloadAudioEvent.Value);
			StringId stringId = ((tile is DeselectTile) ? _configuration.OnToolbarLoadUnloadParameterOffValue : _configuration.OnToolbarLoadUnloadParameterOnValue);
			audioEventInstance.TrySetParameterFromString(_configuration.OnToolbarLoadUnloadParameter, stringId);
			audioEventInstance.Play();
			audioEventInstance.Dispose();
		}
	}

	private void OnToolbarTilesCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
	{
		foreach (ObservableCollection<ToolbarTile> tile in _toolbarState.Tiles)
		{
			tile.CollectionChanged -= OnToolbarTilesChanged;
			tile.CollectionChanged += OnToolbarTilesChanged;
		}
	}

	private void OnToolbarTilesChanged(object? sender, NotifyCollectionChangedEventArgs e)
	{
		if (e.NewItems?[0] is EmptyToolbarTile)
		{
			_configuration.OnRemoveToolbarTileAudioEvent?.Play(_audio);
		}
		else
		{
			_configuration.OnChangeToolbarTileAudioEvent?.Play(_audio);
		}
	}

	public void PickupItem()
	{
		_configuration.OnObjectClickAudioEvent?.Play(_audio);
	}

	[StreamedInventorySessionComponent.OnItemDroppedSignal]
	[Clients]
	public void DropItem()
	{
		_configuration.OnObjectDropAudioEvent?.Play(_audio);
	}

	[SessionInGameUISessionComponent.OnTerminalOpenedSignal]
	private void OnTerminalScreenOpened(IObservableDisposable terminalScreen, TerminalScreenViewModel terminalScreenViewModel, InteractionInfo interactionInfo)
	{
		if (IsTerminalOpen)
		{
			DetachFromTerminal(playAudio: false);
		}
		AttachToTerminal(terminalScreen, terminalScreenViewModel);
	}

	private void AttachToTerminal(IObservableDisposable screen, TerminalScreenViewModel vm)
	{
		Assert.Null(_terminalScreen, null, "_terminalScreen", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Client\\UI\\TerminalScreen\\Inventory\\InventoryEffectsSessionComponent.cs", 159);
		Assert.Null(_terminalScreenViewModel, null, "_terminalScreenViewModel", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Client\\UI\\TerminalScreen\\Inventory\\InventoryEffectsSessionComponent.cs", 160);
		_terminalScreen = screen;
		_terminalScreenViewModel = vm;
		_terminalScreenViewModel.GScreenPropertyChanged += GScreenOnPropertyChanged;
		_terminalScreenViewModel.OnStartDragItem += OnStartDragItem;
		_terminalScreenViewModel.BeforeItemTransfer += OnTransferItem;
		PlayOpenAudio();
	}

	private void DetachFromTerminal(bool playAudio)
	{
		if (_terminalScreen != null)
		{
			_terminalScreen = null;
			if (playAudio)
			{
				PlayCloseAudio();
			}
		}
		if (_terminalScreenViewModel != null)
		{
			_terminalScreenViewModel.GScreenPropertyChanged -= GScreenOnPropertyChanged;
			_terminalScreenViewModel.OnStartDragItem -= OnStartDragItem;
			_terminalScreenViewModel.BeforeItemTransfer -= OnTransferItem;
			_terminalScreenViewModel = null;
		}
	}

	[SessionInGameUISessionComponent.OnTerminalClosedSignal]
	private void OnTerminalClosed(IObservableDisposable screen, TerminalScreenViewModel terminalScreenViewModel, InteractionInfo interactionInfo)
	{
		DetachFromTerminal(playAudio: true);
	}

	private void PlayOpenAudio()
	{
		_configuration.OnTerminalScreenToggleAudioEvent?.PlayOneShot(_audio);
	}

	private void PlayCloseAudio()
	{
		AudioEvent? onTerminalScreenToggleAudioEvent = _configuration.OnTerminalScreenToggleAudioEvent;
		if (!onTerminalScreenToggleAudioEvent.HasValue)
		{
			return;
		}
		AudioEvent valueOrDefault = onTerminalScreenToggleAudioEvent.GetValueOrDefault();
		using IAudioEventInstance audioEventInstance = _audio.CreateAudioEventInstance(valueOrDefault);
		if (audioEventInstance.TryGetParameterFromString(_configuration.TerminalScreenToggleParameter, out var parameter))
		{
			audioEventInstance.SetParameter(parameter, _configuration.TerminalScreenToggleParameterOffValue);
		}
		audioEventInstance.Play();
	}

	private void OnStartDragItem()
	{
		_configuration.OnSelectGScreenTileAudioEvent?.Play(_audio);
	}

	private void OnTransferItem()
	{
		_configuration.OnChangeToolbarTileAudioEvent?.Play(_audio);
	}

	private void GScreenOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
	{
		string propertyName = e.PropertyName;
		if (propertyName == "LastSelectedTileDetail")
		{
			OnStartDragItem();
		}
	}

	private void OnScreenOpened(ScreenView screen)
	{
		if (screen is QuickMenuScreen)
		{
			_configuration.OnQuickMenuOpenAudioEvent?.Play(_audio);
			screen.OnStateChanged += OnScreenOnOnStateChanged;
			screen.OnDisposed += delegate
			{
				screen.OnStateChanged -= OnScreenOnOnStateChanged;
			};
		}
		void OnScreenOnOnStateChanged(ScreenLifetimeState state)
		{
			if (state == ScreenLifetimeState.Closed)
			{
				_configuration.OnQuickMenuClosedAudioEvent?.Play(_audio);
			}
		}
	}

	[SessionInGameUISessionComponent.OnNotifyEnqueueProductionItemSignal]
	private void OnNotifyEnqueueProductionItem()
	{
		_configuration.OnProductionItemAddedAudioEvent?.Play(_audio);
	}

	[SessionInGameUISessionComponent.OnNotifyProductionErrorSignal]
	private void OnNotifyProductionError()
	{
		_configuration.OnProductionErrorAudioEvent?.Play(_audio);
	}

	[SessionInGameUISessionComponent.OnNotifyStartBackpackProductionItemSignal]
	private void OnNotifyStartBackpackProductionItem()
	{
		_configuration.OnBackpackProductionStartAudioEvent?.Play(_audio);
	}

	public void NotifyInventoryTransferResult(ItemTransferResult result, InventoryDefinition? inventory)
	{
		if (result != ItemTransferResult.ErrorFit && result != ItemTransferResult.ErrorFull)
		{
			return;
		}
		AudioEvent? onCharacterInventoryFullAudioEvent;
		if (inventory == _configuration.CharacterInventory)
		{
			onCharacterInventoryFullAudioEvent = _configuration.OnCharacterInventoryFullAudioEvent;
			if (onCharacterInventoryFullAudioEvent.HasValue)
			{
				AudioEvent valueOrDefault = onCharacterInventoryFullAudioEvent.GetValueOrDefault();
				if (_errorAudio == null || _errorAudio.Path != valueOrDefault)
				{
					_errorAudio?.Dispose();
					_errorAudio = _audio.CreateAudioEventInstance(valueOrDefault);
				}
				if (!_errorAudio.IsPlaying)
				{
					_errorAudio.Play();
				}
			}
			return;
		}
		onCharacterInventoryFullAudioEvent = _configuration.OnInventoryFullAudioEvent;
		if (onCharacterInventoryFullAudioEvent.HasValue)
		{
			AudioEvent valueOrDefault2 = onCharacterInventoryFullAudioEvent.GetValueOrDefault();
			if (_errorAudio == null || _errorAudio.Path != valueOrDefault2)
			{
				_errorAudio?.Dispose();
				_errorAudio = _audio.CreateAudioEventInstance(valueOrDefault2);
			}
			if (!_errorAudio.IsPlaying)
			{
				_errorAudio.Play();
			}
		}
	}

	public void NotifyRareLoot()
	{
		_configuration.OnOpenRareLootContainerAudioEvent?.Play(_audio);
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Core.Game.GameSystems.Audio;
using Keen.VRage.Core.Game.GameSystems.Audio.Suggesters;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Binary;
using Keen.VRage.Library.Serialization.Json;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.ObjectBuilders;
using Keen.VRage.Library.Serialization.Serializers;
using Keen.VRage.Library.Serialization.Validation;
using Keen.VRage.Library.Utils;
using Keen.VRage.Library.Utils.Cloning;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// <see cref="T:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent" />
/// </summary>
[NameMigration("0.12.3.718", "Keen.Game2.Game.UI.Terminal.Inventory.InventoryEffectsSessionComponentConfiguration", "Keen.VRage.Animation.Client.Configurations.InventoryEffectsSessionComponentConfiguration")]
[Cloneable]
[DoNotValidateMembers(new string[]
{
	"OnTerminalScreenToggleAudio", "TerminalScreenToggleParameter", "TerminalScreenToggleParameterOffValue", "OnObjectClickAudio", "OnChangeToolbarAudio", "OnToolbarTileSelectedAudio", "OnToolbarTileActivatedAudio", "OnToolbarTileDeselectedAudio", "OnChangeToolbarTileAudio", "OnRemoveToolbarTileAudio",
	"OnSelectGScreenTileAudio", "OnSearchGScreenAddAudio", "OnSearchGScreenRemoveAudio", "OnQuickMenuOpenAudio", "OnQuickMenuClosedAudio", "OnObjectDropAudio", "OnProductionItemAddedAudio", "OnProductionErrorAudio", "OnInventoryFullAudio", "OnCharacterInventoryFullAudio",
	"CharacterInventory", "OnOpenRareLootContainerAudio", "OnBackpackProductionStartAudio", "OnToolbarLoadUnloadAudio", "OnToolbarLoadUnloadParameter", "OnToolbarLoadUnloadParameterOnValue", "OnToolbarLoadUnloadParameterOffValue"
})]
public class InventoryEffectsSessionComponentConfiguration : Configuration, ISerializable<InventoryEffectsSessionComponentConfiguration>, ISerializable, IObjectBuilderInitializable<InventoryEffectsSessionComponentConfigurationObjectBuilder>, IObjectBuilderInitializable, IDeepCloneable<InventoryEffectsSessionComponentConfiguration>, IAccessible
{
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public new class Serializer : ObjectBuilderInitializer<InventoryEffectsSessionComponentConfiguration, InventoryEffectsSessionComponentConfigurationObjectBuilder>, INamedObjectSerializer<InventoryEffectsSessionComponentConfiguration>, INamedObjectSerializer, ISerializer
	{
		/// <inheritdoc />
		public new static readonly Serializer Instance = new Serializer();

		/// <inheritdoc />
		ISerializer<InventoryEffectsSessionComponentConfiguration> INamedObjectSerializer<InventoryEffectsSessionComponentConfiguration>.NameSerializer => ImmutableSingleton<NameProxySerializer<InventoryEffectsSessionComponentConfiguration, Guid>>.Instance;

		/// <inheritdoc />
		ISerializer INamedObjectSerializer.NameSerializer => ImmutableSingleton<NameProxySerializer<InventoryEffectsSessionComponentConfiguration, Guid>>.Instance;

		/// <inheritdoc />
		Type INamedObjectSerializer.NameType => typeof(Guid);

		/// <inheritdoc />
		bool INamedObjectSerializer<InventoryEffectsSessionComponentConfiguration>.ShouldSerializeAsName(SerializationContext context, in InventoryEffectsSessionComponentConfiguration value)
		{
			return ((ISerializableNamedObject<Guid>)value).ShouldSerializeAsName(context);
		}

		/// <inheritdoc />
		bool INamedObjectSerializer.ShouldSerializeAsName(SerializationContext context, in object value)
		{
			return ((INamedObjectSerializer<InventoryEffectsSessionComponentConfiguration>)this).ShouldSerializeAsName(context, (InventoryEffectsSessionComponentConfiguration)value);
		}
	}

	private class Cloner : IDeepCloner<InventoryEffectsSessionComponentConfiguration>, IDeepCloner
	{
		InventoryEffectsSessionComponentConfiguration IDeepCloner<InventoryEffectsSessionComponentConfiguration>.Clone(InventoryEffectsSessionComponentConfiguration value, ref CloningContext context)
		{
			if (((ICloneableNamedObject)value).UseShallowCopy(ref context))
			{
				return value;
			}
			ref InventoryEffectsSessionComponentConfiguration reference = ref context.ClonedOrNullRef(value);
			if (!Unsafe.IsNullRef(in reference))
			{
				return reference;
			}
			return new InventoryEffectsSessionComponentConfiguration(in value, ref context);
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public new class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 61;

		static TypeInfoHolder()
		{
			int num = 11;
			RawAccessors = new(string, IMemberAccessor)[48]
			{
				("OnTerminalScreenToggleAudio", OnTerminalScreenToggleAudioAccessor()),
				("TerminalScreenToggleParameter", TerminalScreenToggleParameterAccessor()),
				("TerminalScreenToggleParameterOffValue", TerminalScreenToggleParameterOffValueAccessor()),
				("OnObjectClickAudio", OnObjectClickAudioAccessor()),
				("OnChangeToolbarAudio", OnChangeToolbarAudioAccessor()),
				("OnToolbarTileSelectedAudio", OnToolbarTileSelectedAudioAccessor()),
				("OnToolbarTileActivatedAudio", OnToolbarTileActivatedAudioAccessor()),
				("OnToolbarTileDeselectedAudio", OnToolbarTileDeselectedAudioAccessor()),
				("OnChangeToolbarTileAudio", OnChangeToolbarTileAudioAccessor()),
				("OnRemoveToolbarTileAudio", OnRemoveToolbarTileAudioAccessor()),
				("OnSelectGScreenTileAudio", OnSelectGScreenTileAudioAccessor()),
				("OnSearchGScreenAddAudio", OnSearchGScreenAddAudioAccessor()),
				("OnSearchGScreenRemoveAudio", OnSearchGScreenRemoveAudioAccessor()),
				("OnQuickMenuOpenAudio", OnQuickMenuOpenAudioAccessor()),
				("OnQuickMenuClosedAudio", OnQuickMenuClosedAudioAccessor()),
				("OnObjectDropAudio", OnObjectDropAudioAccessor()),
				("OnProductionItemAddedAudio", OnProductionItemAddedAudioAccessor()),
				("OnProductionErrorAudio", OnProductionErrorAudioAccessor()),
				("OnInventoryFullAudio", OnInventoryFullAudioAccessor()),
				("OnCharacterInventoryFullAudio", OnCharacterInventoryFullAudioAccessor()),
				("CharacterInventory", CharacterInventoryAccessor()),
				("OnOpenRareLootContainerAudio", OnOpenRareLootContainerAudioAccessor()),
				("OnBackpackProductionStartAudio", OnBackpackProductionStartAudioAccessor()),
				("OnToolbarLoadUnloadAudio", OnToolbarLoadUnloadAudioAccessor()),
				("OnToolbarLoadUnloadParameter", OnToolbarLoadUnloadParameterAccessor()),
				("OnToolbarLoadUnloadParameterOnValue", OnToolbarLoadUnloadParameterOnValueAccessor()),
				("OnToolbarLoadUnloadParameterOffValue", OnToolbarLoadUnloadParameterOffValueAccessor()),
				("OnTerminalScreenToggleAudioEvent", OnTerminalScreenToggleAudioEventAccessor()),
				("OnObjectClickAudioEvent", OnObjectClickAudioEventAccessor()),
				("OnObjectDropAudioEvent", OnObjectDropAudioEventAccessor()),
				("OnChangeToolbarAudioEvent", OnChangeToolbarAudioEventAccessor()),
				("OnRemoveToolbarTileAudioEvent", OnRemoveToolbarTileAudioEventAccessor()),
				("OnToolbarTileSelectedAudioEvent", OnToolbarTileSelectedAudioEventAccessor()),
				("OnToolbarTileActivatedAudioEvent", OnToolbarTileActivatedAudioEventAccessor()),
				("OnToolbarTileDeselectedAudioEvent", OnToolbarTileDeselectedAudioEventAccessor()),
				("OnChangeToolbarTileAudioEvent", OnChangeToolbarTileAudioEventAccessor()),
				("OnSelectGScreenTileAudioEvent", OnSelectGScreenTileAudioEventAccessor()),
				("OnSearchGScreenAddAudioEvent", OnSearchGScreenAddAudioEventAccessor()),
				("OnSearchGScreenRemoveAudioEvent", OnSearchGScreenRemoveAudioEventAccessor()),
				("OnQuickMenuOpenAudioEvent", OnQuickMenuOpenAudioEventAccessor()),
				("OnQuickMenuClosedAudioEvent", OnQuickMenuClosedAudioEventAccessor()),
				("OnProductionItemAddedAudioEvent", OnProductionItemAddedAudioEventAccessor()),
				("OnProductionErrorAudioEvent", OnProductionErrorAudioEventAccessor()),
				("OnBackpackProductionStartAudioEvent", OnBackpackProductionStartAudioEventAccessor()),
				("OnInventoryFullAudioEvent", OnInventoryFullAudioEventAccessor()),
				("OnCharacterInventoryFullAudioEvent", OnCharacterInventoryFullAudioEventAccessor()),
				("OnOpenRareLootContainerAudioEvent", OnOpenRareLootContainerAudioEventAccessor()),
				("OnToolbarLoadUnloadAudioEvent", OnToolbarLoadUnloadAudioEventAccessor())
			};
			string documentation = null;
			MemberInfo[] array = new MemberInfo[50]
			{
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnTerminalScreenToggleAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("TerminalScreenToggleParameter", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("TerminalScreenToggleParameterOffValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnObjectClickAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnChangeToolbarAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileSelectedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileActivatedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileDeselectedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnChangeToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnRemoveToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSelectGScreenTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenAddAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenRemoveAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnQuickMenuOpenAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnQuickMenuClosedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnObjectDropAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnProductionItemAddedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnProductionErrorAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnInventoryFullAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnCharacterInventoryFullAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("CharacterInventory", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnOpenRareLootContainerAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnBackpackProductionStartAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadParameter", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadParameterOnValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadParameterOffValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnTerminalScreenToggleAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnObjectClickAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnObjectDropAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnChangeToolbarAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnRemoveToolbarTileAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileSelectedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileActivatedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileDeselectedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnChangeToolbarTileAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSelectGScreenTileAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenAddAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenRemoveAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnQuickMenuOpenAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnQuickMenuClosedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnProductionItemAddedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnProductionErrorAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnBackpackProductionStartAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnInventoryFullAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnCharacterInventoryFullAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnOpenRareLootContainerAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfiguration).GetMethod("PostInit", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null),
				typeof(InventoryEffectsSessionComponentConfiguration).GetMethod("Init", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder) }, null)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					"Audio event to play upon opening/closing the terminal screen. One-shot sound"
				},
				{
					array[1],
					"Parameter to use for toggling on/off <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnTerminalScreenToggleAudio\"/>"
				},
				{
					array[2],
					"Off value to send to <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.TerminalScreenToggleParameter\"/>"
				},
				{
					array[3],
					"Audio event to play on picking up or transfering an item One-shot sound"
				},
				{
					array[4],
					"Audio event to play when toolbar is switched One-shot sound"
				},
				{
					array[5],
					"Audio event to play when tile is selected One-shot sound"
				},
				{
					array[6],
					"Audio event to play when player activates a toolbar tile action One-shot sound"
				},
				{
					array[7],
					"Audio event to play when player selects <see cref=\"Keen.Game2.Simulation.GameSystems.Toolbars.DeselectTile\"/> One-shot sound"
				},
				{
					array[8],
					"Audio event to play when toolbar a toolbar tile is changed One-shot sound"
				},
				{
					array[9],
					"Audio event to play when toolbar a toolbar tile is removed One-shot sound"
				},
				{
					array[10],
					"Audio event to play when a tile is selected in GScreen One-shot sound"
				},
				{
					array[11],
					"Audio event to play when a character is added to the GScreen search query One-shot sound"
				},
				{
					array[12],
					"Audio event to play when a character is removed from the GScreen search query One-shot sound"
				},
				{
					array[13],
					"Audio event to play when quick menu is opened One-shot sound"
				},
				{
					array[14],
					"Audio event to play when quick menu is closed One-shot sound"
				},
				{
					array[15],
					"Audio event to play on dropping a block One-shot sound"
				},
				{
					array[16],
					"Audio event to play on adding a production item to the queue One-shot sound"
				},
				{
					array[17],
					"Audio event to play on a production error One-shot sound"
				},
				{
					array[18],
					"Audio event to play when inventory is full One-shot sound"
				},
				{
					array[19],
					"Audio event to play when inventory is full One-shot sound"
				},
				{
					array[20],
					"Inventory definition to know if we are transferring to character or other inventory"
				},
				{
					array[21],
					"Audio event to play when player opens a container with rare generated loot One-shot sound"
				},
				{
					array[22],
					"Audio event to play on a backpack production started One-shot sound"
				},
				{
					array[23],
					"Audio event to play when toolbar is changing One-shot sound"
				},
				{
					array[24],
					"Parameter to use for toggling on/off <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadAudio\"/>"
				},
				{
					array[25],
					"Off value to send to <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadParameter\"/>"
				},
				{
					array[26],
					"Off value to send to <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadParameter\"/>"
				},
				{
					array[27],
					null
				},
				{
					array[28],
					null
				},
				{
					array[29],
					null
				},
				{
					array[30],
					null
				},
				{
					array[31],
					null
				},
				{
					array[32],
					null
				},
				{
					array[33],
					null
				},
				{
					array[34],
					null
				},
				{
					array[35],
					null
				},
				{
					array[36],
					null
				},
				{
					array[37],
					null
				},
				{
					array[38],
					null
				},
				{
					array[39],
					null
				},
				{
					array[40],
					null
				},
				{
					array[41],
					null
				},
				{
					array[42],
					null
				},
				{
					array[43],
					null
				},
				{
					array[44],
					null
				},
				{
					array[45],
					null
				},
				{
					array[46],
					null
				},
				{
					array[47],
					null
				},
				{
					array[48],
					null
				},
				{
					array[49],
					null
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[4],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[5],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[6],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[7],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[8],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[9],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[10],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[11],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[12],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[13],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[14],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[15],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[16],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[17],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[18],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[19],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[20],
					ListReader<Attribute>.Empty
				},
				{
					array[21],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[22],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[23],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[24],
					ListReader<Attribute>.Empty
				},
				{
					array[25],
					ListReader<Attribute>.Empty
				},
				{
					array[26],
					ListReader<Attribute>.Empty
				},
				{
					array[27],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[28],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[29],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[30],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[31],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[32],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[33],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[34],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[35],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[36],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[37],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[38],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[39],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[40],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[41],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[42],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[43],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[44],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[45],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[46],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[47],
					new List<Attribute>
					{
						new NoSerializeAttribute()
					}
				},
				{
					array[48],
					new List<Attribute>
					{
						new PostInitAttribute()
					}
				},
				{
					array[49],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				},
				{
					array[4],
					num + 4
				},
				{
					array[5],
					num + 5
				},
				{
					array[6],
					num + 6
				},
				{
					array[7],
					num + 7
				},
				{
					array[8],
					num + 8
				},
				{
					array[9],
					num + 9
				},
				{
					array[10],
					num + 10
				},
				{
					array[11],
					num + 11
				},
				{
					array[12],
					num + 12
				},
				{
					array[13],
					num + 13
				},
				{
					array[14],
					num + 14
				},
				{
					array[15],
					num + 15
				},
				{
					array[16],
					num + 16
				},
				{
					array[17],
					num + 17
				},
				{
					array[18],
					num + 18
				},
				{
					array[19],
					num + 19
				},
				{
					array[20],
					num + 20
				},
				{
					array[21],
					num + 21
				},
				{
					array[22],
					num + 22
				},
				{
					array[23],
					num + 23
				},
				{
					array[24],
					num + 24
				},
				{
					array[25],
					num + 25
				},
				{
					array[26],
					num + 26
				},
				{
					array[27],
					num + 27
				},
				{
					array[28],
					num + 28
				},
				{
					array[29],
					num + 29
				},
				{
					array[30],
					num + 30
				},
				{
					array[31],
					num + 31
				},
				{
					array[32],
					num + 32
				},
				{
					array[33],
					num + 33
				},
				{
					array[34],
					num + 34
				},
				{
					array[35],
					num + 35
				},
				{
					array[36],
					num + 36
				},
				{
					array[37],
					num + 37
				},
				{
					array[38],
					num + 38
				},
				{
					array[39],
					num + 39
				},
				{
					array[40],
					num + 40
				},
				{
					array[41],
					num + 41
				},
				{
					array[42],
					num + 42
				},
				{
					array[43],
					num + 43
				},
				{
					array[44],
					num + 44
				},
				{
					array[45],
					num + 45
				},
				{
					array[46],
					num + 46
				},
				{
					array[47],
					num + 47
				},
				{
					array[48],
					num + 48
				},
				{
					array[49],
					num + 49
				}
			});
			RawAccessors = Configuration.TypeInfoHolder.RawAccessors.Concat<(string, IMemberAccessor)>(RawAccessors).ToArray();
			builder.AddRange(Configuration.TypeInfoHolder.Value.MembersDocumentation);
			builder3.AddRange(Configuration.TypeInfoHolder.Value.MembersDeclarationOrder);
			builder2.AddRange(Configuration.TypeInfoHolder.Value.MembersAttributes);
			Value = new AccessibleTypeInfo(typeof(InventoryEffectsSessionComponentConfiguration), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor OnTerminalScreenToggleAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnTerminalScreenToggleAudio", "OnTerminalScreenToggleAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnTerminalScreenToggleAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnTerminalScreenToggleAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnTerminalScreenToggleAudio = value;
			}, null);
		}

		private static IMemberAccessor TerminalScreenToggleParameterAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId>("TerminalScreenToggleParameter", "TerminalScreenToggleParameter", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("TerminalScreenToggleParameter", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfiguration instance) => instance.TerminalScreenToggleParameter, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId value)
			{
				instance.TerminalScreenToggleParameter = value;
			}, null);
		}

		private static IMemberAccessor TerminalScreenToggleParameterOffValueAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId>("TerminalScreenToggleParameterOffValue", "TerminalScreenToggleParameterOffValue", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("TerminalScreenToggleParameterOffValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfiguration instance) => instance.TerminalScreenToggleParameterOffValue, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId value)
			{
				instance.TerminalScreenToggleParameterOffValue = value;
			}, null);
		}

		private static IMemberAccessor OnObjectClickAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnObjectClickAudio", "OnObjectClickAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnObjectClickAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnObjectClickAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnObjectClickAudio = value;
			}, null);
		}

		private static IMemberAccessor OnChangeToolbarAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnChangeToolbarAudio", "OnChangeToolbarAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnChangeToolbarAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnChangeToolbarAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnChangeToolbarAudio = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarTileSelectedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnToolbarTileSelectedAudio", "OnToolbarTileSelectedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileSelectedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarTileSelectedAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnToolbarTileSelectedAudio = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarTileActivatedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnToolbarTileActivatedAudio", "OnToolbarTileActivatedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileActivatedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarTileActivatedAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnToolbarTileActivatedAudio = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarTileDeselectedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnToolbarTileDeselectedAudio", "OnToolbarTileDeselectedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileDeselectedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarTileDeselectedAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnToolbarTileDeselectedAudio = value;
			}, null);
		}

		private static IMemberAccessor OnChangeToolbarTileAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnChangeToolbarTileAudio", "OnChangeToolbarTileAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnChangeToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnChangeToolbarTileAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnChangeToolbarTileAudio = value;
			}, null);
		}

		private static IMemberAccessor OnRemoveToolbarTileAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnRemoveToolbarTileAudio", "OnRemoveToolbarTileAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnRemoveToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnRemoveToolbarTileAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnRemoveToolbarTileAudio = value;
			}, null);
		}

		private static IMemberAccessor OnSelectGScreenTileAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnSelectGScreenTileAudio", "OnSelectGScreenTileAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSelectGScreenTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnSelectGScreenTileAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnSelectGScreenTileAudio = value;
			}, null);
		}

		private static IMemberAccessor OnSearchGScreenAddAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnSearchGScreenAddAudio", "OnSearchGScreenAddAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenAddAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnSearchGScreenAddAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnSearchGScreenAddAudio = value;
			}, null);
		}

		private static IMemberAccessor OnSearchGScreenRemoveAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnSearchGScreenRemoveAudio", "OnSearchGScreenRemoveAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenRemoveAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnSearchGScreenRemoveAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnSearchGScreenRemoveAudio = value;
			}, null);
		}

		private static IMemberAccessor OnQuickMenuOpenAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnQuickMenuOpenAudio", "OnQuickMenuOpenAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnQuickMenuOpenAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnQuickMenuOpenAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnQuickMenuOpenAudio = value;
			}, null);
		}

		private static IMemberAccessor OnQuickMenuClosedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnQuickMenuClosedAudio", "OnQuickMenuClosedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnQuickMenuClosedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnQuickMenuClosedAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnQuickMenuClosedAudio = value;
			}, null);
		}

		private static IMemberAccessor OnObjectDropAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnObjectDropAudio", "OnObjectDropAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnObjectDropAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnObjectDropAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnObjectDropAudio = value;
			}, null);
		}

		private static IMemberAccessor OnProductionItemAddedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnProductionItemAddedAudio", "OnProductionItemAddedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnProductionItemAddedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnProductionItemAddedAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnProductionItemAddedAudio = value;
			}, null);
		}

		private static IMemberAccessor OnProductionErrorAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnProductionErrorAudio", "OnProductionErrorAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnProductionErrorAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnProductionErrorAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnProductionErrorAudio = value;
			}, null);
		}

		private static IMemberAccessor OnInventoryFullAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnInventoryFullAudio", "OnInventoryFullAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnInventoryFullAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnInventoryFullAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnInventoryFullAudio = value;
			}, null);
		}

		private static IMemberAccessor OnCharacterInventoryFullAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnCharacterInventoryFullAudio", "OnCharacterInventoryFullAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnCharacterInventoryFullAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnCharacterInventoryFullAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnCharacterInventoryFullAudio = value;
			}, null);
		}

		private static IMemberAccessor CharacterInventoryAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, InventoryDefinition>("CharacterInventory", "CharacterInventory", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("CharacterInventory", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(InventoryDefinition), () => InventoryDefinition.TypeInfoHolder.Value, (InventoryEffectsSessionComponentConfiguration instance) => instance.CharacterInventory, delegate(InventoryEffectsSessionComponentConfiguration instance, in InventoryDefinition value)
			{
				instance.CharacterInventory = value;
			}, null);
		}

		private static IMemberAccessor OnOpenRareLootContainerAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnOpenRareLootContainerAudio", "OnOpenRareLootContainerAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnOpenRareLootContainerAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnOpenRareLootContainerAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnOpenRareLootContainerAudio = value;
			}, null);
		}

		private static IMemberAccessor OnBackpackProductionStartAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnBackpackProductionStartAudio", "OnBackpackProductionStartAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnBackpackProductionStartAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnBackpackProductionStartAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnBackpackProductionStartAudio = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarLoadUnloadAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnToolbarLoadUnloadAudio", "OnToolbarLoadUnloadAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarLoadUnloadAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
			{
				instance.OnToolbarLoadUnloadAudio = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarLoadUnloadParameterAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId>("OnToolbarLoadUnloadParameter", "OnToolbarLoadUnloadParameter", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadParameter", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarLoadUnloadParameter, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId value)
			{
				instance.OnToolbarLoadUnloadParameter = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarLoadUnloadParameterOnValueAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId>("OnToolbarLoadUnloadParameterOnValue", "OnToolbarLoadUnloadParameterOnValue", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadParameterOnValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarLoadUnloadParameterOnValue, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId value)
			{
				instance.OnToolbarLoadUnloadParameterOnValue = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarLoadUnloadParameterOffValueAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId>("OnToolbarLoadUnloadParameterOffValue", "OnToolbarLoadUnloadParameterOffValue", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadParameterOffValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarLoadUnloadParameterOffValue, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId value)
			{
				instance.OnToolbarLoadUnloadParameterOffValue = value;
			}, null);
		}

		private static IMemberAccessor OnTerminalScreenToggleAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnTerminalScreenToggleAudioEvent", "OnTerminalScreenToggleAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnTerminalScreenToggleAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnTerminalScreenToggleAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnTerminalScreenToggleAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnObjectClickAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnObjectClickAudioEvent", "OnObjectClickAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnObjectClickAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnObjectClickAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnObjectClickAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnObjectDropAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnObjectDropAudioEvent", "OnObjectDropAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnObjectDropAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnObjectDropAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnObjectDropAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnChangeToolbarAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnChangeToolbarAudioEvent", "OnChangeToolbarAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnChangeToolbarAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnChangeToolbarAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnChangeToolbarAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnRemoveToolbarTileAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnRemoveToolbarTileAudioEvent", "OnRemoveToolbarTileAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnRemoveToolbarTileAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnRemoveToolbarTileAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnRemoveToolbarTileAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarTileSelectedAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnToolbarTileSelectedAudioEvent", "OnToolbarTileSelectedAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileSelectedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarTileSelectedAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnToolbarTileSelectedAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarTileActivatedAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnToolbarTileActivatedAudioEvent", "OnToolbarTileActivatedAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileActivatedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarTileActivatedAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnToolbarTileActivatedAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarTileDeselectedAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnToolbarTileDeselectedAudioEvent", "OnToolbarTileDeselectedAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarTileDeselectedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarTileDeselectedAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnToolbarTileDeselectedAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnChangeToolbarTileAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnChangeToolbarTileAudioEvent", "OnChangeToolbarTileAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnChangeToolbarTileAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnChangeToolbarTileAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnChangeToolbarTileAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnSelectGScreenTileAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnSelectGScreenTileAudioEvent", "OnSelectGScreenTileAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSelectGScreenTileAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnSelectGScreenTileAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnSelectGScreenTileAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnSearchGScreenAddAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnSearchGScreenAddAudioEvent", "OnSearchGScreenAddAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenAddAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnSearchGScreenAddAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnSearchGScreenAddAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnSearchGScreenRemoveAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnSearchGScreenRemoveAudioEvent", "OnSearchGScreenRemoveAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenRemoveAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnSearchGScreenRemoveAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnSearchGScreenRemoveAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnQuickMenuOpenAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnQuickMenuOpenAudioEvent", "OnQuickMenuOpenAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnQuickMenuOpenAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnQuickMenuOpenAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnQuickMenuOpenAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnQuickMenuClosedAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnQuickMenuClosedAudioEvent", "OnQuickMenuClosedAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnQuickMenuClosedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnQuickMenuClosedAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnQuickMenuClosedAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnProductionItemAddedAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnProductionItemAddedAudioEvent", "OnProductionItemAddedAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnProductionItemAddedAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnProductionItemAddedAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnProductionItemAddedAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnProductionErrorAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnProductionErrorAudioEvent", "OnProductionErrorAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnProductionErrorAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnProductionErrorAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnProductionErrorAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnBackpackProductionStartAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnBackpackProductionStartAudioEvent", "OnBackpackProductionStartAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnBackpackProductionStartAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnBackpackProductionStartAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnBackpackProductionStartAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnInventoryFullAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnInventoryFullAudioEvent", "OnInventoryFullAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnInventoryFullAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnInventoryFullAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnInventoryFullAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnCharacterInventoryFullAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnCharacterInventoryFullAudioEvent", "OnCharacterInventoryFullAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnCharacterInventoryFullAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnCharacterInventoryFullAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnCharacterInventoryFullAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnOpenRareLootContainerAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnOpenRareLootContainerAudioEvent", "OnOpenRareLootContainerAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnOpenRareLootContainerAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnOpenRareLootContainerAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnOpenRareLootContainerAudioEvent = value;
			}, null);
		}

		private static IMemberAccessor OnToolbarLoadUnloadAudioEventAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnToolbarLoadUnloadAudioEvent", "OnToolbarLoadUnloadAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnToolbarLoadUnloadAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnToolbarLoadUnloadAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
			{
				instance.OnToolbarLoadUnloadAudioEvent = value;
			}, null);
		}
	}

	/// <summary>
	/// Audio event to play upon opening/closing the terminal screen.
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnTerminalScreenToggleAudio { get; private set; }

	/// <summary>
	/// Parameter to use for toggling on/off <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnTerminalScreenToggleAudio" />
	/// </summary>
	public StringId TerminalScreenToggleParameter { get; private set; } = "OnOff";

	/// <summary>
	/// Off value to send to <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.TerminalScreenToggleParameter" />
	/// </summary>
	public StringId TerminalScreenToggleParameterOffValue { get; private set; } = "Off";

	/// <summary>
	/// Audio event to play on picking up or transfering an item
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnObjectClickAudio { get; private set; }

	/// <summary>
	/// Audio event to play when toolbar is switched
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnChangeToolbarAudio { get; private set; }

	/// <summary>
	/// Audio event to play when tile is selected
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnToolbarTileSelectedAudio { get; private set; }

	/// <summary>
	/// Audio event to play when player activates a toolbar tile action
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnToolbarTileActivatedAudio { get; private set; }

	/// <summary>
	/// Audio event to play when player selects <see cref="T:Keen.Game2.Simulation.GameSystems.Toolbars.DeselectTile" />
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnToolbarTileDeselectedAudio { get; private set; }

	/// <summary>
	/// Audio event to play when toolbar a toolbar tile is changed
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnChangeToolbarTileAudio { get; private set; }

	/// <summary>
	/// Audio event to play when toolbar a toolbar tile is removed
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnRemoveToolbarTileAudio { get; private set; }

	/// <summary>
	/// Audio event to play when a tile is selected in GScreen
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnSelectGScreenTileAudio { get; private set; }

	/// <summary>
	/// Audio event to play when a character is added to the GScreen search query
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnSearchGScreenAddAudio { get; private set; }

	/// <summary>
	/// Audio event to play when a character is removed from the GScreen search query
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnSearchGScreenRemoveAudio { get; private set; }

	/// <summary>
	/// Audio event to play when quick menu is opened
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnQuickMenuOpenAudio { get; private set; }

	/// <summary>
	/// Audio event to play when quick menu is closed
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnQuickMenuClosedAudio { get; private set; }

	/// <summary>
	/// Audio event to play on dropping a block
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnObjectDropAudio { get; private set; }

	/// <summary>
	/// Audio event to play on adding a production item to the queue
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnProductionItemAddedAudio { get; private set; }

	/// <summary>
	/// Audio event to play on a production error
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnProductionErrorAudio { get; private set; }

	/// <summary>
	/// Audio event to play when inventory is full
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnInventoryFullAudio { get; private set; }

	/// <summary>
	/// Audio event to play when inventory is full
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnCharacterInventoryFullAudio { get; private set; }

	/// <summary>
	/// Inventory definition to know if we are transferring to character or other inventory
	/// </summary>
	public InventoryDefinition CharacterInventory { get; private set; }

	/// <summary>
	/// Audio event to play when player opens a container with rare generated loot
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnOpenRareLootContainerAudio { get; private set; }

	/// <summary>
	/// Audio event to play on a backpack production started
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnBackpackProductionStartAudio { get; private set; }

	/// <summary>
	/// Audio event to play when toolbar is changing
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnToolbarLoadUnloadAudio { get; private set; }

	/// <summary>
	/// Parameter to use for toggling on/off <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadAudio" />
	/// </summary>
	public StringId OnToolbarLoadUnloadParameter { get; private set; } = "OnOff";

	/// <summary>
	/// Off value to send to <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadParameter" />
	/// </summary>
	public StringId OnToolbarLoadUnloadParameterOnValue { get; private set; } = "On";

	/// <summary>
	/// Off value to send to <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadParameter" />
	/// </summary>
	public StringId OnToolbarLoadUnloadParameterOffValue { get; private set; } = "Off";

	[NoSerialize]
	public AudioEvent? OnTerminalScreenToggleAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnObjectClickAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnObjectDropAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnChangeToolbarAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnRemoveToolbarTileAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnToolbarTileSelectedAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnToolbarTileActivatedAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnToolbarTileDeselectedAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnChangeToolbarTileAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnSelectGScreenTileAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnSearchGScreenAddAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnSearchGScreenRemoveAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnQuickMenuOpenAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnQuickMenuClosedAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnProductionItemAddedAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnProductionErrorAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnBackpackProductionStartAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnInventoryFullAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnCharacterInventoryFullAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnOpenRareLootContainerAudioEvent { get; private set; }

	[NoSerialize]
	public AudioEvent? OnToolbarLoadUnloadAudioEvent { get; private set; }

	unsafe static BuildableTypeInfo IObjectBuilderInitializable.BuildableInfo
	{
		get
		{
			return new BuildableTypeInfo
			{
				ObjectType = typeof(InventoryEffectsSessionComponentConfiguration),
				BuilderType = typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder),
				InitMethod = &Init,
				PostInitMethod = &PostInit
			};
			static void Init(object instance, IObjectBuilder builder, ObjectBuilderLoadingContext? context)
			{
				Unsafe.As<InventoryEffectsSessionComponentConfiguration>(instance).Init(Unsafe.As<InventoryEffectsSessionComponentConfigurationObjectBuilder>(builder));
			}
			static void PostInit(object instance, IObjectBuilder? builder, ObjectBuilderLoadingContext? context, AccessibleValidationReporter? reporter)
			{
				Unsafe.As<InventoryEffectsSessionComponentConfiguration>(instance).PostInit();
			}
		}
	}

	/// <inheritdoc />
	static ISerializer<InventoryEffectsSessionComponentConfiguration> ISerializable<InventoryEffectsSessionComponentConfiguration>.Serializer => Serializer.Instance;

	static IDeepCloner<InventoryEffectsSessionComponentConfiguration> IDeepCloneable<InventoryEffectsSessionComponentConfiguration>.Cloner { get; } = new Cloner();

	[PostInit]
	protected void PostInit()
	{
		StringId? onTerminalScreenToggleAudio = OnTerminalScreenToggleAudio;
		OnTerminalScreenToggleAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnObjectClickAudio;
		OnObjectClickAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnObjectDropAudio;
		OnObjectDropAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnChangeToolbarAudio;
		OnChangeToolbarAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnChangeToolbarTileAudio;
		OnChangeToolbarTileAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnRemoveToolbarTileAudio;
		OnRemoveToolbarTileAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnSelectGScreenTileAudio;
		OnSelectGScreenTileAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnSearchGScreenAddAudio;
		OnSearchGScreenAddAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnSearchGScreenRemoveAudio;
		OnSearchGScreenRemoveAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnQuickMenuOpenAudio;
		OnQuickMenuOpenAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnQuickMenuClosedAudio;
		OnQuickMenuClosedAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnToolbarTileSelectedAudio;
		OnToolbarTileSelectedAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnToolbarTileActivatedAudio;
		OnToolbarTileActivatedAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnToolbarTileDeselectedAudio;
		OnToolbarTileDeselectedAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnProductionItemAddedAudio;
		OnProductionItemAddedAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnProductionErrorAudio;
		OnProductionErrorAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnBackpackProductionStartAudio;
		OnBackpackProductionStartAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnInventoryFullAudio;
		OnInventoryFullAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnCharacterInventoryFullAudio;
		OnCharacterInventoryFullAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnOpenRareLootContainerAudio;
		OnOpenRareLootContainerAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
		onTerminalScreenToggleAudio = OnToolbarLoadUnloadAudio;
		OnToolbarLoadUnloadAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
	}

	/// <inheritdoc />
	public new static IStreamSerializer<InventoryEffectsSessionComponentConfiguration> GetStreamSerializer(SerializerFormat format)
	{
		return format switch
		{
			SerializerFormat.Binary => ImmutableSingleton<BinaryStreamSerializer<InventoryEffectsSessionComponentConfiguration>>.Instance, 
			SerializerFormat.Json => ImmutableSingleton<JsonStreamSerializer<InventoryEffectsSessionComponentConfiguration>>.Instance, 
		};
	}

	public void Init(InventoryEffectsSessionComponentConfigurationObjectBuilder builder)
	{
		Init((ConfigurationObjectBuilder)builder);
		OnTerminalScreenToggleAudio = builder.OnTerminalScreenToggleAudio;
		TerminalScreenToggleParameter = builder.TerminalScreenToggleParameter;
		TerminalScreenToggleParameterOffValue = builder.TerminalScreenToggleParameterOffValue;
		OnObjectClickAudio = builder.OnObjectClickAudio;
		OnChangeToolbarAudio = builder.OnChangeToolbarAudio;
		OnToolbarTileSelectedAudio = builder.OnToolbarTileSelectedAudio;
		OnToolbarTileActivatedAudio = builder.OnToolbarTileActivatedAudio;
		OnToolbarTileDeselectedAudio = builder.OnToolbarTileDeselectedAudio;
		OnChangeToolbarTileAudio = builder.OnChangeToolbarTileAudio;
		OnRemoveToolbarTileAudio = builder.OnRemoveToolbarTileAudio;
		OnSelectGScreenTileAudio = builder.OnSelectGScreenTileAudio;
		OnSearchGScreenAddAudio = builder.OnSearchGScreenAddAudio;
		OnSearchGScreenRemoveAudio = builder.OnSearchGScreenRemoveAudio;
		OnQuickMenuOpenAudio = builder.OnQuickMenuOpenAudio;
		OnQuickMenuClosedAudio = builder.OnQuickMenuClosedAudio;
		OnObjectDropAudio = builder.OnObjectDropAudio;
		OnProductionItemAddedAudio = builder.OnProductionItemAddedAudio;
		OnProductionErrorAudio = builder.OnProductionErrorAudio;
		OnInventoryFullAudio = builder.OnInventoryFullAudio;
		OnCharacterInventoryFullAudio = builder.OnCharacterInventoryFullAudio;
		CharacterInventory = builder.CharacterInventory;
		OnOpenRareLootContainerAudio = builder.OnOpenRareLootContainerAudio;
		OnBackpackProductionStartAudio = builder.OnBackpackProductionStartAudio;
		OnToolbarLoadUnloadAudio = builder.OnToolbarLoadUnloadAudio;
		OnToolbarLoadUnloadParameter = builder.OnToolbarLoadUnloadParameter;
		OnToolbarLoadUnloadParameterOnValue = builder.OnToolbarLoadUnloadParameterOnValue;
		OnToolbarLoadUnloadParameterOffValue = builder.OnToolbarLoadUnloadParameterOffValue;
	}

	public InventoryEffectsSessionComponentConfiguration()
	{
	}

	[SetsRequiredMembers]
	protected InventoryEffectsSessionComponentConfiguration(in InventoryEffectsSessionComponentConfiguration instance, ref CloningContext context)
		: base((Configuration)instance, ref context)
	{
		ref InventoryEffectsSessionComponentConfiguration reference = ref context.ClonedOrNewRef(instance, out var exists);
		if (!exists)
		{
			reference = this;
		}
		OnTerminalScreenToggleAudio = instance.OnTerminalScreenToggleAudio;
		TerminalScreenToggleParameter = instance.TerminalScreenToggleParameter;
		TerminalScreenToggleParameterOffValue = instance.TerminalScreenToggleParameterOffValue;
		OnObjectClickAudio = instance.OnObjectClickAudio;
		OnChangeToolbarAudio = instance.OnChangeToolbarAudio;
		OnToolbarTileSelectedAudio = instance.OnToolbarTileSelectedAudio;
		OnToolbarTileActivatedAudio = instance.OnToolbarTileActivatedAudio;
		OnToolbarTileDeselectedAudio = instance.OnToolbarTileDeselectedAudio;
		OnChangeToolbarTileAudio = instance.OnChangeToolbarTileAudio;
		OnRemoveToolbarTileAudio = instance.OnRemoveToolbarTileAudio;
		OnSelectGScreenTileAudio = instance.OnSelectGScreenTileAudio;
		OnSearchGScreenAddAudio = instance.OnSearchGScreenAddAudio;
		OnSearchGScreenRemoveAudio = instance.OnSearchGScreenRemoveAudio;
		OnQuickMenuOpenAudio = instance.OnQuickMenuOpenAudio;
		OnQuickMenuClosedAudio = instance.OnQuickMenuClosedAudio;
		OnObjectDropAudio = instance.OnObjectDropAudio;
		OnProductionItemAddedAudio = instance.OnProductionItemAddedAudio;
		OnProductionErrorAudio = instance.OnProductionErrorAudio;
		OnInventoryFullAudio = instance.OnInventoryFullAudio;
		OnCharacterInventoryFullAudio = instance.OnCharacterInventoryFullAudio;
		if (instance.CharacterInventory != null)
		{
			CharacterInventory = (InventoryDefinition)CloningHelper.ClonePolymorphic(instance.CharacterInventory, ref context);
		}
		OnOpenRareLootContainerAudio = instance.OnOpenRareLootContainerAudio;
		OnBackpackProductionStartAudio = instance.OnBackpackProductionStartAudio;
		OnToolbarLoadUnloadAudio = instance.OnToolbarLoadUnloadAudio;
		OnToolbarLoadUnloadParameter = instance.OnToolbarLoadUnloadParameter;
		OnToolbarLoadUnloadParameterOnValue = instance.OnToolbarLoadUnloadParameterOnValue;
		OnToolbarLoadUnloadParameterOffValue = instance.OnToolbarLoadUnloadParameterOffValue;
	}

	public override InventoryEffectsSessionComponentConfiguration DeepClone()
	{
		CloningContext context = new CloningContext();
		return DeepClone(ref context);
	}

	public override InventoryEffectsSessionComponentConfiguration DeepClone(ref CloningContext context)
	{
		return CloningHelper.GetCloner<InventoryEffectsSessionComponentConfiguration>().Clone(this, ref context);
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public override AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.Json;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Core.Game.GameSystems.Audio.Suggesters;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Binary;
using Keen.VRage.Library.Serialization.Generic;
using Keen.VRage.Library.Serialization.Json;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.ObjectBuilders;
using Keen.VRage.Library.Serialization.Serializers;
using Keen.VRage.Library.Utils;
using Keen.VRage.Library.Utils.Cloning;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

[NameMigration("0.12.3.718", "Keen.Game2.Game.UI.Terminal.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder", "Keen.VRage.Animation.Client.Configurations.InventoryEffectsSessionComponentConfigurationObjectBuilder")]
[Serialize]
[Cloneable]
[KeyType]
public class InventoryEffectsSessionComponentConfigurationObjectBuilder : ConfigurationObjectBuilder, IObjectBuilder, ISerializable<InventoryEffectsSessionComponentConfigurationObjectBuilder>, ISerializable, IDeepCloneable<InventoryEffectsSessionComponentConfigurationObjectBuilder>, IAccessible
{
	/// <inheritdoc />
	/// <inheritdoc />
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	[SerializerBundle("Game2", "2.4.0.95")]
	[SerializerBundle("VRage", "2.4.0.95")]
	public new class Serializer : ConfigurationObjectBuilder.Serializer, IJsonSerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder>, IJsonSerializer, ISerializer, ISerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder>, IJsonObjectSerializer, IBinarySerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder>, IBinarySerializer, IGenericObjectSerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder>, IGenericObjectSerializer
	{
		/// <inheritdoc />
		public new static readonly Serializer Instance = new Serializer();

		private static readonly bool IsDiskBlittable = (Instance.GetSchema(SerializationHelper.MaxVersion).Flags & SerializableTypeFlags.DiskBlittable) != 0;

		private ImmutableArray<BundleInfo> _bundles = ImmutableArray<BundleInfo>.Empty;

		private readonly IMigrations _typeMigrations = new InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations();

		public new IMigrations TypeVersionInfo => _typeMigrations;

		/// <inheritdoc />
		public new ImmutableArray<BundleInfo> Bundles
		{
			get
			{
				if (_bundles.IsEmpty)
				{
					_bundles = SerializationHelper.GetSerializerBundles(GetType());
				}
				return _bundles;
			}
		}

		public new SerializableTypeFlags Flags => TypeVersionInfo.LatestSchema.Flags;

		/// <inheritdoc />
		public new void DeserializeInto(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeInto(ref source, ref Unsafe.As<object, InventoryEffectsSessionComponentConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref JsonDeserializationContext source, ref InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.Reader.TokenType == JsonTokenType.Null)
			{
				source.Reader.Read();
				value = null;
				return;
			}
			if (value == null)
			{
				value = new InventoryEffectsSessionComponentConfigurationObjectBuilder();
			}
			if (!JsonHelper.TryMigrateType(ref source, flags, ref value))
			{
				source.AssertTokenAndRead(JsonTokenType.StartObject);
				DeserializeMembers(ref source, ref value, flags);
				source.AssertTokenAndRead(JsonTokenType.EndObject);
			}
		}

		public void DeserializeMembers(ref JsonDeserializationContext source, ref InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = new InventoryEffectsSessionComponentConfigurationObjectBuilder();
			}
			while (source.Reader.TokenType == JsonTokenType.PropertyName)
			{
				ReadOnlySpan<byte> property = source.Reader.ValueSpan;
				source.Reader.Read();
				if (!TryDeserializeMember(ref source, StableHashing.Hash(property), in property, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder), Encoding.UTF8.GetString(property));
					source.Reader.Skip();
					source.Reader.Read();
				}
			}
		}

		protected bool TryDeserializeMember(ref JsonDeserializationContext source, int propertyHash, in ReadOnlySpan<byte> property, InventoryEffectsSessionComponentConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (TryDeserializeMember(ref source, propertyHash, in property, (ConfigurationObjectBuilder)value, flags))
			{
				return true;
			}
			switch (propertyHash)
			{
			case -331140198:
				if ("OnTerminalScreenToggleAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags27 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnTerminalScreenToggleAudio, SerializerFlags.None | serializerFlags27);
					return true;
				}
				break;
			case -1232078616:
				if ("TerminalScreenToggleParameter"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags19 = SerializerFlags.None;
					ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.TerminalScreenToggleParameter, SerializerFlags.None | serializerFlags19);
					return true;
				}
				break;
			case 127920560:
				if ("TerminalScreenToggleParameterOffValue"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags18 = SerializerFlags.None;
					ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.TerminalScreenToggleParameterOffValue, SerializerFlags.None | serializerFlags18);
					return true;
				}
				break;
			case 2140481739:
				if ("OnObjectClickAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags8 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnObjectClickAudio, SerializerFlags.None | serializerFlags8);
					return true;
				}
				break;
			case -588933494:
				if ("OnChangeToolbarAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags23 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnChangeToolbarAudio, SerializerFlags.None | serializerFlags23);
					return true;
				}
				break;
			case -1517412738:
				if ("OnToolbarTileSelectedAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags16 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarTileSelectedAudio, SerializerFlags.None | serializerFlags16);
					return true;
				}
				break;
			case 877566739:
				if ("OnToolbarTileActivatedAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags12 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarTileActivatedAudio, SerializerFlags.None | serializerFlags12);
					return true;
				}
				break;
			case 1049507282:
				if ("OnToolbarTileDeselectedAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags4 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarTileDeselectedAudio, SerializerFlags.None | serializerFlags4);
					return true;
				}
				break;
			case 1211900057:
				if ("OnChangeToolbarTileAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags25 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnChangeToolbarTileAudio, SerializerFlags.None | serializerFlags25);
					return true;
				}
				break;
			case -2021175755:
				if ("OnRemoveToolbarTileAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags21 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags21);
					return true;
				}
				break;
			case 51200956:
				if ("OnSelectGScreenTileAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags17 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSelectGScreenTileAudio, SerializerFlags.None | serializerFlags17);
					return true;
				}
				break;
			case 358821163:
				if ("OnSearchGScreenAddAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags15 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSearchGScreenAddAudio, SerializerFlags.None | serializerFlags15);
					return true;
				}
				break;
			case -1943662298:
				if ("OnSearchGScreenRemoveAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags14 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags14);
					return true;
				}
				break;
			case -1068679825:
				if ("OnQuickMenuOpenAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags10 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnQuickMenuOpenAudio, SerializerFlags.None | serializerFlags10);
					return true;
				}
				break;
			case -1904692519:
				if ("OnQuickMenuClosedAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags6 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnQuickMenuClosedAudio, SerializerFlags.None | serializerFlags6);
					return true;
				}
				break;
			case -1318579956:
				if ("OnObjectDropAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags2 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnObjectDropAudio, SerializerFlags.None | serializerFlags2);
					return true;
				}
				break;
			case -9573284:
				if ("OnProductionItemAddedAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags26 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnProductionItemAddedAudio, SerializerFlags.None | serializerFlags26);
					return true;
				}
				break;
			case -484728705:
				if ("OnProductionErrorAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags24 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnProductionErrorAudio, SerializerFlags.None | serializerFlags24);
					return true;
				}
				break;
			case 2067372367:
				if ("OnInventoryFullAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags22 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnInventoryFullAudio, SerializerFlags.None | serializerFlags22);
					return true;
				}
				break;
			case -1813679847:
				if ("OnCharacterInventoryFullAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags20 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnCharacterInventoryFullAudio, SerializerFlags.None | serializerFlags20);
					return true;
				}
				break;
			case 2123433999:
				if ("CharacterInventory"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags13 = SerializerFlags.None;
					if (source.Reader.TokenType == JsonTokenType.Null)
					{
						value.CharacterInventory = null;
						source.Reader.Read();
					}
					else if (JsonHelper.IsNameSerialized(ref source))
					{
						((IJsonSerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).DeserializeInto(ref source, ref value.CharacterInventory, SerializerFlags.None | serializerFlags13);
					}
					else
					{
						InventoryDefinition.Serializer.Instance.DeserializeInto(ref source, ref value.CharacterInventory, SerializerFlags.None | serializerFlags13);
					}
					return true;
				}
				break;
			case -1850313855:
				if ("OnOpenRareLootContainerAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags11 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnOpenRareLootContainerAudio, SerializerFlags.None | serializerFlags11);
					return true;
				}
				break;
			case 565503057:
				if ("OnBackpackProductionStartAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags9 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnBackpackProductionStartAudio, SerializerFlags.None | serializerFlags9);
					return true;
				}
				break;
			case 478772273:
				if ("OnToolbarLoadUnloadAudio"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags7 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadAudio, SerializerFlags.None | serializerFlags7);
					return true;
				}
				break;
			case 627989976:
				if ("OnToolbarLoadUnloadParameter"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags5 = SerializerFlags.None;
					ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadParameter, SerializerFlags.None | serializerFlags5);
					return true;
				}
				break;
			case -547642596:
				if ("OnToolbarLoadUnloadParameterOnValue"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags3 = SerializerFlags.None;
					ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadParameterOnValue, SerializerFlags.None | serializerFlags3);
					return true;
				}
				break;
			case 159404988:
				if ("OnToolbarLoadUnloadParameterOffValue"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags = SerializerFlags.None;
					ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadParameterOffValue, SerializerFlags.None | serializerFlags);
					return true;
				}
				break;
			}
			return false;
		}

		/// <inheritdoc />
		public new InventoryEffectsSessionComponentConfigurationObjectBuilder? Deserialize(ref JsonDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			InventoryEffectsSessionComponentConfigurationObjectBuilder value = null;
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref JsonSerializationContext destination, in InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				destination.Writer.WriteNullValue();
				return;
			}
			destination.Writer.WriteStartObject();
			SerializeMembers(ref destination, in value, flags);
			destination.Writer.WriteEndObject();
		}

		/// <inheritdoc />
		public new void Serialize(ref JsonSerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, (InventoryEffectsSessionComponentConfigurationObjectBuilder)value, flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref JsonSerializationContext destination, in InventoryEffectsSessionComponentConfigurationObjectBuilder value, SerializerFlags flags)
		{
			ConfigurationObjectBuilder value2 = value;
			SerializeMembers(ref destination, in value2, flags);
			destination.Writer.WritePropertyName("OnTerminalScreenToggleAudio"u8);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnTerminalScreenToggleAudio, SerializerFlags.None | serializerFlags);
			destination.Writer.WritePropertyName("TerminalScreenToggleParameter"u8);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.TerminalScreenToggleParameter, SerializerFlags.None | serializerFlags2);
			destination.Writer.WritePropertyName("TerminalScreenToggleParameterOffValue"u8);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.TerminalScreenToggleParameterOffValue, SerializerFlags.None | serializerFlags3);
			destination.Writer.WritePropertyName("OnObjectClickAudio"u8);
			SerializerFlags serializerFlags4 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnObjectClickAudio, SerializerFlags.None | serializerFlags4);
			destination.Writer.WritePropertyName("OnChangeToolbarAudio"u8);
			SerializerFlags serializerFlags5 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnChangeToolbarAudio, SerializerFlags.None | serializerFlags5);
			destination.Writer.WritePropertyName("OnToolbarTileSelectedAudio"u8);
			SerializerFlags serializerFlags6 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnToolbarTileSelectedAudio, SerializerFlags.None | serializerFlags6);
			destination.Writer.WritePropertyName("OnToolbarTileActivatedAudio"u8);
			SerializerFlags serializerFlags7 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnToolbarTileActivatedAudio, SerializerFlags.None | serializerFlags7);
			destination.Writer.WritePropertyName("OnToolbarTileDeselectedAudio"u8);
			SerializerFlags serializerFlags8 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnToolbarTileDeselectedAudio, SerializerFlags.None | serializerFlags8);
			destination.Writer.WritePropertyName("OnChangeToolbarTileAudio"u8);
			SerializerFlags serializerFlags9 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnChangeToolbarTileAudio, SerializerFlags.None | serializerFlags9);
			destination.Writer.WritePropertyName("OnRemoveToolbarTileAudio"u8);
			SerializerFlags serializerFlags10 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags10);
			destination.Writer.WritePropertyName("OnSelectGScreenTileAudio"u8);
			SerializerFlags serializerFlags11 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnSelectGScreenTileAudio, SerializerFlags.None | serializerFlags11);
			destination.Writer.WritePropertyName("OnSearchGScreenAddAudio"u8);
			SerializerFlags serializerFlags12 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnSearchGScreenAddAudio, SerializerFlags.None | serializerFlags12);
			destination.Writer.WritePropertyName("OnSearchGScreenRemoveAudio"u8);
			SerializerFlags serializerFlags13 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags13);
			destination.Writer.WritePropertyName("OnQuickMenuOpenAudio"u8);
			SerializerFlags serializerFlags14 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnQuickMenuOpenAudio, SerializerFlags.None | serializerFlags14);
			destination.Writer.WritePropertyName("OnQuickMenuClosedAudio"u8);
			SerializerFlags serializerFlags15 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnQuickMenuClosedAudio, SerializerFlags.None | serializerFlags15);
			destination.Writer.WritePropertyName("OnObjectDropAudio"u8);
			SerializerFlags serializerFlags16 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnObjectDropAudio, SerializerFlags.None | serializerFlags16);
			destination.Writer.WritePropertyName("OnProductionItemAddedAudio"u8);
			SerializerFlags serializerFlags17 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnProductionItemAddedAudio, SerializerFlags.None | serializerFlags17);
			destination.Writer.WritePropertyName("OnProductionErrorAudio"u8);
			SerializerFlags serializerFlags18 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnProductionErrorAudio, SerializerFlags.None | serializerFlags18);
			destination.Writer.WritePropertyName("OnInventoryFullAudio"u8);
			SerializerFlags serializerFlags19 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnInventoryFullAudio, SerializerFlags.None | serializerFlags19);
			destination.Writer.WritePropertyName("OnCharacterInventoryFullAudio"u8);
			SerializerFlags serializerFlags20 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnCharacterInventoryFullAudio, SerializerFlags.None | serializerFlags20);
			destination.Writer.WritePropertyName("CharacterInventory"u8);
			SerializerFlags serializerFlags21 = SerializerFlags.None;
			InventoryDefinition value3 = value.CharacterInventory;
			if (value3 == null)
			{
				destination.Writer.WriteNullValue();
			}
			else if (InventoryDefinition.Serializer.Instance.ShouldSerializeAsName(destination.Context, in value3))
			{
				((IJsonSerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).Serialize(ref destination, in value3, SerializerFlags.None | serializerFlags21);
			}
			else
			{
				InventoryDefinition.Serializer.Instance.Serialize(ref destination, in value3, SerializerFlags.None | serializerFlags21);
			}
			destination.Writer.WritePropertyName("OnOpenRareLootContainerAudio"u8);
			SerializerFlags serializerFlags22 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnOpenRareLootContainerAudio, SerializerFlags.None | serializerFlags22);
			destination.Writer.WritePropertyName("OnBackpackProductionStartAudio"u8);
			SerializerFlags serializerFlags23 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnBackpackProductionStartAudio, SerializerFlags.None | serializerFlags23);
			destination.Writer.WritePropertyName("OnToolbarLoadUnloadAudio"u8);
			SerializerFlags serializerFlags24 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnToolbarLoadUnloadAudio, SerializerFlags.None | serializerFlags24);
			destination.Writer.WritePropertyName("OnToolbarLoadUnloadParameter"u8);
			SerializerFlags serializerFlags25 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.OnToolbarLoadUnloadParameter, SerializerFlags.None | serializerFlags25);
			destination.Writer.WritePropertyName("OnToolbarLoadUnloadParameterOnValue"u8);
			SerializerFlags serializerFlags26 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.OnToolbarLoadUnloadParameterOnValue, SerializerFlags.None | serializerFlags26);
			destination.Writer.WritePropertyName("OnToolbarLoadUnloadParameterOffValue"u8);
			SerializerFlags serializerFlags27 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.OnToolbarLoadUnloadParameterOffValue, SerializerFlags.None | serializerFlags27);
		}

		/// <inheritdoc />
		public override void SerializeMembers(ref JsonSerializationContext destination, object value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, (InventoryEffectsSessionComponentConfigurationObjectBuilder)value, flags);
		}

		/// <inheritdoc />
		public override void DeserializeMembers(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeMembers(ref source, ref Unsafe.As<object, InventoryEffectsSessionComponentConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public new void DeserializeInto(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeInto(ref source, ref Unsafe.As<object, InventoryEffectsSessionComponentConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public new void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeIntoSlow(ref source, ref Unsafe.As<object, InventoryEffectsSessionComponentConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref BinaryDeserializationContext source, ref InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.IsNull(advance: false))
			{
				source.ReadObjectPrefix();
				value = null;
				return;
			}
			if (value == null)
			{
				value = new InventoryEffectsSessionComponentConfigurationObjectBuilder();
			}
			if (BinaryHelper.ShouldUseFastPath(ref source, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder)))
			{
				source.ReadObjectPrefix();
				DeserializeFast(ref source, value, flags);
			}
			else if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		public void DeserializeMembers(ref BinaryDeserializationContext source, ref InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = new InventoryEffectsSessionComponentConfigurationObjectBuilder();
			}
			if (BinaryHelper.ShouldUseDeltaEncodedPath(ref source, out var memberCount))
			{
				DeserializeDeltaEncoded(ref source, value, memberCount, flags);
				return;
			}
			source.ReadObjectPrefix();
			if (!source.TypeModel.IsInterned(typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder), out var index))
			{
				throw new SerializationException("Type InventoryEffectsSessionComponentConfigurationObjectBuilder not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			int position = source.Reader.Position;
			foreach (var (text2, memberData2) in entry.Members)
			{
				if (entry.IsDiskBlittable)
				{
					source.Reader.Position = position + memberData2.Offset;
				}
				if (!TryDeserializeMember(ref source, text2, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder), text2);
				}
			}
			if (entry.IsDiskBlittable)
			{
				source.Reader.Position = position + entry.Size;
			}
		}

		/// <inheritdoc />
		public void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.IsNull(advance: false))
			{
				source.ReadObjectPrefix();
				value = null;
				return;
			}
			if (value == null)
			{
				value = new InventoryEffectsSessionComponentConfigurationObjectBuilder();
			}
			if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		protected bool TryDeserializeMember(ref BinaryDeserializationContext source, string property, InventoryEffectsSessionComponentConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (TryDeserializeMember(ref source, property, (ConfigurationObjectBuilder)value, flags))
			{
				return true;
			}
			switch (property)
			{
			case "OnTerminalScreenToggleAudio":
			{
				SerializerFlags serializerFlags11 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnTerminalScreenToggleAudio, SerializerFlags.None | serializerFlags11);
				return true;
			}
			case "TerminalScreenToggleParameter":
			{
				SerializerFlags serializerFlags10 = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.TerminalScreenToggleParameter, SerializerFlags.None | serializerFlags10);
				return true;
			}
			case "TerminalScreenToggleParameterOffValue":
			{
				SerializerFlags serializerFlags9 = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.TerminalScreenToggleParameterOffValue, SerializerFlags.None | serializerFlags9);
				return true;
			}
			case "OnObjectClickAudio":
			{
				SerializerFlags serializerFlags8 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnObjectClickAudio, SerializerFlags.None | serializerFlags8);
				return true;
			}
			case "OnChangeToolbarAudio":
			{
				SerializerFlags serializerFlags12 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnChangeToolbarAudio, SerializerFlags.None | serializerFlags12);
				return true;
			}
			case "OnToolbarTileSelectedAudio":
			{
				SerializerFlags serializerFlags27 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnToolbarTileSelectedAudio, SerializerFlags.None | serializerFlags27);
				return true;
			}
			case "OnToolbarTileActivatedAudio":
			{
				SerializerFlags serializerFlags26 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnToolbarTileActivatedAudio, SerializerFlags.None | serializerFlags26);
				return true;
			}
			case "OnToolbarTileDeselectedAudio":
			{
				SerializerFlags serializerFlags25 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnToolbarTileDeselectedAudio, SerializerFlags.None | serializerFlags25);
				return true;
			}
			case "OnChangeToolbarTileAudio":
			{
				SerializerFlags serializerFlags24 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnChangeToolbarTileAudio, SerializerFlags.None | serializerFlags24);
				return true;
			}
			case "OnRemoveToolbarTileAudio":
			{
				SerializerFlags serializerFlags23 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags23);
				return true;
			}
			case "OnSelectGScreenTileAudio":
			{
				SerializerFlags serializerFlags22 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnSelectGScreenTileAudio, SerializerFlags.None | serializerFlags22);
				return true;
			}
			case "OnSearchGScreenAddAudio":
			{
				SerializerFlags serializerFlags21 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnSearchGScreenAddAudio, SerializerFlags.None | serializerFlags21);
				return true;
			}
			case "OnSearchGScreenRemoveAudio":
			{
				SerializerFlags serializerFlags20 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags20);
				return true;
			}
			case "OnQuickMenuOpenAudio":
			{
				SerializerFlags serializerFlags19 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnQuickMenuOpenAudio, SerializerFlags.None | serializerFlags19);
				return true;
			}
			case "OnQuickMenuClosedAudio":
			{
				SerializerFlags serializerFlags18 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnQuickMenuClosedAudio, SerializerFlags.None | serializerFlags18);
				return true;
			}
			case "OnObjectDropAudio":
			{
				SerializerFlags serializerFlags17 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnObjectDropAudio, SerializerFlags.None | serializerFlags17);
				return true;
			}
			case "OnProductionItemAddedAudio":
			{
				SerializerFlags serializerFlags16 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnProductionItemAddedAudio, SerializerFlags.None | serializerFlags16);
				return true;
			}
			case "OnProductionErrorAudio":
			{
				SerializerFlags serializerFlags15 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnProductionErrorAudio, SerializerFlags.None | serializerFlags15);
				return true;
			}
			case "OnInventoryFullAudio":
			{
				SerializerFlags serializerFlags14 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnInventoryFullAudio, SerializerFlags.None | serializerFlags14);
				return true;
			}
			case "OnCharacterInventoryFullAudio":
			{
				SerializerFlags serializerFlags13 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnCharacterInventoryFullAudio, SerializerFlags.None | serializerFlags13);
				return true;
			}
			case "CharacterInventory":
			{
				SerializerFlags serializerFlags7 = SerializerFlags.None;
				if (source.IsNull(advance: false))
				{
					value.CharacterInventory = null;
					source.ReadObjectPrefix();
				}
				else if (BinaryHelper.IsNameSerialized(ref source))
				{
					((IBinarySerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).DeserializeIntoSlow(ref source, ref value.CharacterInventory, SerializerFlags.None | serializerFlags7);
				}
				else
				{
					InventoryDefinition.Serializer.Instance.DeserializeIntoSlow(ref source, ref value.CharacterInventory, SerializerFlags.None | serializerFlags7);
				}
				return true;
			}
			case "OnOpenRareLootContainerAudio":
			{
				SerializerFlags serializerFlags6 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnOpenRareLootContainerAudio, SerializerFlags.None | serializerFlags6);
				return true;
			}
			case "OnBackpackProductionStartAudio":
			{
				SerializerFlags serializerFlags5 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnBackpackProductionStartAudio, SerializerFlags.None | serializerFlags5);
				return true;
			}
			case "OnToolbarLoadUnloadAudio":
			{
				SerializerFlags serializerFlags4 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnToolbarLoadUnloadAudio, SerializerFlags.None | serializerFlags4);
				return true;
			}
			case "OnToolbarLoadUnloadParameter":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.OnToolbarLoadUnloadParameter, SerializerFlags.None | serializerFlags3);
				return true;
			}
			case "OnToolbarLoadUnloadParameterOnValue":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.OnToolbarLoadUnloadParameterOnValue, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "OnToolbarLoadUnloadParameterOffValue":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.OnToolbarLoadUnloadParameterOffValue, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		protected void DeserializeFast(ref BinaryDeserializationContext source, InventoryEffectsSessionComponentConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (value == null)
			{
				value = new InventoryEffectsSessionComponentConfigurationObjectBuilder();
			}
			DeserializeFast(ref source, (ConfigurationObjectBuilder)value, flags);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnTerminalScreenToggleAudio, SerializerFlags.None | serializerFlags);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.TerminalScreenToggleParameter, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.TerminalScreenToggleParameterOffValue, SerializerFlags.None | serializerFlags3);
			SerializerFlags serializerFlags4 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnObjectClickAudio, SerializerFlags.None | serializerFlags4);
			SerializerFlags serializerFlags5 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnChangeToolbarAudio, SerializerFlags.None | serializerFlags5);
			SerializerFlags serializerFlags6 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarTileSelectedAudio, SerializerFlags.None | serializerFlags6);
			SerializerFlags serializerFlags7 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarTileActivatedAudio, SerializerFlags.None | serializerFlags7);
			SerializerFlags serializerFlags8 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarTileDeselectedAudio, SerializerFlags.None | serializerFlags8);
			SerializerFlags serializerFlags9 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnChangeToolbarTileAudio, SerializerFlags.None | serializerFlags9);
			SerializerFlags serializerFlags10 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags10);
			SerializerFlags serializerFlags11 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSelectGScreenTileAudio, SerializerFlags.None | serializerFlags11);
			SerializerFlags serializerFlags12 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSearchGScreenAddAudio, SerializerFlags.None | serializerFlags12);
			SerializerFlags serializerFlags13 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags13);
			SerializerFlags serializerFlags14 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnQuickMenuOpenAudio, SerializerFlags.None | serializerFlags14);
			SerializerFlags serializerFlags15 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnQuickMenuClosedAudio, SerializerFlags.None | serializerFlags15);
			SerializerFlags serializerFlags16 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnObjectDropAudio, SerializerFlags.None | serializerFlags16);
			SerializerFlags serializerFlags17 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnProductionItemAddedAudio, SerializerFlags.None | serializerFlags17);
			SerializerFlags serializerFlags18 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnProductionErrorAudio, SerializerFlags.None | serializerFlags18);
			SerializerFlags serializerFlags19 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnInventoryFullAudio, SerializerFlags.None | serializerFlags19);
			SerializerFlags serializerFlags20 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnCharacterInventoryFullAudio, SerializerFlags.None | serializerFlags20);
			SerializerFlags serializerFlags21 = SerializerFlags.None;
			if (source.IsNull(advance: false))
			{
				value.CharacterInventory = null;
				source.ReadObjectPrefix();
			}
			else if (BinaryHelper.IsNameSerialized(ref source))
			{
				((IBinarySerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).DeserializeInto(ref source, ref value.CharacterInventory, SerializerFlags.None | serializerFlags21);
			}
			else
			{
				InventoryDefinition.Serializer.Instance.DeserializeInto(ref source, ref value.CharacterInventory, SerializerFlags.None | serializerFlags21);
			}
			SerializerFlags serializerFlags22 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnOpenRareLootContainerAudio, SerializerFlags.None | serializerFlags22);
			SerializerFlags serializerFlags23 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnBackpackProductionStartAudio, SerializerFlags.None | serializerFlags23);
			SerializerFlags serializerFlags24 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadAudio, SerializerFlags.None | serializerFlags24);
			SerializerFlags serializerFlags25 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadParameter, SerializerFlags.None | serializerFlags25);
			SerializerFlags serializerFlags26 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadParameterOnValue, SerializerFlags.None | serializerFlags26);
			SerializerFlags serializerFlags27 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadParameterOffValue, SerializerFlags.None | serializerFlags27);
		}

		protected void DeserializeDeltaEncoded(ref BinaryDeserializationContext source, InventoryEffectsSessionComponentConfigurationObjectBuilder value, int memberCount, SerializerFlags flags)
		{
			if (!source.TypeModel.IsInterned(typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder), out var index))
			{
				throw new SerializationException("Type InventoryEffectsSessionComponentConfigurationObjectBuilder not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			for (int i = 0; i < memberCount; i++)
			{
				int index2 = source.Reader.Read<ushort>();
				MemberData memberData = entry.OrderedMembers[index2];
				string name = memberData.Name;
				if ((source.PeekObjectPrefix() & ValuePrefix.DeltaEncoded) == 0)
				{
					source.DeltaEncoded = false;
					if (memberData.Type.IsValueType)
					{
						source.ReadObjectPrefix();
					}
				}
				if (!TryDeserializeMember(ref source, name, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder), name);
				}
				source.DeltaEncoded = true;
			}
		}

		/// <inheritdoc />
		public new InventoryEffectsSessionComponentConfigurationObjectBuilder? Deserialize(ref BinaryDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			InventoryEffectsSessionComponentConfigurationObjectBuilder value = null;
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref BinarySerializationContext destination, in InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				destination.WriteIsNull(isNull: true);
				return;
			}
			destination.WritePrefix(ValuePrefix.Value);
			SerializeMembers(ref destination, in value, flags);
		}

		/// <inheritdoc />
		public new void Serialize(ref BinarySerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, (InventoryEffectsSessionComponentConfigurationObjectBuilder)value, flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref BinarySerializationContext destination, in InventoryEffectsSessionComponentConfigurationObjectBuilder value, SerializerFlags flags)
		{
			ConfigurationObjectBuilder value2 = value;
			SerializeMembers(ref destination, in value2, flags);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnTerminalScreenToggleAudio, SerializerFlags.None | serializerFlags);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.TerminalScreenToggleParameter, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.TerminalScreenToggleParameterOffValue, SerializerFlags.None | serializerFlags3);
			SerializerFlags serializerFlags4 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnObjectClickAudio, SerializerFlags.None | serializerFlags4);
			SerializerFlags serializerFlags5 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnChangeToolbarAudio, SerializerFlags.None | serializerFlags5);
			SerializerFlags serializerFlags6 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnToolbarTileSelectedAudio, SerializerFlags.None | serializerFlags6);
			SerializerFlags serializerFlags7 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnToolbarTileActivatedAudio, SerializerFlags.None | serializerFlags7);
			SerializerFlags serializerFlags8 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnToolbarTileDeselectedAudio, SerializerFlags.None | serializerFlags8);
			SerializerFlags serializerFlags9 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnChangeToolbarTileAudio, SerializerFlags.None | serializerFlags9);
			SerializerFlags serializerFlags10 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags10);
			SerializerFlags serializerFlags11 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnSelectGScreenTileAudio, SerializerFlags.None | serializerFlags11);
			SerializerFlags serializerFlags12 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnSearchGScreenAddAudio, SerializerFlags.None | serializerFlags12);
			SerializerFlags serializerFlags13 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags13);
			SerializerFlags serializerFlags14 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnQuickMenuOpenAudio, SerializerFlags.None | serializerFlags14);
			SerializerFlags serializerFlags15 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnQuickMenuClosedAudio, SerializerFlags.None | serializerFlags15);
			SerializerFlags serializerFlags16 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnObjectDropAudio, SerializerFlags.None | serializerFlags16);
			SerializerFlags serializerFlags17 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnProductionItemAddedAudio, SerializerFlags.None | serializerFlags17);
			SerializerFlags serializerFlags18 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnProductionErrorAudio, SerializerFlags.None | serializerFlags18);
			SerializerFlags serializerFlags19 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnInventoryFullAudio, SerializerFlags.None | serializerFlags19);
			SerializerFlags serializerFlags20 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnCharacterInventoryFullAudio, SerializerFlags.None | serializerFlags20);
			SerializerFlags serializerFlags21 = SerializerFlags.None;
			InventoryDefinition value3 = value.CharacterInventory;
			if (value3 == null)
			{
				destination.WriteIsNull(isNull: true);
			}
			else if (InventoryDefinition.Serializer.Instance.ShouldSerializeAsName(destination.Context, in value3))
			{
				destination.WritePrefix(ValuePrefix.Name);
				((IBinarySerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).Serialize(ref destination, in value3, SerializerFlags.None | serializerFlags21);
			}
			else
			{
				InventoryDefinition.Serializer.Instance.Serialize(ref destination, in value3, SerializerFlags.None | serializerFlags21);
			}
			SerializerFlags serializerFlags22 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnOpenRareLootContainerAudio, SerializerFlags.None | serializerFlags22);
			SerializerFlags serializerFlags23 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnBackpackProductionStartAudio, SerializerFlags.None | serializerFlags23);
			SerializerFlags serializerFlags24 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnToolbarLoadUnloadAudio, SerializerFlags.None | serializerFlags24);
			SerializerFlags serializerFlags25 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.OnToolbarLoadUnloadParameter, SerializerFlags.None | serializerFlags25);
			SerializerFlags serializerFlags26 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.OnToolbarLoadUnloadParameterOnValue, SerializerFlags.None | serializerFlags26);
			SerializerFlags serializerFlags27 = SerializerFlags.None;
			ImmutableSingleton<StringIdSerializer>.Instance.Serialize(ref destination, in value.OnToolbarLoadUnloadParameterOffValue, SerializerFlags.None | serializerFlags27);
		}

		/// <inheritdoc />
		public new void DeserializeInto(ref GenericObjectDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeInto(ref source, ref Unsafe.As<object, InventoryEffectsSessionComponentConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref GenericObjectDeserializationContext source, ref InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.Object == null)
			{
				value = null;
				return;
			}
			if (value == null)
			{
				value = new InventoryEffectsSessionComponentConfigurationObjectBuilder();
			}
			if (source.Object is InventoryEffectsSessionComponentConfigurationObjectBuilder inventoryEffectsSessionComponentConfigurationObjectBuilder)
			{
				value = inventoryEffectsSessionComponentConfigurationObjectBuilder;
			}
			else
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		public void DeserializeMembers(ref GenericObjectDeserializationContext source, ref InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = new InventoryEffectsSessionComponentConfigurationObjectBuilder();
			}
			foreach (var (text2, obj2) in source.GenericObject)
			{
				GenericObjectDeserializationContext source2 = new GenericObjectDeserializationContext(source.Context, obj2, source.SourceFormat);
				if (!TryDeserializeMember(ref source2, text2, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder), text2);
				}
			}
		}

		protected bool TryDeserializeMember(ref GenericObjectDeserializationContext source, string property, InventoryEffectsSessionComponentConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (TryDeserializeMember(ref source, property, (ConfigurationObjectBuilder)value, flags))
			{
				return true;
			}
			switch (property)
			{
			case "OnTerminalScreenToggleAudio":
			{
				SerializerFlags serializerFlags11 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnTerminalScreenToggleAudio, SerializerFlags.None | serializerFlags11);
				return true;
			}
			case "TerminalScreenToggleParameter":
			{
				SerializerFlags serializerFlags10 = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.TerminalScreenToggleParameter, SerializerFlags.None | serializerFlags10);
				return true;
			}
			case "TerminalScreenToggleParameterOffValue":
			{
				SerializerFlags serializerFlags9 = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.TerminalScreenToggleParameterOffValue, SerializerFlags.None | serializerFlags9);
				return true;
			}
			case "OnObjectClickAudio":
			{
				SerializerFlags serializerFlags8 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnObjectClickAudio, SerializerFlags.None | serializerFlags8);
				return true;
			}
			case "OnChangeToolbarAudio":
			{
				SerializerFlags serializerFlags12 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnChangeToolbarAudio, SerializerFlags.None | serializerFlags12);
				return true;
			}
			case "OnToolbarTileSelectedAudio":
			{
				SerializerFlags serializerFlags27 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarTileSelectedAudio, SerializerFlags.None | serializerFlags27);
				return true;
			}
			case "OnToolbarTileActivatedAudio":
			{
				SerializerFlags serializerFlags26 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarTileActivatedAudio, SerializerFlags.None | serializerFlags26);
				return true;
			}
			case "OnToolbarTileDeselectedAudio":
			{
				SerializerFlags serializerFlags25 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarTileDeselectedAudio, SerializerFlags.None | serializerFlags25);
				return true;
			}
			case "OnChangeToolbarTileAudio":
			{
				SerializerFlags serializerFlags24 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnChangeToolbarTileAudio, SerializerFlags.None | serializerFlags24);
				return true;
			}
			case "OnRemoveToolbarTileAudio":
			{
				SerializerFlags serializerFlags23 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags23);
				return true;
			}
			case "OnSelectGScreenTileAudio":
			{
				SerializerFlags serializerFlags22 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSelectGScreenTileAudio, SerializerFlags.None | serializerFlags22);
				return true;
			}
			case "OnSearchGScreenAddAudio":
			{
				SerializerFlags serializerFlags21 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSearchGScreenAddAudio, SerializerFlags.None | serializerFlags21);
				return true;
			}
			case "OnSearchGScreenRemoveAudio":
			{
				SerializerFlags serializerFlags20 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags20);
				return true;
			}
			case "OnQuickMenuOpenAudio":
			{
				SerializerFlags serializerFlags19 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnQuickMenuOpenAudio, SerializerFlags.None | serializerFlags19);
				return true;
			}
			case "OnQuickMenuClosedAudio":
			{
				SerializerFlags serializerFlags18 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnQuickMenuClosedAudio, SerializerFlags.None | serializerFlags18);
				return true;
			}
			case "OnObjectDropAudio":
			{
				SerializerFlags serializerFlags17 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnObjectDropAudio, SerializerFlags.None | serializerFlags17);
				return true;
			}
			case "OnProductionItemAddedAudio":
			{
				SerializerFlags serializerFlags16 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnProductionItemAddedAudio, SerializerFlags.None | serializerFlags16);
				return true;
			}
			case "OnProductionErrorAudio":
			{
				SerializerFlags serializerFlags15 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnProductionErrorAudio, SerializerFlags.None | serializerFlags15);
				return true;
			}
			case "OnInventoryFullAudio":
			{
				SerializerFlags serializerFlags14 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnInventoryFullAudio, SerializerFlags.None | serializerFlags14);
				return true;
			}
			case "OnCharacterInventoryFullAudio":
			{
				SerializerFlags serializerFlags13 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnCharacterInventoryFullAudio, SerializerFlags.None | serializerFlags13);
				return true;
			}
			case "CharacterInventory":
			{
				SerializerFlags serializerFlags7 = SerializerFlags.None;
				if (source.Object == null)
				{
					value.CharacterInventory = null;
				}
				else if (GenericObjectHelper.IsNameSerialized(ref source))
				{
					((IGenericObjectSerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).DeserializeInto(ref source, ref value.CharacterInventory, SerializerFlags.None | serializerFlags7);
				}
				else
				{
					InventoryDefinition.Serializer.Instance.DeserializeInto(ref source, ref value.CharacterInventory, SerializerFlags.None | serializerFlags7);
				}
				return true;
			}
			case "OnOpenRareLootContainerAudio":
			{
				SerializerFlags serializerFlags6 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnOpenRareLootContainerAudio, SerializerFlags.None | serializerFlags6);
				return true;
			}
			case "OnBackpackProductionStartAudio":
			{
				SerializerFlags serializerFlags5 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnBackpackProductionStartAudio, SerializerFlags.None | serializerFlags5);
				return true;
			}
			case "OnToolbarLoadUnloadAudio":
			{
				SerializerFlags serializerFlags4 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadAudio, SerializerFlags.None | serializerFlags4);
				return true;
			}
			case "OnToolbarLoadUnloadParameter":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadParameter, SerializerFlags.None | serializerFlags3);
				return true;
			}
			case "OnToolbarLoadUnloadParameterOnValue":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadParameterOnValue, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "OnToolbarLoadUnloadParameterOffValue":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				ImmutableSingleton<StringIdSerializer>.Instance.DeserializeInto(ref source, ref value.OnToolbarLoadUnloadParameterOffValue, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		/// <inheritdoc />
		public new InventoryEffectsSessionComponentConfigurationObjectBuilder? Deserialize(ref GenericObjectDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			InventoryEffectsSessionComponentConfigurationObjectBuilder value = null;
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		public new ImmutableArray<MigrationInfo> GetMigrations()
		{
			return _typeMigrations.GetMigrations();
		}

		public new SerializationSchema GetSchema(Version version)
		{
			return _typeMigrations.GetSchema(version);
		}

		public new bool TryGetDeltaSchema(Version version, out SerializationSchema? schema)
		{
			schema = null;
			return false;
		}

		void IJsonSerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder>.Serialize(ref JsonSerializationContext destination, in InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in value, flags);
		}

		void IBinarySerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder>.Serialize(ref BinarySerializationContext destination, in InventoryEffectsSessionComponentConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in value, flags);
		}
	}

	private class Cloner : IDeepCloner<InventoryEffectsSessionComponentConfigurationObjectBuilder>, IDeepCloner
	{
		InventoryEffectsSessionComponentConfigurationObjectBuilder IDeepCloner<InventoryEffectsSessionComponentConfigurationObjectBuilder>.Clone(InventoryEffectsSessionComponentConfigurationObjectBuilder value, ref CloningContext context)
		{
			ref InventoryEffectsSessionComponentConfigurationObjectBuilder reference = ref context.ClonedOrNullRef(value);
			if (!Unsafe.IsNullRef(in reference))
			{
				return reference;
			}
			return new InventoryEffectsSessionComponentConfigurationObjectBuilder(in value, ref context);
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public new class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 29;

		static TypeInfoHolder()
		{
			int num = 2;
			RawAccessors = new(string, IMemberAccessor)[27]
			{
				("OnTerminalScreenToggleAudio", OnTerminalScreenToggleAudioAccessor()),
				("TerminalScreenToggleParameter", TerminalScreenToggleParameterAccessor()),
				("TerminalScreenToggleParameterOffValue", TerminalScreenToggleParameterOffValueAccessor()),
				("OnObjectClickAudio", OnObjectClickAudioAccessor()),
				("OnChangeToolbarAudio", OnChangeToolbarAudioAccessor()),
				("OnToolbarTileSelectedAudio", OnToolbarTileSelectedAudioAccessor()),
				("OnToolbarTileActivatedAudio", OnToolbarTileActivatedAudioAccessor()),
				("OnToolbarTileDeselectedAudio", OnToolbarTileDeselectedAudioAccessor()),
				("OnChangeToolbarTileAudio", OnChangeToolbarTileAudioAccessor()),
				("OnRemoveToolbarTileAudio", OnRemoveToolbarTileAudioAccessor()),
				("OnSelectGScreenTileAudio", OnSelectGScreenTileAudioAccessor()),
				("OnSearchGScreenAddAudio", OnSearchGScreenAddAudioAccessor()),
				("OnSearchGScreenRemoveAudio", OnSearchGScreenRemoveAudioAccessor()),
				("OnQuickMenuOpenAudio", OnQuickMenuOpenAudioAccessor()),
				("OnQuickMenuClosedAudio", OnQuickMenuClosedAudioAccessor()),
				("OnObjectDropAudio", OnObjectDropAudioAccessor()),
				("OnProductionItemAddedAudio", OnProductionItemAddedAudioAccessor()),
				("OnProductionErrorAudio", OnProductionErrorAudioAccessor()),
				("OnInventoryFullAudio", OnInventoryFullAudioAccessor()),
				("OnCharacterInventoryFullAudio", OnCharacterInventoryFullAudioAccessor()),
				("CharacterInventory", CharacterInventoryAccessor()),
				("OnOpenRareLootContainerAudio", OnOpenRareLootContainerAudioAccessor()),
				("OnBackpackProductionStartAudio", OnBackpackProductionStartAudioAccessor()),
				("OnToolbarLoadUnloadAudio", OnToolbarLoadUnloadAudioAccessor()),
				("OnToolbarLoadUnloadParameter", OnToolbarLoadUnloadParameterAccessor()),
				("OnToolbarLoadUnloadParameterOnValue", OnToolbarLoadUnloadParameterOnValueAccessor()),
				("OnToolbarLoadUnloadParameterOffValue", OnToolbarLoadUnloadParameterOffValueAccessor())
			};
			string documentation = null;
			MemberInfo[] array = new MemberInfo[27]
			{
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnTerminalScreenToggleAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("TerminalScreenToggleParameter", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("TerminalScreenToggleParameterOffValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnObjectClickAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnChangeToolbarAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarTileSelectedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarTileActivatedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarTileDeselectedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnChangeToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnRemoveToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnSelectGScreenTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnSearchGScreenAddAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnSearchGScreenRemoveAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnQuickMenuOpenAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnQuickMenuClosedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnObjectDropAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnProductionItemAddedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnProductionErrorAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnInventoryFullAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnCharacterInventoryFullAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("CharacterInventory", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnOpenRareLootContainerAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnBackpackProductionStartAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarLoadUnloadAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarLoadUnloadParameter", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarLoadUnloadParameterOnValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarLoadUnloadParameterOffValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					"Audio event to play upon opening/closing the terminal screen. One-shot sound"
				},
				{
					array[1],
					"Parameter to use for toggling on/off <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnTerminalScreenToggleAudio\"/>"
				},
				{
					array[2],
					"Off value to send to <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.TerminalScreenToggleParameter\"/>"
				},
				{
					array[3],
					"Audio event to play on picking up or transfering an item One-shot sound"
				},
				{
					array[4],
					"Audio event to play when toolbar is switched One-shot sound"
				},
				{
					array[5],
					"Audio event to play when tile is selected One-shot sound"
				},
				{
					array[6],
					"Audio event to play when player activates a toolbar tile action One-shot sound"
				},
				{
					array[7],
					"Audio event to play when player selects <see cref=\"Keen.Game2.Simulation.GameSystems.Toolbars.DeselectTile\"/> One-shot sound"
				},
				{
					array[8],
					"Audio event to play when toolbar a toolbar tile is changed One-shot sound"
				},
				{
					array[9],
					"Audio event to play when toolbar a toolbar tile is removed One-shot sound"
				},
				{
					array[10],
					"Audio event to play when a tile is selected in GScreen One-shot sound"
				},
				{
					array[11],
					"Audio event to play when a character is added to the GScreen search query One-shot sound"
				},
				{
					array[12],
					"Audio event to play when a character is removed from the GScreen search query One-shot sound"
				},
				{
					array[13],
					"Audio event to play when quick menu is opened One-shot sound"
				},
				{
					array[14],
					"Audio event to play when quick menu is closed One-shot sound"
				},
				{
					array[15],
					"Audio event to play on dropping a block One-shot sound"
				},
				{
					array[16],
					"Audio event to play on adding a production item to the queue One-shot sound"
				},
				{
					array[17],
					"Audio event to play on a production error One-shot sound"
				},
				{
					array[18],
					"Audio event to play when inventory is full One-shot sound"
				},
				{
					array[19],
					"Audio event to play when inventory is full One-shot sound"
				},
				{
					array[20],
					"Inventory definition to know if we are transferring to character or other inventory"
				},
				{
					array[21],
					"Audio event to play when player opens a container with rare generated loot One-shot sound"
				},
				{
					array[22],
					"Audio event to play on a backpack production started One-shot sound"
				},
				{
					array[23],
					"Audio event to play when toolbar is changing One-shot sound"
				},
				{
					array[24],
					"Parameter to use for toggling on/off <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadAudio\"/>"
				},
				{
					array[25],
					"Off value to send to <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadParameter\"/>"
				},
				{
					array[26],
					"Off value to send to <see cref=\"Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadParameter\"/>"
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[4],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[5],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[6],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[7],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[8],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[9],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[10],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[11],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[12],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[13],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[14],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[15],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[16],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[17],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[18],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[19],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[20],
					ListReader<Attribute>.Empty
				},
				{
					array[21],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[22],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[23],
					new List<Attribute>
					{
						new AudioEventAttribute()
					}
				},
				{
					array[24],
					ListReader<Attribute>.Empty
				},
				{
					array[25],
					ListReader<Attribute>.Empty
				},
				{
					array[26],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				},
				{
					array[4],
					num + 4
				},
				{
					array[5],
					num + 5
				},
				{
					array[6],
					num + 6
				},
				{
					array[7],
					num + 7
				},
				{
					array[8],
					num + 8
				},
				{
					array[9],
					num + 9
				},
				{
					array[10],
					num + 10
				},
				{
					array[11],
					num + 11
				},
				{
					array[12],
					num + 12
				},
				{
					array[13],
					num + 13
				},
				{
					array[14],
					num + 14
				},
				{
					array[15],
					num + 15
				},
				{
					array[16],
					num + 16
				},
				{
					array[17],
					num + 17
				},
				{
					array[18],
					num + 18
				},
				{
					array[19],
					num + 19
				},
				{
					array[20],
					num + 20
				},
				{
					array[21],
					num + 21
				},
				{
					array[22],
					num + 22
				},
				{
					array[23],
					num + 23
				},
				{
					array[24],
					num + 24
				},
				{
					array[25],
					num + 25
				},
				{
					array[26],
					num + 26
				}
			});
			RawAccessors = ConfigurationObjectBuilder.TypeInfoHolder.RawAccessors.Concat<(string, IMemberAccessor)>(RawAccessors).ToArray();
			builder.AddRange(ConfigurationObjectBuilder.TypeInfoHolder.Value.MembersDocumentation);
			builder3.AddRange(ConfigurationObjectBuilder.TypeInfoHolder.Value.MembersDeclarationOrder);
			builder2.AddRange(ConfigurationObjectBuilder.TypeInfoHolder.Value.MembersAttributes);
			Value = new AccessibleTypeInfo(typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor OnTerminalScreenToggleAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnTerminalScreenToggleAudio", "OnTerminalScreenToggleAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnTerminalScreenToggleAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnTerminalScreenToggleAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnTerminalScreenToggleAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnTerminalScreenToggleAudio));
		}

		private static IMemberAccessor TerminalScreenToggleParameterAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId>("TerminalScreenToggleParameter", "TerminalScreenToggleParameter", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("TerminalScreenToggleParameter", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.TerminalScreenToggleParameter, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId value)
			{
				instance.TerminalScreenToggleParameter = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.TerminalScreenToggleParameter));
		}

		private static IMemberAccessor TerminalScreenToggleParameterOffValueAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId>("TerminalScreenToggleParameterOffValue", "TerminalScreenToggleParameterOffValue", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("TerminalScreenToggleParameterOffValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.TerminalScreenToggleParameterOffValue, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId value)
			{
				instance.TerminalScreenToggleParameterOffValue = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.TerminalScreenToggleParameterOffValue));
		}

		private static IMemberAccessor OnObjectClickAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnObjectClickAudio", "OnObjectClickAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnObjectClickAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnObjectClickAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnObjectClickAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnObjectClickAudio));
		}

		private static IMemberAccessor OnChangeToolbarAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnChangeToolbarAudio", "OnChangeToolbarAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnChangeToolbarAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnChangeToolbarAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnChangeToolbarAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnChangeToolbarAudio));
		}

		private static IMemberAccessor OnToolbarTileSelectedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnToolbarTileSelectedAudio", "OnToolbarTileSelectedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarTileSelectedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnToolbarTileSelectedAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnToolbarTileSelectedAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnToolbarTileSelectedAudio));
		}

		private static IMemberAccessor OnToolbarTileActivatedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnToolbarTileActivatedAudio", "OnToolbarTileActivatedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarTileActivatedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnToolbarTileActivatedAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnToolbarTileActivatedAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnToolbarTileActivatedAudio));
		}

		private static IMemberAccessor OnToolbarTileDeselectedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnToolbarTileDeselectedAudio", "OnToolbarTileDeselectedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarTileDeselectedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnToolbarTileDeselectedAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnToolbarTileDeselectedAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnToolbarTileDeselectedAudio));
		}

		private static IMemberAccessor OnChangeToolbarTileAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnChangeToolbarTileAudio", "OnChangeToolbarTileAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnChangeToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnChangeToolbarTileAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnChangeToolbarTileAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnChangeToolbarTileAudio));
		}

		private static IMemberAccessor OnRemoveToolbarTileAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnRemoveToolbarTileAudio", "OnRemoveToolbarTileAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnRemoveToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnRemoveToolbarTileAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnRemoveToolbarTileAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnRemoveToolbarTileAudio));
		}

		private static IMemberAccessor OnSelectGScreenTileAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnSelectGScreenTileAudio", "OnSelectGScreenTileAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnSelectGScreenTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnSelectGScreenTileAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnSelectGScreenTileAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnSelectGScreenTileAudio));
		}

		private static IMemberAccessor OnSearchGScreenAddAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnSearchGScreenAddAudio", "OnSearchGScreenAddAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnSearchGScreenAddAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnSearchGScreenAddAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnSearchGScreenAddAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnSearchGScreenAddAudio));
		}

		private static IMemberAccessor OnSearchGScreenRemoveAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnSearchGScreenRemoveAudio", "OnSearchGScreenRemoveAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnSearchGScreenRemoveAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnSearchGScreenRemoveAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnSearchGScreenRemoveAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnSearchGScreenRemoveAudio));
		}

		private static IMemberAccessor OnQuickMenuOpenAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnQuickMenuOpenAudio", "OnQuickMenuOpenAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnQuickMenuOpenAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnQuickMenuOpenAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnQuickMenuOpenAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnQuickMenuOpenAudio));
		}

		private static IMemberAccessor OnQuickMenuClosedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnQuickMenuClosedAudio", "OnQuickMenuClosedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnQuickMenuClosedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnQuickMenuClosedAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnQuickMenuClosedAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnQuickMenuClosedAudio));
		}

		private static IMemberAccessor OnObjectDropAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnObjectDropAudio", "OnObjectDropAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnObjectDropAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnObjectDropAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnObjectDropAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnObjectDropAudio));
		}

		private static IMemberAccessor OnProductionItemAddedAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnProductionItemAddedAudio", "OnProductionItemAddedAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnProductionItemAddedAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnProductionItemAddedAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnProductionItemAddedAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnProductionItemAddedAudio));
		}

		private static IMemberAccessor OnProductionErrorAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnProductionErrorAudio", "OnProductionErrorAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnProductionErrorAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnProductionErrorAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnProductionErrorAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnProductionErrorAudio));
		}

		private static IMemberAccessor OnInventoryFullAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnInventoryFullAudio", "OnInventoryFullAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnInventoryFullAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnInventoryFullAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnInventoryFullAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnInventoryFullAudio));
		}

		private static IMemberAccessor OnCharacterInventoryFullAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnCharacterInventoryFullAudio", "OnCharacterInventoryFullAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnCharacterInventoryFullAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnCharacterInventoryFullAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnCharacterInventoryFullAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnCharacterInventoryFullAudio));
		}

		private static IMemberAccessor CharacterInventoryAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, InventoryDefinition>("CharacterInventory", "CharacterInventory", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("CharacterInventory", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(InventoryDefinition), () => InventoryDefinition.TypeInfoHolder.Value, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.CharacterInventory, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in InventoryDefinition value)
			{
				instance.CharacterInventory = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.CharacterInventory));
		}

		private static IMemberAccessor OnOpenRareLootContainerAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnOpenRareLootContainerAudio", "OnOpenRareLootContainerAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnOpenRareLootContainerAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnOpenRareLootContainerAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnOpenRareLootContainerAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnOpenRareLootContainerAudio));
		}

		private static IMemberAccessor OnBackpackProductionStartAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnBackpackProductionStartAudio", "OnBackpackProductionStartAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnBackpackProductionStartAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnBackpackProductionStartAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnBackpackProductionStartAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnBackpackProductionStartAudio));
		}

		private static IMemberAccessor OnToolbarLoadUnloadAudioAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnToolbarLoadUnloadAudio", "OnToolbarLoadUnloadAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarLoadUnloadAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnToolbarLoadUnloadAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
			{
				instance.OnToolbarLoadUnloadAudio = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnToolbarLoadUnloadAudio));
		}

		private static IMemberAccessor OnToolbarLoadUnloadParameterAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId>("OnToolbarLoadUnloadParameter", "OnToolbarLoadUnloadParameter", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarLoadUnloadParameter", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnToolbarLoadUnloadParameter, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId value)
			{
				instance.OnToolbarLoadUnloadParameter = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnToolbarLoadUnloadParameter));
		}

		private static IMemberAccessor OnToolbarLoadUnloadParameterOnValueAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId>("OnToolbarLoadUnloadParameterOnValue", "OnToolbarLoadUnloadParameterOnValue", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarLoadUnloadParameterOnValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnToolbarLoadUnloadParameterOnValue, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId value)
			{
				instance.OnToolbarLoadUnloadParameterOnValue = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnToolbarLoadUnloadParameterOnValue));
		}

		private static IMemberAccessor OnToolbarLoadUnloadParameterOffValueAccessor()
		{
			return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId>("OnToolbarLoadUnloadParameterOffValue", "OnToolbarLoadUnloadParameterOffValue", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnToolbarLoadUnloadParameterOffValue", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId), null, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnToolbarLoadUnloadParameterOffValue, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId value)
			{
				instance.OnToolbarLoadUnloadParameterOffValue = value;
			}, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnToolbarLoadUnloadParameterOffValue));
		}
	}

	/// <summary>
	/// Audio event to play upon opening/closing the terminal screen.
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnTerminalScreenToggleAudio;

	/// <summary>
	/// Parameter to use for toggling on/off <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnTerminalScreenToggleAudio" />
	/// </summary>
	public StringId TerminalScreenToggleParameter;

	/// <summary>
	/// Off value to send to <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.TerminalScreenToggleParameter" />
	/// </summary>
	public StringId TerminalScreenToggleParameterOffValue;

	/// <summary>
	/// Audio event to play on picking up or transfering an item
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnObjectClickAudio;

	/// <summary>
	/// Audio event to play when toolbar is switched
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnChangeToolbarAudio;

	/// <summary>
	/// Audio event to play when tile is selected
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnToolbarTileSelectedAudio;

	/// <summary>
	/// Audio event to play when player activates a toolbar tile action
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnToolbarTileActivatedAudio;

	/// <summary>
	/// Audio event to play when player selects <see cref="T:Keen.Game2.Simulation.GameSystems.Toolbars.DeselectTile" />
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnToolbarTileDeselectedAudio;

	/// <summary>
	/// Audio event to play when toolbar a toolbar tile is changed
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnChangeToolbarTileAudio;

	/// <summary>
	/// Audio event to play when toolbar a toolbar tile is removed
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnRemoveToolbarTileAudio;

	/// <summary>
	/// Audio event to play when a tile is selected in GScreen
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnSelectGScreenTileAudio;

	/// <summary>
	/// Audio event to play when a character is added to the GScreen search query
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnSearchGScreenAddAudio;

	/// <summary>
	/// Audio event to play when a character is removed from the GScreen search query
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnSearchGScreenRemoveAudio;

	/// <summary>
	/// Audio event to play when quick menu is opened
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnQuickMenuOpenAudio;

	/// <summary>
	/// Audio event to play when quick menu is closed
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnQuickMenuClosedAudio;

	/// <summary>
	/// Audio event to play on dropping a block
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnObjectDropAudio;

	/// <summary>
	/// Audio event to play on adding a production item to the queue
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnProductionItemAddedAudio;

	/// <summary>
	/// Audio event to play on a production error
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnProductionErrorAudio;

	/// <summary>
	/// Audio event to play when inventory is full
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnInventoryFullAudio;

	/// <summary>
	/// Audio event to play when inventory is full
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnCharacterInventoryFullAudio;

	/// <summary>
	/// Inventory definition to know if we are transferring to character or other inventory
	/// </summary>
	public InventoryDefinition CharacterInventory;

	/// <summary>
	/// Audio event to play when player opens a container with rare generated loot
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnOpenRareLootContainerAudio;

	/// <summary>
	/// Audio event to play on a backpack production started
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnBackpackProductionStartAudio;

	/// <summary>
	/// Audio event to play when toolbar is changing
	/// One-shot sound
	/// </summary>
	[AudioEvent]
	public StringId? OnToolbarLoadUnloadAudio;

	/// <summary>
	/// Parameter to use for toggling on/off <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadAudio" />
	/// </summary>
	public StringId OnToolbarLoadUnloadParameter;

	/// <summary>
	/// Off value to send to <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadParameter" />
	/// </summary>
	public StringId OnToolbarLoadUnloadParameterOnValue;

	/// <summary>
	/// Off value to send to <see cref="P:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration.OnToolbarLoadUnloadParameter" />
	/// </summary>
	public StringId OnToolbarLoadUnloadParameterOffValue;

	static BuildableTypeInfo IObjectBuilder.BuildableInfo => ObjectBuilder.GetBuildableInfo<InventoryEffectsSessionComponentConfiguration>();

	/// <inheritdoc />
	static ISerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder> ISerializable<InventoryEffectsSessionComponentConfigurationObjectBuilder>.Serializer => Serializer.Instance;

	static IDeepCloner<InventoryEffectsSessionComponentConfigurationObjectBuilder> IDeepCloneable<InventoryEffectsSessionComponentConfigurationObjectBuilder>.Cloner { get; } = new Cloner();

	public InventoryEffectsSessionComponentConfigurationObjectBuilder()
	{
		OnTerminalScreenToggleAudio = null;
		TerminalScreenToggleParameter = "OnOff";
		TerminalScreenToggleParameterOffValue = "Off";
		OnObjectClickAudio = null;
		OnChangeToolbarAudio = null;
		OnToolbarTileSelectedAudio = null;
		OnToolbarTileActivatedAudio = null;
		OnToolbarTileDeselectedAudio = null;
		OnChangeToolbarTileAudio = null;
		OnRemoveToolbarTileAudio = null;
		OnSelectGScreenTileAudio = null;
		OnSearchGScreenAddAudio = null;
		OnSearchGScreenRemoveAudio = null;
		OnQuickMenuOpenAudio = null;
		OnQuickMenuClosedAudio = null;
		OnObjectDropAudio = null;
		OnProductionItemAddedAudio = null;
		OnProductionErrorAudio = null;
		OnInventoryFullAudio = null;
		OnCharacterInventoryFullAudio = null;
		CharacterInventory = null;
		OnOpenRareLootContainerAudio = null;
		OnBackpackProductionStartAudio = null;
		OnToolbarLoadUnloadAudio = null;
		OnToolbarLoadUnloadParameter = "OnOff";
		OnToolbarLoadUnloadParameterOnValue = "On";
		OnToolbarLoadUnloadParameterOffValue = "Off";
	}

	/// <inheritdoc />
	public new static IStreamSerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder> GetStreamSerializer(SerializerFormat format)
	{
		return format switch
		{
			SerializerFormat.Binary => ImmutableSingleton<BinaryStreamSerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder>>.Instance, 
			SerializerFormat.Json => ImmutableSingleton<JsonStreamSerializer<InventoryEffectsSessionComponentConfigurationObjectBuilder>>.Instance, 
		};
	}

	[SetsRequiredMembers]
	protected InventoryEffectsSessionComponentConfigurationObjectBuilder(in InventoryEffectsSessionComponentConfigurationObjectBuilder instance, ref CloningContext context)
		: base((ConfigurationObjectBuilder)instance, ref context)
	{
		ref InventoryEffectsSessionComponentConfigurationObjectBuilder reference = ref context.ClonedOrNewRef(instance, out var exists);
		if (!exists)
		{
			reference = this;
		}
		OnTerminalScreenToggleAudio = instance.OnTerminalScreenToggleAudio;
		TerminalScreenToggleParameter = instance.TerminalScreenToggleParameter;
		TerminalScreenToggleParameterOffValue = instance.TerminalScreenToggleParameterOffValue;
		OnObjectClickAudio = instance.OnObjectClickAudio;
		OnChangeToolbarAudio = instance.OnChangeToolbarAudio;
		OnToolbarTileSelectedAudio = instance.OnToolbarTileSelectedAudio;
		OnToolbarTileActivatedAudio = instance.OnToolbarTileActivatedAudio;
		OnToolbarTileDeselectedAudio = instance.OnToolbarTileDeselectedAudio;
		OnChangeToolbarTileAudio = instance.OnChangeToolbarTileAudio;
		OnRemoveToolbarTileAudio = instance.OnRemoveToolbarTileAudio;
		OnSelectGScreenTileAudio = instance.OnSelectGScreenTileAudio;
		OnSearchGScreenAddAudio = instance.OnSearchGScreenAddAudio;
		OnSearchGScreenRemoveAudio = instance.OnSearchGScreenRemoveAudio;
		OnQuickMenuOpenAudio = instance.OnQuickMenuOpenAudio;
		OnQuickMenuClosedAudio = instance.OnQuickMenuClosedAudio;
		OnObjectDropAudio = instance.OnObjectDropAudio;
		OnProductionItemAddedAudio = instance.OnProductionItemAddedAudio;
		OnProductionErrorAudio = instance.OnProductionErrorAudio;
		OnInventoryFullAudio = instance.OnInventoryFullAudio;
		OnCharacterInventoryFullAudio = instance.OnCharacterInventoryFullAudio;
		if (instance.CharacterInventory != null)
		{
			CharacterInventory = (InventoryDefinition)CloningHelper.ClonePolymorphic(instance.CharacterInventory, ref context);
		}
		OnOpenRareLootContainerAudio = instance.OnOpenRareLootContainerAudio;
		OnBackpackProductionStartAudio = instance.OnBackpackProductionStartAudio;
		OnToolbarLoadUnloadAudio = instance.OnToolbarLoadUnloadAudio;
		OnToolbarLoadUnloadParameter = instance.OnToolbarLoadUnloadParameter;
		OnToolbarLoadUnloadParameterOnValue = instance.OnToolbarLoadUnloadParameterOnValue;
		OnToolbarLoadUnloadParameterOffValue = instance.OnToolbarLoadUnloadParameterOffValue;
	}

	public override InventoryEffectsSessionComponentConfigurationObjectBuilder DeepClone()
	{
		CloningContext context = new CloningContext();
		return DeepClone(ref context);
	}

	public override InventoryEffectsSessionComponentConfigurationObjectBuilder DeepClone(ref CloningContext context)
	{
		return CloningHelper.GetCloner<InventoryEffectsSessionComponentConfigurationObjectBuilder>().Clone(this, ref context);
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public override AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Immutable;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.Migrations.Internal;
using Keen.VRage.Library.Utils;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

[Migrations(typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder))]
public class InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations : IMigrations
{
	private readonly ImmutableArray<MigrationInfo> _migrationInfos;

	private static readonly ImmutableArray<LayoutInfo> VersionLayouts;

	private static readonly ImmutableArray<VersionLayoutDelta> VersionLayoutDeltas;

	private static LayoutInfo DiskBlittableLayout;

	private static TypeSerializationSchemas _schemas;

	[Version(0)]
	private static readonly TypeStructureDelta Version_0_0_0_0_Delta;

	public ref readonly SerializationSchema LatestSchema => ref _schemas.GetLatestSchema();

	public InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations()
	{
		ImmutableArray<MigrationInfo>.Builder builder = ImmutableArray.CreateBuilder<MigrationInfo>(0);
		_migrationInfos = MigrationsHelper.CombineMigrations<ConfigurationObjectBuilder>(builder);
	}

	static InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations()
	{
		VersionLayoutDeltas = ImmutableArray<VersionLayoutDelta>.Empty;
		DiskBlittableLayout = default(LayoutInfo);
		Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("OnTerminalScreenToggleAudio", typeof(StringId?))).Add(new MemberData("TerminalScreenToggleParameter", typeof(StringId))).Add(new MemberData("TerminalScreenToggleParameterOffValue", typeof(StringId)))
			.Add(new MemberData("OnObjectClickAudio", typeof(StringId?)))
			.Add(new MemberData("OnChangeToolbarAudio", typeof(StringId?)))
			.Add(new MemberData("OnToolbarTileSelectedAudio", typeof(StringId?)))
			.Add(new MemberData("OnToolbarTileActivatedAudio", typeof(StringId?)))
			.Add(new MemberData("OnToolbarTileDeselectedAudio", typeof(StringId?)))
			.Add(new MemberData("OnChangeToolbarTileAudio", typeof(StringId?)))
			.Add(new MemberData("OnRemoveToolbarTileAudio", typeof(StringId?)))
			.Add(new MemberData("OnSelectGScreenTileAudio", typeof(StringId?)))
			.Add(new MemberData("OnSearchGScreenAddAudio", typeof(StringId?)))
			.Add(new MemberData("OnSearchGScreenRemoveAudio", typeof(StringId?)))
			.Add(new MemberData("OnQuickMenuOpenAudio", typeof(StringId?)))
			.Add(new MemberData("OnQuickMenuClosedAudio", typeof(StringId?)))
			.Add(new MemberData("OnObjectDropAudio", typeof(StringId?)))
			.Add(new MemberData("OnProductionItemAddedAudio", typeof(StringId?)))
			.Add(new MemberData("OnProductionErrorAudio", typeof(StringId?)))
			.Add(new MemberData("OnInventoryFullAudio", typeof(StringId?)))
			.Add(new MemberData("OnCharacterInventoryFullAudio", typeof(StringId?)))
			.Add(new MemberData("CharacterInventory", typeof(InventoryDefinition)))
			.Add(new MemberData("OnOpenRareLootContainerAudio", typeof(StringId?)))
			.Add(new MemberData("OnBackpackProductionStartAudio", typeof(StringId?)))
			.Add(new MemberData("OnToolbarLoadUnloadAudio", typeof(StringId?)))
			.Add(new MemberData("OnToolbarLoadUnloadParameter", typeof(StringId)))
			.Add(new MemberData("OnToolbarLoadUnloadParameterOnValue", typeof(StringId)))
			.Add(new MemberData("OnToolbarLoadUnloadParameterOffValue", typeof(StringId)));
		ImmutableArray<VersionLayoutDelta> baseLayout = MigrationsHelper.GetBaseLayout<ConfigurationObjectBuilder>();
		ImmutableArray<VersionLayoutDelta>.Builder builder = ImmutableArray.CreateBuilder<VersionLayoutDelta>(1 + baseLayout.Length);
		builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
		VersionLayoutDeltas = MigrationsHelper.CombineLayouts(baseLayout, builder);
		VersionLayouts = MigrationsHelper.ConstructFinalVersionLayouts(typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder), VersionLayoutDeltas);
		SerializableTypeFlags flags = SerializableTypeFlags.KeyType;
		_schemas = new TypeSerializationSchemas(typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder), null, VersionLayouts, flags, DiskBlittableLayout);
	}

	public ImmutableArray<MigrationInfo> GetMigrations()
	{
		return _migrationInfos;
	}

	public ImmutableArray<VersionLayoutDelta> GetLayoutDeltas()
	{
		return VersionLayoutDeltas;
	}

	public SerializationSchema GetSchema(Version version)
	{
		return _schemas.GetSchema(version);
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
#define FEATURE_ASSERTIONS
using System;
using System.Collections;
using System.Collections.Specialized;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Input;
using Avalonia.LogicalTree;
using Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.UI.Shared;
using Keen.VRage.UI.Shared.Extensions;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
///
/// </summary>
public class InventoryGrid : TemplatedControl
{
	public static readonly DirectProperty<InventoryGrid, IEnumerable> ItemsProperty = AvaloniaProperty.RegisterDirect("Items", (InventoryGrid o) => o.Items, delegate(InventoryGrid o, IEnumerable v)
	{
		o.Items = v;
	});

	public static readonly DirectProperty<InventoryGrid, int?> MaxStacksProperty = AvaloniaProperty.RegisterDirect("MaxStacks", (InventoryGrid o) => o.MaxStacks, delegate(InventoryGrid o, int? v)
	{
		o.MaxStacks = v;
	});

	public static readonly DirectProperty<InventoryGrid, double> ItemSizeProperty = AvaloniaProperty.RegisterDirect("ItemSize", (InventoryGrid o) => o.ItemSize, delegate(InventoryGrid o, double v)
	{
		o.ItemSize = v;
	}, 0.0);

	private int? _maxStacks;

	private double _itemSize;

	private double _availableWidth;

	private InventoryViewModel? _inventory;

	private ItemsControl? _itemsControl;

	private TerminalScreen? _inventoryPanel;

	public IEnumerable Items
	{
		get
		{
			return ItemsFilled();
		}
		set
		{
			RaisePropertyChanged(ItemsProperty, value, value);
		}
	}

	public int? MaxStacks
	{
		get
		{
			return _maxStacks;
		}
		set
		{
			_maxStacks = value;
		}
	}

	public double ItemSize
	{
		get
		{
			return _itemSize;
		}
		set
		{
			_itemSize = value;
		}
	}

	protected override void OnInitialized()
	{
		base.OnInitialized();
		_inventory = (InventoryViewModel)base.DataContext;
		if (_inventory != null)
		{
			((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
		}
		AddHandler(DragDrop.DropEvent, OnDrop);
		AddHandler(InputElement.PointerPressedEvent, OnPointerPressed);
	}

	protected override void OnDataContextChanged(EventArgs e)
	{
		if (_inventory != null)
		{
			((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
		}
		_inventory = (InventoryViewModel)base.DataContext;
		if (_inventory != null)
		{
			((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
		}
		InventoryItemsChanged(null, null);
	}

	protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e)
	{
		base.OnDetachedFromLogicalTree(e);
		if (_inventory != null)
		{
			((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
		}
	}

	private void InventoryItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
	{
		if (_inventory != null)
		{
			RaisePropertyChanged(ItemsProperty, _inventory.InventoryItems, _inventory.InventoryItems);
		}
	}

	private IEnumerable ItemsFilled()
	{
		if (_itemsControl == null || _itemsControl.Bounds.Width == 0.0)
		{
			yield break;
		}
		_availableWidth = _itemsControl.Bounds.Width;
		int numberOfItems = 0;
		if (_inventory == null)
		{
			yield break;
		}
		foreach (InventoryItemModel inventoryItem in _inventory.InventoryItems)
		{
			numberOfItems++;
			yield return inventoryItem;
		}
		int? maxStacks = MaxStacks;
		if (maxStacks.HasValue)
		{
			int maxStacks2 = maxStacks.GetValueOrDefault();
			for (int i = numberOfItems; i < maxStacks2; i++)
			{
				numberOfItems++;
				yield return null;
			}
			yield break;
		}
		int num = (int)Math.Floor(_availableWidth / ItemSize);
		if (num != 0)
		{
			for (int i = num - numberOfItems % num; i > 0; i--)
			{
				numberOfItems++;
				yield return null;
			}
		}
	}

	protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
	{
		base.OnApplyTemplate(e);
		if (_itemsControl != null)
		{
			_itemsControl.PropertyChanged -= OnItemsControlPropertyChanged;
		}
		_itemsControl = e.NameScope.Find<ItemsControl>("PART_ItemsControl");
		if (_itemsControl != null)
		{
			_itemsControl.PropertyChanged += OnItemsControlPropertyChanged;
		}
	}

	private void OnItemsControlPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs args)
	{
		if (args.Property == Visual.BoundsProperty && args.NewValue is Rect rect && Math.Abs(rect.Width - _availableWidth) > 0.10000000149011612 && _inventory != null)
		{
			RaisePropertyChanged(ItemsProperty, _inventory.InventoryItems, _inventory.InventoryItems);
		}
	}

	private async void OnDrop(object? sender, DragEventArgs e)
	{
		if (_inventoryPanel == null)
		{
			_inventoryPanel = this.FindParentOfType<TerminalScreen>();
		}
		if (_inventoryPanel == null || !(_inventoryPanel.DataContext is TerminalScreenViewModel terminalScreenViewModel) || terminalScreenViewModel.IsSelected(TerminalCategoryId.From(TerminalScreenMode.Trade)))
		{
			return;
		}
		object obj = e.Data.Get("InventoryItemModel");
		InventoryItemModel inventoryItemModel = (e.Source as IDataContextProvider)?.DataContext as InventoryItemModel;
		if (obj is VRageDataObject.ExternalData && ((VRageDataObject.ExternalData)obj).InternalValue is InventoryItemModel inventoryItemModel2 && base.DataContext is InventoryViewModel inventoryViewModel && inventoryItemModel2 != inventoryItemModel)
		{
			int? targetSlot;
			if (inventoryItemModel != null)
			{
				int num = inventoryViewModel.Model.Items.IndexOf(inventoryItemModel);
				Assert.CompareNotEqual(num, -1, "Failed to find target of dropped tile", "index", "-1", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Client\\UI\\TerminalScreen\\Inventory\\InventoryGrid.axaml.cs", 196);
				targetSlot = ((num != -1) ? new int?(num) : ((int?)null));
			}
			else
			{
				targetSlot = inventoryViewModel.Model.Items.Count;
			}
			await terminalScreenViewModel.TransferItemAsync(inventoryViewModel.Model, inventoryItemModel2, targetSlot);
		}
	}

	private void OnPointerPressed(object? sender, PointerPressedEventArgs e)
	{
		if (_inventoryPanel == null)
		{
			_inventoryPanel = this.FindParentOfType<TerminalScreen>();
		}
		if (_inventoryPanel != null && _inventoryPanel.DataContext is TerminalScreenViewModel terminalScreenViewModel && terminalScreenViewModel.IsSelected(TerminalScreenId.From(CharacterScreenMode.Datapads)))
		{
			if (e.GetCurrentPoint(this).Properties.IsRightButtonPressed)
			{
				e.Handled = true;
				return;
			}
			InventoryItemModel datapad = (e.Source as IDataContextProvider)?.DataContext as InventoryItemModel;
			terminalScreenViewModel.DatapadsScreenViewModel.SelectDatapad(datapad);
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Metadata;
using Avalonia.Controls.Primitives;
using Avalonia.Input;
using Avalonia.Interactivity;
using Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;
using Keen.VRage.UI.Shared;
using Keen.VRage.UI.Shared.Extensions;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
///
/// </summary>
[PseudoClasses(new string[] { ":drag-over" })]
[PseudoClasses(new string[] { ":valid-drag-over" })]
[PseudoClasses(new string[] { ":invalid-drag-over" })]
public class InventoryItem : TemplatedControl
{
	public static readonly StyledProperty<InventoryItemModel?> ItemProperty = AvaloniaProperty.Register<InventoryItem, InventoryItemModel>("Item");

	public static readonly StyledProperty<bool> IsDraggingProperty = AvaloniaProperty.Register<InventoryItem, bool>("IsDragging", defaultValue: false);

	public static readonly StyledProperty<bool> StackableProperty = AvaloniaProperty.Register<InventoryItem, bool>("Stackable", defaultValue: false);

	public static readonly StyledProperty<bool> DisabledProperty = AvaloniaProperty.Register<InventoryItem, bool>("Disabled", defaultValue: false);

	public static readonly StyledProperty<bool> NewProperty = AvaloniaProperty.Register<InventoryItem, bool>("New", defaultValue: false);

	public static readonly StyledProperty<bool> IsNameVisibleProperty = AvaloniaProperty.Register<InventoryItem, bool>("IsNameVisible", defaultValue: false);

	public static readonly RoutedEvent<InventoryItemEventArgs> ActionEventProperty = RoutedEvent.Register<InventoryItem, InventoryItemEventArgs>("ActionEvent", RoutingStrategies.Bubble);

	private Point? _dragStartPoint;

	private TerminalScreen? _terminalScreen;

	private TerminalScreenViewModel? _terminalScreenViewModel;

	private Panel? _tooltipPanel;

	public InventoryItemModel? Item
	{
		get
		{
			return GetValue(ItemProperty);
		}
		set
		{
			SetValue(ItemProperty, value);
		}
	}

	public bool IsDragging
	{
		get
		{
			return GetValue(IsDraggingProperty);
		}
		set
		{
			SetValue(IsDraggingProperty, value);
		}
	}

	public bool Stackable
	{
		get
		{
			return GetValue(StackableProperty);
		}
		set
		{
			SetValue(StackableProperty, value);
		}
	}

	public bool Disabled
	{
		get
		{
			return GetValue(DisabledProperty);
		}
		set
		{
			SetValue(DisabledProperty, value);
		}
	}

	public bool New
	{
		get
		{
			return GetValue(NewProperty);
		}
		set
		{
			SetValue(NewProperty, value);
		}
	}

	public bool IsNameVisible
	{
		get
		{
			return GetValue(IsNameVisibleProperty);
		}
		set
		{
			SetValue(IsNameVisibleProperty, value);
		}
	}

	public event EventHandler<InventoryItemEventArgs> ActionEvent
	{
		add
		{
			AddHandler(ActionEventProperty, value);
		}
		remove
		{
			RemoveHandler(ActionEventProperty, value);
		}
	}

	protected override void OnLoaded(RoutedEventArgs e)
	{
		base.OnLoaded(e);
		base.DoubleTapped += OnDoubleTapped;
		AddHandler(DragDrop.DragEnterEvent, OnDragEnter);
		AddHandler(DragDrop.DragLeaveEvent, OnDragLeave);
		if (_terminalScreen == null)
		{
			_terminalScreen = this.FindParentOfType<TerminalScreen>();
		}
		TerminalScreen terminalScreen = _terminalScreen;
		if (terminalScreen != null && terminalScreen.DataContext is TerminalScreenViewModel terminalScreenViewModel)
		{
			_terminalScreenViewModel = terminalScreenViewModel;
		}
		_tooltipPanel = this.FindChildOfType<Panel>("PART_Panel");
	}

	protected override void OnUnloaded(RoutedEventArgs e)
	{
		StopDragDrop();
		base.DoubleTapped -= OnDoubleTapped;
		RemoveHandler(DragDrop.DragEnterEvent, OnDragEnter);
		RemoveHandler(DragDrop.DragLeaveEvent, OnDragLeave);
		_terminalScreenViewModel = null;
		_terminalScreen = null;
		base.OnUnloaded(e);
	}

	private void OnDoubleTapped(object? sender, TappedEventArgs args)
	{
		if (sender is InventoryItem inventoryItem)
		{
			InventoryItemModel item = inventoryItem.Item;
			if (item != null && !item.Disabled)
			{
				InventoryItemEventArgs e = new InventoryItemEventArgs(item, EventType.DoubleClick)
				{
					RoutedEvent = ActionEventProperty
				};
				RaiseEvent(e);
				_dragStartPoint = null;
			}
		}
	}

	protected override async void OnPointerMoved(PointerEventArgs e)
	{
		base.OnPointerMoved(e);
		if (_terminalScreenViewModel != null && _terminalScreen != null && base.IsPointerOver && Item != null && _dragStartPoint.HasValue && !(Point.Distance(_dragStartPoint.Value, e.GetPosition(this)) <= 5.0) && !Item.Disabled)
		{
			_dragStartPoint = null;
			_terminalScreen.PART_DragOverlay.Content = Item;
			_terminalScreenViewModel.OnTransferAmountModifierSelected += TerminalScreenViewModelOnOnTransferAmountModifierSelected;
			Item.DragAmount = _terminalScreenViewModel.GetTransferAmount(Item.Amount);
			VRageDataObject vRageDataObject = new VRageDataObject();
			vRageDataObject.SetInternal("InventoryItemModel", Item);
			_terminalScreenViewModel.StartDragItem(Item);
			await DragDrop.DoDragDrop(e, vRageDataObject, DragDropEffects.Move);
			StopDragDrop();
		}
	}

	private void TerminalScreenViewModelOnOnTransferAmountModifierSelected()
	{
		if (_terminalScreenViewModel != null && Item != null)
		{
			Item.DragAmount = _terminalScreenViewModel.GetTransferAmount(Item.Amount);
		}
	}

	protected override void OnPointerPressed(PointerPressedEventArgs e)
	{
		base.OnPointerPressed(e);
		if (Item == null || Item.Disabled)
		{
			return;
		}
		if (e.GetCurrentPoint(this).Properties.IsRightButtonPressed)
		{
			InventoryItemModel item = Item;
			if (item != null)
			{
				InventoryItemEventArgs e2 = new InventoryItemEventArgs(item, EventType.RightClick)
				{
					RoutedEvent = ActionEventProperty
				};
				RaiseEvent(e2);
				return;
			}
		}
		_dragStartPoint = e.GetPosition(this);
	}

	protected override void OnPointerReleased(PointerReleasedEventArgs e)
	{
		base.OnPointerReleased(e);
		_dragStartPoint = null;
	}

	private void OnDragEnter(object? sender, DragEventArgs e)
	{
		if (_tooltipPanel != null)
		{
			ToolTip.SetIsOpen(_tooltipPanel, value: false);
		}
		object obj = e.Data.Get("InventoryItemModel");
		if (obj is VRageDataObject.ExternalData && ((VRageDataObject.ExternalData)obj).InternalValue is InventoryItemModel inventoryItemModel)
		{
			bool flag = !(base.DataContext is InventoryItemModel inventoryItemModel2) || inventoryItemModel2.Definition == inventoryItemModel.Definition;
			base.PseudoClasses.Set(":valid-drag-over", flag);
			base.PseudoClasses.Set(":invalid-drag-over", !flag);
			base.PseudoClasses.Set(":drag-over", value: false);
		}
		else
		{
			base.PseudoClasses.Set(":drag-over", value: true);
		}
	}

	private void OnDragLeave(object? sender, DragEventArgs e)
	{
		base.PseudoClasses.Set(":drag-over", value: false);
		base.PseudoClasses.Set(":valid-drag-over", value: false);
		base.PseudoClasses.Set(":invalid-drag-over", value: false);
	}

	private void StopDragDrop()
	{
		_dragStartPoint = null;
		if (_terminalScreenViewModel != null)
		{
			_terminalScreenViewModel.StopDragItem();
			_terminalScreenViewModel.OnTransferAmountModifierSelected -= TerminalScreenViewModelOnOnTransferAmountModifierSelected;
		}
		if (_terminalScreen != null && _terminalScreen.PART_DragOverlay.Content == Item)
		{
			_terminalScreen.PART_DragOverlay.Content = null;
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItemEventArgs
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using Avalonia.Interactivity;
using Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// </summary>
public class InventoryItemEventArgs : RoutedEventArgs
{
	public InventoryItemModel Item { get; }

	public EventType Type { get; }

	public InventoryItemEventArgs(InventoryItemModel item, EventType type)
	{
		Item = item;
		Type = type;
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections;
using System.ComponentModel;
using System.Windows.Input;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Data;
using Avalonia.Layout;
using Avalonia.Markup.Xaml;
using Avalonia.Markup.Xaml.MarkupExtensions;
using Avalonia.Markup.Xaml.Templates;
using Avalonia.Markup.Xaml.XamlIl.Runtime;
using Avalonia.Media.Immutable;
using CompiledAvaloniaXaml;
using Keen.Game2.Client.UI.Library.Controls.ContentControls;
using Keen.VRage.UI.AvaloniaInterface.Services;
using Keen.VRage.UI.Localization;
using Keen.VRage.UI.Shared.Controls.BeveledBorder;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// Control for <see cref="T:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel" />.
/// </summary>
[NeedsWindowStyles]
public class InventoryList : UserControl
{
	private class DynamicSetters_1228
	{
		public static void DynamicSetter_1(StyledElement P_0, Binding P_1)
		{
			if (P_1 != null)
			{
				IBinding binding = P_1;
				P_0.Bind(StyledElement.DataContextProperty, binding);
			}
			else
			{
				P_0.DataContext = P_1;
			}
		}

		public static void DynamicSetter_2(Layoutable P_0, object P_1)
		{
			if (P_1 is UnsetValueType)
			{
				P_0.SetValue(Layoutable.HeightProperty, AvaloniaProperty.UnsetValue);
				return;
			}
			if (P_1 is IBinding)
			{
				IBinding binding = (IBinding)P_1;
				P_0.Bind(Layoutable.HeightProperty, binding);
				return;
			}
			if (P_1 is double)
			{
				P_0.Height = (double)P_1;
				return;
			}
			if (P_1 == null)
			{
				throw new NullReferenceException();
			}
			throw new InvalidCastException();
		}

		public static void DynamicSetter_3(SelectingItemsControl P_0, Binding P_1)
		{
			if (P_1 != null)
			{
				IBinding binding = P_1;
				P_0.Bind(SelectingItemsControl.SelectedItemProperty, binding);
			}
			else
			{
				P_0.SelectedItem = P_1;
			}
		}

		public static void DynamicSetter_4(TextBox P_0, object P_1)
		{
			if (P_1 is UnsetValueType)
			{
				P_0.SetValue(TextBox.WatermarkProperty, AvaloniaProperty.UnsetValue);
				return;
			}
			if (P_1 is IBinding)
			{
				IBinding binding = (IBinding)P_1;
				P_0.Bind(TextBox.WatermarkProperty, binding);
				return;
			}
			if (P_1 is string)
			{
				P_0.Watermark = (string?)P_1;
				return;
			}
			if (P_1 == null)
			{
				P_0.Watermark = (string?)P_1;
				return;
			}
			throw new InvalidCastException();
		}

		public static void DynamicSetter_5(ToolTip P_0, Binding P_1)
		{
			if (P_1 != null)
			{
				IBinding binding = P_1;
				P_0.Bind(ToolTip.TipProperty, binding);
			}
			else
			{
				ToolTip.SetTip(P_0, P_1);
			}
		}
	}

	private class XamlClosure_1229
	{
		private class DynamicSetters_1230
		{
			public static void DynamicSetter_1(StyledElement P_0, Binding P_1)
			{
				if (P_1 != null)
				{
					IBinding binding = P_1;
					P_0.Bind(StyledElement.DataContextProperty, binding);
				}
				else
				{
					P_0.DataContext = P_1;
				}
			}
		}

		public static object Build(IServiceProvider P_0)
		{
			CompiledAvaloniaXaml.XamlIlContext.Context<InventoryList> context = new CompiledAvaloniaXaml.XamlIlContext.Context<InventoryList>(P_0, new object[1] { !AvaloniaResources.NamespaceInfo:/UI/TerminalScreen/Inventory/InventoryList.axaml.Singleton }, "avares://Game2.Client/UI/TerminalScreen/Inventory/InventoryList.axaml");
			if (P_0 != null)
			{
				object service = P_0.GetService(typeof(IRootObjectProvider));
				if (service != null)
				{
					service = ((IRootObjectProvider)service).RootObject;
					context.RootObject = (InventoryList)service;
				}
			}
			context.IntermediateRoot = new InventoryContainer();
			object intermediateRoot = context.IntermediateRoot;
			((ISupportInitialize)intermediateRoot).BeginInit();
			InventoryContainer inventoryContainer = (InventoryContainer)intermediateRoot;
			context.PushParent(inventoryContainer);
			ReflectionBindingExtension reflectionBindingExtension = new ReflectionBindingExtension();
			context.ProvideTargetProperty = StyledElement.DataContextProperty;
			Binding binding = reflectionBindingExtension.ProvideValue(context);
			context.ProvideTargetProperty = null;
			DynamicSetters_1230.DynamicSetter_1(inventoryContainer, binding);
			context.PopParent();
			((ISupportInitialize)intermediateRoot).EndInit();
			return intermediateRoot;
		}
	}

	private static Action<object> !XamlIlPopulateOverride;

	public InventoryList()
	{
		InitializeComponent();
	}

	/// <summary>
	/// Wires up the controls and optionally loads XAML markup and attaches dev tools (if Avalonia.Diagnostics package is referenced).
	/// </summary>
	/// <param name="loadXaml">Should the XAML be loaded into the component.</param>
	public void InitializeComponent(bool loadXaml = true)
	{
		if (loadXaml)
		{
			!XamlIlPopulateTrampoline(this);
		}
	}

	static void !XamlIlPopulate(IServiceProvider P_0, InventoryList P_1)
	{
		CompiledAvaloniaXaml.XamlIlContext.Context<InventoryList> context = new CompiledAvaloniaXaml.XamlIlContext.Context<InventoryList>(P_0, new object[1] { !AvaloniaResources.NamespaceInfo:/UI/TerminalScreen/Inventory/InventoryList.axaml.Singleton }, "avares://Game2.Client/UI/TerminalScreen/Inventory/InventoryList.axaml");
		context.RootObject = P_1;
		context.IntermediateRoot = P_1;
		((ISupportInitialize)P_1).BeginInit();
		context.PushParent(P_1);
		Grid grid2;
		Grid grid = (grid2 = new Grid());
		((ISupportInitialize)grid).BeginInit();
		P_1.Content = grid;
		Grid grid4;
		Grid grid3 = (grid4 = grid2);
		context.PushParent(grid4);
		Grid grid5 = grid4;
		RowDefinitions rowDefinitions = new RowDefinitions();
		rowDefinitions.Capacity = 2;
		rowDefinitions.Add(new RowDefinition(new GridLength(50.0, GridUnitType.Pixel)));
		rowDefinitions.Add(new RowDefinition(new GridLength(1.0, GridUnitType.Star)));
		grid5.RowDefinitions = rowDefinitions;
		ColumnDefinitions columnDefinitions = new ColumnDefinitions();
		columnDefinitions.Capacity = 2;
		columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
		columnDefinitions.Add(new ColumnDefinition(new GridLength(63.0, GridUnitType.Pixel)));
		grid5.ColumnDefinitions = columnDefinitions;
		ReflectionBindingExtension reflectionBindingExtension = new ReflectionBindingExtension();
		context.ProvideTargetProperty = StyledElement.DataContextProperty;
		Binding binding = reflectionBindingExtension.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1228.DynamicSetter_1(grid5, binding);
		Controls children = grid5.Children;
		Grid grid7;
		Grid grid6 = (grid7 = new Grid());
		((ISupportInitialize)grid6).BeginInit();
		children.Add(grid6);
		Grid grid8 = (grid4 = grid7);
		context.PushParent(grid4);
		Grid grid9 = grid4;
		Grid.SetRow(grid9, 0);
		Grid.SetColumn(grid9, 0);
		Grid.SetColumnSpan(grid9, 2);
		grid9.HorizontalAlignment = HorizontalAlignment.Stretch;
		grid9.VerticalAlignment = VerticalAlignment.Center;
		ColumnDefinitions columnDefinitions2 = new ColumnDefinitions();
		columnDefinitions2.Capacity = 7;
		columnDefinitions2.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
		columnDefinitions2.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
		columnDefinitions2.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
		columnDefinitions2.Add(new ColumnDefinition(new GridLength(8.0, GridUnitType.Pixel)));
		columnDefinitions2.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
		columnDefinitions2.Add(new ColumnDefinition(new GridLength(8.0, GridUnitType.Pixel)));
		columnDefinitions2.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
		grid9.ColumnDefinitions = columnDefinitions2;
		Controls children2 = grid9.Children;
		Keen.Game2.Client.UI.Library.Controls.ContentControls.Carousel carousel2;
		Keen.Game2.Client.UI.Library.Controls.ContentControls.Carousel carousel = (carousel2 = new Keen.Game2.Client.UI.Library.Controls.ContentControls.Carousel());
		((ISupportInitialize)carousel).BeginInit();
		children2.Add(carousel);
		Keen.Game2.Client.UI.Library.Controls.ContentControls.Carousel carousel4;
		Keen.Game2.Client.UI.Library.Controls.ContentControls.Carousel carousel3 = (carousel4 = carousel2);
		context.PushParent(carousel4);
		Grid.SetColumn(carousel4, 0);
		StaticResourceExtension staticResourceExtension = new StaticResourceExtension("Dimensions-Large-Vertical");
		context.ProvideTargetProperty = Layoutable.HeightProperty;
		object? obj = staticResourceExtension.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1228.DynamicSetter_2(carousel4, obj);
		carousel4.Width = 480.0;
		carousel4.Classes.Add("SubTitle");
		carousel4.Margin = new Thickness(0.0, 0.0, 0.0, 0.0);
		StyledProperty<IEnumerable?> itemsSourceProperty = ItemsControl.ItemsSourceProperty;
		ReflectionBindingExtension reflectionBindingExtension2 = new ReflectionBindingExtension("PrimaryFilters");
		context.ProvideTargetProperty = ItemsControl.ItemsSourceProperty;
		Binding binding2 = reflectionBindingExtension2.ProvideValue(context);
		context.ProvideTargetProperty = null;
		carousel4.Bind(itemsSourceProperty, binding2);
		ReflectionBindingExtension obj2 = new ReflectionBindingExtension("SelectedPrimaryFilter")
		{
			Mode = BindingMode.TwoWay
		};
		context.ProvideTargetProperty = SelectingItemsControl.SelectedItemProperty;
		Binding binding3 = obj2.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1228.DynamicSetter_3(carousel4, binding3);
		context.PopParent();
		((ISupportInitialize)carousel3).EndInit();
		Controls children3 = grid9.Children;
		TextBox textBox2;
		TextBox textBox = (textBox2 = new TextBox());
		((ISupportInitialize)textBox).BeginInit();
		children3.Add(textBox);
		TextBox textBox4;
		TextBox textBox3 = (textBox4 = textBox2);
		context.PushParent(textBox4);
		Grid.SetColumn(textBox4, 2);
		textBox4.Classes.Add("SearchBox");
		textBox4.Width = 240.0;
		StyledProperty<string?> textProperty = TextBox.TextProperty;
		ReflectionBindingExtension reflectionBindingExtension3 = new ReflectionBindingExtension("SearchQuery");
		context.ProvideTargetProperty = TextBox.TextProperty;
		Binding binding4 = reflectionBindingExtension3.ProvideValue(context);
		context.ProvideTargetProperty = null;
		textBox4.Bind(textProperty, binding4);
		LocExtension obj3 = new LocExtension
		{
			TextKey = "Search"
		};
		context.ProvideTargetProperty = TextBox.WatermarkProperty;
		object obj4 = obj3.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1228.DynamicSetter_4(textBox4, obj4);
		context.PopParent();
		((ISupportInitialize)textBox3).EndInit();
		Controls children4 = grid9.Children;
		Button button2;
		Button button = (button2 = new Button());
		((ISupportInitialize)button).BeginInit();
		children4.Add(button);
		Button button4;
		Button button3 = (button4 = button2);
		context.PushParent(button4);
		Button button5 = button4;
		Grid.SetColumn(button5, 4);
		button5.Classes.Add("SmallButton");
		button5.Classes.Add("ShowHideEmptyButton");
		ReflectionBindingExtension reflectionBindingExtension4 = new ReflectionBindingExtension("ShowEmpty");
		context.ProvideTargetProperty = "class:ShowEmpty";
		Binding binding5 = reflectionBindingExtension4.ProvideValue(context);
		context.ProvideTargetProperty = null;
		IBinding source = binding5;
		button5.BindClass("ShowEmpty", source, null);
		ReflectionBindingExtension reflectionBindingExtension5 = new ReflectionBindingExtension("!ShowEmpty");
		context.ProvideTargetProperty = "class:HideEmpty";
		Binding binding6 = reflectionBindingExtension5.ProvideValue(context);
		context.ProvideTargetProperty = null;
		source = binding6;
		button5.BindClass("HideEmpty", source, null);
		StyledProperty<ICommand?> commandProperty = Button.CommandProperty;
		ReflectionBindingExtension reflectionBindingExtension6 = new ReflectionBindingExtension("ToggleShowEmpty");
		context.ProvideTargetProperty = Button.CommandProperty;
		Binding binding7 = reflectionBindingExtension6.ProvideValue(context);
		context.ProvideTargetProperty = null;
		button5.Bind(commandProperty, binding7);
		ReflectionBindingExtension reflectionBindingExtension7 = new ReflectionBindingExtension("ShowEmptyInventoriesTooltip");
		context.ProvideTargetProperty = ToolTip.TipProperty;
		Binding binding8 = reflectionBindingExtension7.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1228.DynamicSetter_5((ToolTip)(object)button5, binding8);
		context.PopParent();
		((ISupportInitialize)button3).EndInit();
		Controls children5 = grid9.Children;
		Button button7;
		Button button6 = (button7 = new Button());
		((ISupportInitialize)button6).BeginInit();
		children5.Add(button6);
		Button button8 = (button4 = button7);
		context.PushParent(button4);
		Button button9 = button4;
		Grid.SetColumn(button9, 6);
		button9.Classes.Add("SmallButton");
		button9.Classes.Add("ShowAllInventoriesButton");
		ReflectionBindingExtension reflectionBindingExtension8 = new ReflectionBindingExtension("ShowConnectedInventoriesOnly");
		context.ProvideTargetProperty = "class:ShowConnected";
		Binding binding9 = reflectionBindingExtension8.ProvideValue(context);
		context.ProvideTargetProperty = null;
		source = binding9;
		button9.BindClass("ShowConnected", source, null);
		ReflectionBindingExtension reflectionBindingExtension9 = new ReflectionBindingExtension("!ShowConnectedInventoriesOnly");
		context.ProvideTargetProperty = "class:ShowAll";
		Binding binding10 = reflectionBindingExtension9.ProvideValue(context);
		context.ProvideTargetProperty = null;
		source = binding10;
		button9.BindClass("ShowAll", source, null);
		StyledProperty<ICommand?> commandProperty2 = Button.CommandProperty;
		ReflectionBindingExtension reflectionBindingExtension10 = new ReflectionBindingExtension("ToggleShowConnectedInventoriesOnly");
		context.ProvideTargetProperty = Button.CommandProperty;
		Binding binding11 = reflectionBindingExtension10.ProvideValue(context);
		context.ProvideTargetProperty = null;
		button9.Bind(commandProperty2, binding11);
		ReflectionBindingExtension reflectionBindingExtension11 = new ReflectionBindingExtension("ShowConnectedInventoriesToggleTooltip");
		context.ProvideTargetProperty = ToolTip.TipProperty;
		Binding binding12 = reflectionBindingExtension11.ProvideValue(context);
		context.ProvideTargetProperty = null;
		DynamicSetters_1228.DynamicSetter_5((ToolTip)(object)button9, binding12);
		context.PopParent();
		((ISupportInitialize)button8).EndInit();
		context.PopParent();
		((ISupportInitialize)grid8).EndInit();
		Controls children6 = grid5.Children;
		BeveledBorder beveledBorder2;
		BeveledBorder beveledBorder = (beveledBorder2 = new BeveledBorder());
		((ISupportInitialize)beveledBorder).BeginInit();
		children6.Add(beveledBorder);
		Grid.SetColumn(beveledBorder2, 0);
		Grid.SetColumnSpan(beveledBorder2, 2);
		Grid.SetRow(beveledBorder2, 1);
		beveledBorder2.Margin = new Thickness(0.0, 17.0, 0.0, 0.0);
		beveledBorder2.Classes.Add("PrimaryPanel");
		((ISupportInitialize)beveledBorder2).EndInit();
		Controls children7 = grid5.Children;
		BeveledBorder beveledBorder4;
		BeveledBorder beveledBorder3 = (beveledBorder4 = new BeveledBorder());
		((ISupportInitialize)beveledBorder3).BeginInit();
		children7.Add(beveledBorder3);
		BeveledBorder beveledBorder6;
		BeveledBorder beveledBorder5 = (beveledBorder6 = beveledBorder4);
		context.PushParent(beveledBorder6);
		Grid.SetColumn(beveledBorder6, 0);
		Grid.SetColumnSpan(beveledBorder6, 2);
		Grid.SetRow(beveledBorder6, 1);
		beveledBorder6.Padding = new Thickness(5.0, 5.0, 5.0, 5.0);
		beveledBorder6.Margin = new Thickness(0.0, 17.0, 0.0, 0.0);
		beveledBorder6.Classes.Add("PrimaryBorder");
		ScrollViewer scrollViewer2;
		ScrollViewer scrollViewer = (scrollViewer2 = new ScrollViewer());
		((ISupportInitialize)scrollViewer).BeginInit();
		beveledBorder6.Child = scrollViewer;
		ScrollViewer scrollViewer4;
		ScrollViewer scrollViewer3 = (scrollViewer4 = scrollViewer2);
		context.PushParent(scrollViewer4);
		scrollViewer4.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
		scrollViewer4.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
		Border border2;
		Border border = (border2 = new Border());
		((ISupportInitialize)border).BeginInit();
		scrollViewer4.Content = border;
		Border border4;
		Border border3 = (border4 = border2);
		context.PushParent(border4);
		border4.Padding = new Thickness(17.0, 10.0, 17.0, 10.0);
		ItemsControl itemsControl2;
		ItemsControl itemsControl = (itemsControl2 = new ItemsControl());
		((ISupportInitialize)itemsControl).BeginInit();
		border4.Child = itemsControl;
		ItemsControl itemsControl4;
		ItemsControl itemsControl3 = (itemsControl4 = itemsControl2);
		context.PushParent(itemsControl4);
		StyledProperty<IEnumerable?> itemsSourceProperty2 = ItemsControl.ItemsSourceProperty;
		ReflectionBindingExtension reflectionBindingExtension12 = new ReflectionBindingExtension("InventoryContainers");
		context.ProvideTargetProperty = ItemsControl.ItemsSourceProperty;
		Binding binding13 = reflectionBindingExtension12.ProvideValue(context);
		context.ProvideTargetProperty = null;
		itemsControl4.Bind(itemsSourceProperty2, binding13);
		itemsControl4.Background = new ImmutableSolidColorBrush(16777215u);
		itemsControl4.Classes.Add("InventoryListBox");
		DataTemplate dataTemplate;
		DataTemplate itemTemplate = (dataTemplate = new DataTemplate());
		context.PushParent(dataTemplate);
		dataTemplate.Content = XamlIlRuntimeHelpers.DeferredTransformationFactoryV2<Control>(XamlClosure_1229.Build, context);
		context.PopParent();
		itemsControl4.ItemTemplate = itemTemplate;
		context.PopParent();
		((ISupportInitialize)itemsControl3).EndInit();
		context.PopParent();
		((ISupportInitialize)border3).EndInit();
		context.PopParent();
		((ISupportInitialize)scrollViewer3).EndInit();
		context.PopParent();
		((ISupportInitialize)beveledBorder5).EndInit();
		context.PopParent();
		((ISupportInitialize)grid3).EndInit();
		context.PopParent();
		((ISupportInitialize)P_1).EndInit();
		if (P_1 is StyledElement styled)
		{
			NameScope.SetNameScope(styled, context.AvaloniaNameScope);
		}
		context.AvaloniaNameScope.Complete();
	}

	private static void !XamlIlPopulateTrampoline(InventoryList P_0)
	{
		if (!XamlIlPopulateOverride != null)
		{
			!XamlIlPopulateOverride(P_0);
		}
		else
		{
			!XamlIlPopulate(XamlIlRuntimeHelpers.CreateRootServiceProviderV3(null), P_0);
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Reactive;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using Avalonia.ReactiveUI;
using DynamicData;
using DynamicData.Binding;
using Keen.Game2.Client.UI.Helpers;
using Keen.Game2.Simulation.Utils;
using Keen.Game2.Simulation.WorldObjects.Characters;
using Keen.VRage.Audio;
using Keen.VRage.DCS.Components;
using Keen.VRage.Library.Collections;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Memory;
using Keen.VRage.Library.Reflection.DependencyInjections;
using Keen.VRage.Library.UI;
using Keen.VRage.UI.Screens;
using Keen.VRage.UI.Shared.ViewModels;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// Represents each viewmodel for the list in the <see cref="T:Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory" /> screen
/// </summary>
public class InventoryListViewModel : AttachedViewModel
{
	[Configuration]
	private GridInventoryConfiguration _configuration;

	[Configuration]
	private InventoryEffectsSessionComponentConfiguration _audioConfiguration;

	[Service]
	private readonly IAudioManager _audio;

	private readonly Func<InventoryPrimaryFilterViewModel, IComparable> _primaryFilterSort;

	/// Primary filter to narrow down <see cref="F:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel._filteredInventoryContainers" /> to selected source (character, grid, etc)
	private Subject<Func<InventoryContainerViewModel, bool>> _primaryFilter = new Subject<Func<InventoryContainerViewModel, bool>>();

	/// Filter to narrow down <see cref="F:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel._filteredInventoryContainers" /> using input search query and show-empty-only flag
	private Subject<Func<InventoryContainerViewModel, bool>> _secondaryFilters = new Subject<Func<InventoryContainerViewModel, bool>>();

	private ReadOnlyObservableCollection<InventoryContainerViewModel> _filteredInventoryContainers;

	private SourceList<InventoryContainerViewModel> _inventoryContainers = new SourceList<InventoryContainerViewModel>();

	private IDisposable _inventoryContainersSubscription;

	[Notify]
	private InventoryPrimaryFilterViewModel? _selectedPrimaryFilter;

	private InventoryPrimaryFilterViewModel? _lastNonNullPrimaryFilter;

	[Notify]
	private string _title = string.Empty;

	[Notify]
	private bool _showEmpty = true;

	[Notify]
	private string? _showEmptyInventoriesTooltip;

	[Notify]
	private bool _showConnectedInventoriesOnly = true;

	[Notify]
	private string? _showConnectedInventoriesToggleTooltip;

	private string _searchQuery = "";

	/// <summary>
	/// Filter Dropdown #1 - sources selection (character, grids, etc)
	/// </summary>
	public ObservableList<InventoryPrimaryFilterViewModel> PrimaryFilters { get; } = new ObservableList<InventoryPrimaryFilterViewModel>();

	public ReadOnlyObservableCollection<InventoryContainerViewModel> InventoryContainers => _filteredInventoryContainers;

	public string SearchQuery
	{
		get
		{
			return _searchQuery;
		}
		set
		{
			_audio.PlaySearchAudio(value, _searchQuery, _audioConfiguration);
			_searchQuery = value;
			foreach (InventoryContainerViewModel item in _inventoryContainers.Items)
			{
				item.SetSearchQuery(value);
			}
			ApplySecondaryFilters();
		}
	}

	public InventoryPrimaryFilterViewModel? SelectedPrimaryFilter
	{
		get
		{
			return _selectedPrimaryFilter;
		}
		set
		{
			SetProperty(ref _selectedPrimaryFilter, value, "SelectedPrimaryFilter");
		}
	}

	public string Title
	{
		get
		{
			return _title;
		}
		set
		{
			SetProperty(ref _title, value, "Title");
		}
	}

	public bool ShowEmpty
	{
		get
		{
			return _showEmpty;
		}
		set
		{
			SetProperty(ref _showEmpty, value, "ShowEmpty");
		}
	}

	public string? ShowEmptyInventoriesTooltip
	{
		get
		{
			return _showEmptyInventoriesTooltip;
		}
		set
		{
			SetProperty(ref _showEmptyInventoriesTooltip, value, "ShowEmptyInventoriesTooltip");
		}
	}

	public bool ShowConnectedInventoriesOnly
	{
		get
		{
			return _showConnectedInventoriesOnly;
		}
		set
		{
			SetProperty(ref _showConnectedInventoriesOnly, value, "ShowConnectedInventoriesOnly");
		}
	}

	public string? ShowConnectedInventoriesToggleTooltip
	{
		get
		{
			return _showConnectedInventoriesToggleTooltip;
		}
		set
		{
			SetProperty(ref _showConnectedInventoriesToggleTooltip, value, "ShowConnectedInventoriesToggleTooltip");
		}
	}

	public InventoryListViewModel(Func<InventoryContainerViewModel, IComparable> invSortMethod, Func<InventoryPrimaryFilterViewModel, IComparable> primaryFilterSortMethod, IViewModelFactory factory)
		: base(factory)
	{
		_primaryFilterSort = primaryFilterSortMethod;
		_inventoryContainersSubscription = _inventoryContainers.Connect().Filter(_primaryFilter).Filter(_secondaryFilters)
			.Sort(SortExpressionComparer<InventoryContainerViewModel>.Ascending(invSortMethod), SortOptions.None, _primaryFilter.Select((Func<InventoryContainerViewModel, bool> _) => default(Unit)).Merge(_secondaryFilters.Select((Func<InventoryContainerViewModel, bool> _) => default(Unit))))
			.ObserveOn(AvaloniaScheduler.Instance)
			.Bind(out _filteredInventoryContainers)
			.Subscribe();
		ApplySecondaryFilters();
		base.PropertyChanged += OnPropertyChanged;
		UpdateShowConnectedInventoriesTooltip();
		UpdateShowEmptyInventoriesTooltip();
	}

	private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e)
	{
		if (e.PropertyName == "SelectedPrimaryFilter")
		{
			if (SelectedPrimaryFilter == null)
			{
				if (_lastNonNullPrimaryFilter != null && PrimaryFilters.Contains(_lastNonNullPrimaryFilter))
				{
					SelectedPrimaryFilter = _lastNonNullPrimaryFilter;
					return;
				}
			}
			else
			{
				_lastNonNullPrimaryFilter = SelectedPrimaryFilter;
			}
			OnSelectedPrimaryFilterChanged();
		}
		else if (e.PropertyName == "ShowEmpty" || e.PropertyName == "ShowConnectedInventoriesOnly")
		{
			ApplySecondaryFilters();
		}
	}

	public void ToggleShowEmpty()
	{
		ShowEmptyInventoriesTooltip = null;
		ShowEmpty = !ShowEmpty;
		UpdateShowEmptyInventoriesTooltip();
	}

	public void ToggleShowConnectedInventoriesOnly()
	{
		ShowConnectedInventoriesToggleTooltip = null;
		ShowConnectedInventoriesOnly = !ShowConnectedInventoriesOnly;
		UpdateShowConnectedInventoriesTooltip();
	}

	private void ApplySecondaryFilters()
	{
		_secondaryFilters.OnNext(delegate(InventoryContainerViewModel inventory)
		{
			if (!_showEmpty && inventory.IsContainerEmpty())
			{
				return false;
			}
			inventory.SetEmptyFilter(_showEmpty);
			return (!_showConnectedInventoriesOnly || inventory.AnyConnected) ? true : false;
		});
	}

	private bool PassPrimaryFilter(InventoryContainerViewModel inventory)
	{
		InventoryPrimaryFilterViewModel selectedPrimaryFilter = SelectedPrimaryFilter;
		if (selectedPrimaryFilter == null)
		{
			return true;
		}
		if (selectedPrimaryFilter.Type == InventoryPrimaryFilterType.None)
		{
			return false;
		}
		InventoryPrimaryFilterType type = selectedPrimaryFilter.Type;
		if ((uint)(type - 1) <= 1u)
		{
			return selectedPrimaryFilter.Entity == inventory.RootEntity;
		}
		return true;
	}

	private void OnSelectedPrimaryFilterChanged()
	{
		_primaryFilter.OnNext(PassPrimaryFilter);
	}

	protected override void OnDispose()
	{
		base.OnDispose();
		Clear();
		_inventoryContainersSubscription.Dispose();
	}

	public void Clear()
	{
		foreach (InventoryContainerViewModel item in _inventoryContainers.Items)
		{
			item.InventoryChanged -= OnInventoryChanged;
			item.DetachAndDispose();
		}
		_inventoryContainers.Clear();
		PrimaryFilters.Clear();
		_lastNonNullPrimaryFilter = null;
	}

	public void SetInventories(IEnumerable<InventoryContainerViewModel> inventories)
	{
		using (Profiler.Begin("Terminal.Inventory.SetInventories", Profiler.Color.Null, 232, "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Client\\UI\\TerminalScreen\\Inventory\\InventoryListViewModel.cs"))
		{
			Clear();
			foreach (InventoryContainerViewModel inventory in inventories)
			{
				inventory.InventoryChanged += OnInventoryChanged;
				_inventoryContainers.Add(inventory);
			}
			RebuildPrimaryFiltersList();
			ApplySecondaryFilters();
		}
	}

	public void SelectFilters(InventoryPrimaryFilterType primaryFilterType, Entity? primaryEntity = null)
	{
		SelectedPrimaryFilter = PrimaryFilters.FirstOrDefault(IsDesiredPrimaryFilter) ?? SelectedPrimaryFilter;
		bool IsDesiredPrimaryFilter(InventoryPrimaryFilterViewModel filter)
		{
			if (filter.Type != primaryFilterType)
			{
				return false;
			}
			if (primaryEntity != null)
			{
				Entity entity = primaryEntity;
				return filter.Entity == entity;
			}
			return true;
		}
	}

	private void RebuildPrimaryFiltersList()
	{
		using (Profiler.Begin("Terminal.Inventory.RebuildPrimaryFilters", Profiler.Color.Null, 264, "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Client\\UI\\TerminalScreen\\Inventory\\InventoryListViewModel.cs"))
		{
			PrimaryFilters.Clear();
			List<InventoryPrimaryFilterViewModel> primaryFilters = new List<InventoryPrimaryFilterViewModel>();
			if (_inventoryContainers.Count > 0)
			{
				using Set<Entity, SetInline8<Entity>> set = default(Set<Entity, SetInline8<Entity>>);
				foreach (InventoryContainerViewModel item in _inventoryContainers.Items)
				{
					set.Add(item.RootEntity);
				}
				SetEnumerator<Entity> enumerator2 = set.GetEnumerator();
				while (enumerator2.MoveNext())
				{
					Entity current2 = enumerator2.Current;
					if (current2.TryGet<CharacterComponent>() != null)
					{
						AddPrimary(InventoryPrimaryFilterType.Character, LocalizableText.FromLocKey(_configuration.CharacterSourceKey), current2);
					}
					else
					{
						AddPrimary(InventoryPrimaryFilterType.Entity, current2.GetDisplayNameOrEmpty(), current2);
					}
				}
			}
			else
			{
				AddPrimary(InventoryPrimaryFilterType.None, LocalizableText.FromLocKey(_configuration.NoneFilterKey));
			}
			primaryFilters.Sort(SortExpressionComparer<InventoryPrimaryFilterViewModel>.Ascending(_primaryFilterSort));
			PrimaryFilters.AddRange(primaryFilters);
			SelectedPrimaryFilter = PrimaryFilters.FirstOrDefault();
			void AddPrimary(InventoryPrimaryFilterType type, LocalizableText displayName, Entity? entity = null)
			{
				primaryFilters.Add(new InventoryPrimaryFilterViewModel(type, displayName, entity));
			}
		}
	}

	private void OnInventoryChanged(InventoryViewModel obj)
	{
		ApplySecondaryFilters();
	}

	private void UpdateShowEmptyInventoriesTooltip()
	{
		ShowEmptyInventoriesTooltip = (ShowEmpty ? _configuration.ToggleHideEmptyKey.EvaluateText() : _configuration.ToggleShowEmptyKey.EvaluateText());
	}

	private void UpdateShowConnectedInventoriesTooltip()
	{
		ShowConnectedInventoriesToggleTooltip = (_showConnectedInventoriesOnly ? _configuration.ShowConnectedInventoriesOnlyKey.EvaluateText() : _configuration.ShowAllInventoriesKey.EvaluateText());
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryPrimaryFilterType
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// Primary grid inventory filter type (source selection)
/// </summary>
public enum InventoryPrimaryFilterType
{
	/// <summary>
	/// Don't show any inventories
	/// </summary>
	None,
	/// <summary>
	/// Inventories associated to the player's character entity
	/// </summary>
	Character,
	/// <summary>
	/// Inventories associated to a specific entity (connected grid, backpack, etc.)
	/// </summary>
	Entity
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryPrimaryFilterViewModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
using Keen.VRage.DCS.Components;
using Keen.VRage.Library.Localization;
using Keen.VRage.UI.Shared.ViewModels;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// Represents an item in the GridInventory primary filter dropdown list (sources selection)
/// Used to scope the list of inventories to character or specific grids
/// </summary>
public class InventoryPrimaryFilterViewModel(InventoryPrimaryFilterType type, LocalizableText displayName, Entity? entity) : ViewModelBase
{
	public InventoryPrimaryFilterType Type { get; } = type;

	public LocalizableText DisplayName { get; } = displayName;

	public Entity? Entity { get; } = entity;

	public override string ToString()
	{
		return DisplayName.EvaluateText();
	}
}

====================================================================================================
TYPE: Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Client.dll
====================================================================================================
--- DECOMPILED C# ---
#define FEATURE_ASSERTIONS
using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Reactive.Subjects;
using DynamicData;
using Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;
using Keen.VRage.Core.Game.Systems;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.Library.UI;
using Keen.VRage.UI.Screens;

namespace Keen.Game2.Client.UI.TerminalScreen.Inventory;

/// <summary>
/// View model for a single inventory of a container.
/// </summary>
public class InventoryViewModel : AttachedViewModel
{
	private const int ROWS = 6;

	private const int COLUMNS = 10;

	private const int DEFAULT_MAX_STACKS = 60;

	private int _currentColumnCount = 10;

	private InventoryModel? _model;

	private ReadOnlyObservableCollection<InventoryItemModel> _items;

	private SourceList<InventoryItemModel> _itemsCache = new SourceList<InventoryItemModel>();

	[Notify]
	private bool _error;

	private InventoryContainerViewModel? _parentContainer;

	private IDisposable _itemsCacheSubscription;

	public InventoryModel Model
	{
		get
		{
			Assert.NotNull(_model, null, "_model", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Client\\UI\\TerminalScreen\\Inventory\\InventoryViewModel.cs", 31);
			return _model;
		}
	}

	public ReadOnlyObservableCollection<InventoryItemModel> InventoryItems => _items;

	public int ItemsCount => _itemsCache.Count;

	public int MaxStacks
	{
		get
		{
			if (InventoryItems.Count < 60)
			{
				return 60;
			}
			_currentColumnCount += 10;
			return 6 * _currentColumnCount;
		}
	}

	public float Mass => (float)Model.Mass;

	public float MaxMass => (float)Model.MaxMass;

	public bool Error
	{
		get
		{
			return _error;
		}
		set
		{
			SetProperty(ref _error, value, "Error");
		}
	}

	public InventoryViewModel(Session session, InventoryModel model, BehaviorSubject<Func<InventoryItemModel, bool>> itemFilter, InventoryContainerViewModel? parentContainer)
	{
		_model = model;
		_parentContainer = parentContainer;
		_itemsCacheSubscription = _itemsCache.Connect().Filter(itemFilter).Bind(out _items)
			.Subscribe();
		((INotifyCollectionChanged)InventoryItems).CollectionChanged += FilteredItemsChanged;
		_model.Items.CollectionChanged += ItemsChanged;
		_model.PropertyChanged += Model_PropertyChanged;
		InventoryModel? model2 = _model;
		model2.OnItemTransferError = (Action)Delegate.Combine(model2.OnItemTransferError, new Action(OnTransferError));
		ItemsChanged(null, null);
	}

	private void Model_PropertyChanged(object? sender, PropertyChangedEventArgs e)
	{
		OnPropertyChanged("Mass");
		OnPropertyChanged("MaxMass");
	}

	private void OnTransferError()
	{
		Error = true;
	}

	protected override void OnDispose()
	{
		base.OnDispose();
		Assert.NotNull(_model, null, "_model", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Client\\UI\\TerminalScreen\\Inventory\\InventoryViewModel.cs", 104);
		((INotifyCollectionChanged)InventoryItems).CollectionChanged -= FilteredItemsChanged;
		_model.Items.CollectionChanged -= ItemsChanged;
		_model.PropertyChanged -= Model_PropertyChanged;
		InventoryModel? model = _model;
		model.OnItemTransferError = (Action)Delegate.Remove(model.OnItemTransferError, new Action(OnTransferError));
		_itemsCacheSubscription.Dispose();
		_model = null;
	}

	private void ItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
	{
		if (e == null || e.Action == NotifyCollectionChangedAction.Reset)
		{
			_itemsCache.Edit(delegate(IExtendedList<InventoryItemModel> list)
			{
				list.Clear();
				list.AddRange(Model.Items);
			});
		}
		else if (e.Action == NotifyCollectionChangedAction.Add)
		{
			_itemsCache.AddRange(e.NewItems.Cast<InventoryItemModel>());
		}
		else if (e.Action == NotifyCollectionChangedAction.Remove)
		{
			_itemsCache.RemoveMany(e.OldItems.Cast<InventoryItemModel>());
		}
		OnPropertyChanged("MaxStacks");
		OnPropertyChanged("ItemsCount");
	}

	private void FilteredItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
	{
		_parentContainer?.ItemsChanged(this);
	}

	public void HighlightStackableItems(InventoryItemModel item)
	{
		if (_model == null || base.HasLifetimeExpired)
		{
			return;
		}
		foreach (InventoryItemModel item2 in Model.Items)
		{
			if (item2?.Definition == item.Definition)
			{
				item2.Stackable = true;
			}
		}
	}

	public void ResetStackableItems()
	{
		if (_model == null || base.HasLifetimeExpired)
		{
			return;
		}
		foreach (InventoryItemModel item in Model.Items)
		{
			item.Stackable = false;
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.IInventoryFullnessProvider
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using Keen.VRage.DCS.Components;
using Keen.VRage.Library.Threading;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Provides access to a model observing the combined fullness of inventories in a grid.
/// </summary>
public interface IInventoryFullnessProvider
{
	/// <summary>
	/// Attach a replicated model for the entity
	/// </summary>
	Task<InventoryFullnessModel> Attach(Entity grid);

	/// <summary>
	/// Detach the replicated model
	/// </summary>
	void Detach(InventoryFullnessModel model);
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ITerminalInventory
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.DCS.Components;
using Keen.VRage.Library.Mathematics;
using Keen.VRage.Library.Threading;
using Keen.VRage.Multiplayer.SecureIds;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Interface for client-side access of inventory systems.
/// </summary>
public interface ITerminalInventory
{
	/// <summary>
	/// Attempts to transfer an item to another inventory.
	/// </summary>
	Task<(ItemTransferResult Reason, FixedPoint Amount, FixedPoint Total)> TransferAsync(InventoryItemModel item, InventoryModel target, InteractionInfo interactionInfo, FixedPoint? amount, int? targetSlot = null);

	/// <summary>
	/// Attempts to drop the selected item.
	/// </summary>
	Task<bool> DropItemAsync(InventoryItemModel item, InteractionInfo interactionInfo);

	/// <summary>
	/// Creates <see cref="T:Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModelStreamed" />, fills its entities list with entities that contain an inventory, and starts replicating it. Optionally prefills the data with inventory data of the main entity.
	/// </summary>
	Task<InventoryListModelStreamed> Attach(Entity rootEntity, bool populateMainEntity = false, InteractionInfo? interactionInfo = null);

	/// <summary>
	/// Stops replication of the given <see cref="T:Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModelStreamed" />.
	/// </summary>
	void Detach(InventoryListModelStreamed inventoryRootModel);

	/// <summary>
	/// Creates <see cref="T:Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel" /> for the given <see cref="T:Keen.VRage.Multiplayer.SecureIds.EntityId" />, fills it with data, and starts replicating it.
	/// </summary>
	Task<InventoryContainerModel> Attach(EntityId entity, InteractionInfo? interactionInfo = null);

	/// <summary>
	/// Stops replication of the given <see cref="T:Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel" />.
	/// </summary>
	void Detach(InventoryContainerModel container, InventoryListModelStreamed list);
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using Keen.VRage.DCS.Accessors;
using Keen.VRage.Library.Collections;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Extensions;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Mathematics;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.UI;
using Keen.VRage.Multiplayer.Annotations;
using Keen.VRage.Multiplayer.SecureIds;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Visualizes a container of inventories like a cargo block, character bag, etc.
/// </summary>
[Replicate]
[GenerateAccessors]
public class InventoryContainerModel : ObservableObject, IAccessible
{
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 10;

		static TypeInfoHolder()
		{
			int num = 0;
			RawAccessors = new(string, IMemberAccessor)[9]
			{
				("EntityId", EntityIdAccessor()),
				("_displayName", _displayNameAccessor()),
				("DebugName", DebugNameAccessor()),
				("Mass", MassAccessor()),
				("MaxMass", MaxMassAccessor()),
				("Inventories", InventoriesAccessor()),
				("ShownInventories", ShownInventoriesAccessor()),
				("LeakedId", LeakedIdAccessor()),
				("DisplayName", DisplayNameAccessor())
			};
			string documentation = "Visualizes a container of inventories like a cargo block, character bag, etc.";
			MemberInfo[] array = new MemberInfo[10]
			{
				typeof(InventoryContainerModel).GetProperty("EntityId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryContainerModel).GetField("_displayName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryContainerModel).GetField("DebugName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryContainerModel).GetProperty("Mass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryContainerModel).GetProperty("MaxMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryContainerModel).GetProperty("Inventories", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryContainerModel).GetProperty("ShownInventories", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryContainerModel).GetProperty("LeakedId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryContainerModel).GetMethod("OnPropertiesChanged", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[2]
				{
					typeof(object),
					typeof(PropertyChangedEventArgs)
				}, null),
				typeof(InventoryContainerModel).GetProperty("DisplayName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					null
				},
				{
					array[1],
					null
				},
				{
					array[2],
					null
				},
				{
					array[3],
					null
				},
				{
					array[4],
					null
				},
				{
					array[5],
					null
				},
				{
					array[6],
					null
				},
				{
					array[7],
					"TODO SE2-11345 Remove"
				},
				{
					array[8],
					null
				},
				{
					array[9],
					null
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					new List<Attribute>
					{
						new NotifyAttribute()
					}
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					ListReader<Attribute>.Empty
				},
				{
					array[4],
					ListReader<Attribute>.Empty
				},
				{
					array[5],
					ListReader<Attribute>.Empty
				},
				{
					array[6],
					ListReader<Attribute>.Empty
				},
				{
					array[7],
					ListReader<Attribute>.Empty
				},
				{
					array[8],
					ListReader<Attribute>.Empty
				},
				{
					array[9],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				},
				{
					array[4],
					num + 4
				},
				{
					array[5],
					num + 5
				},
				{
					array[6],
					num + 6
				},
				{
					array[7],
					num + 7
				},
				{
					array[8],
					num + 8
				},
				{
					array[9],
					num + 9
				}
			});
			Value = new AccessibleTypeInfo(typeof(InventoryContainerModel), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor EntityIdAccessor()
		{
			return new ClassMemberAccessor<InventoryContainerModel, EntityId>("EntityId", "EntityId", SerializerFormatSet.None, typeof(InventoryContainerModel).GetProperty("EntityId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(EntityId), null, (InventoryContainerModel instance) => instance.EntityId, delegate(InventoryContainerModel instance, in EntityId value)
			{
				instance.EntityId = value;
			}, null);
		}

		private static IMemberAccessor _displayNameAccessor()
		{
			return new ClassMemberAccessor<InventoryContainerModel, LocalizableText>("_displayName", "_displayName", SerializerFormatSet.None, typeof(InventoryContainerModel).GetField("_displayName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocalizableText), () => LocalizableText.TypeInfoHolder.Value, (InventoryContainerModel instance) => instance._displayName, delegate(InventoryContainerModel instance, in LocalizableText value)
			{
				instance._displayName = value;
			}, (InventoryContainerModel instance) => ref Unsafe.AsRef(in instance._displayName));
		}

		private static IMemberAccessor DebugNameAccessor()
		{
			return new ClassMemberAccessor<InventoryContainerModel, string>("DebugName", "DebugName", SerializerFormatSet.None, typeof(InventoryContainerModel).GetField("DebugName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(string), null, (InventoryContainerModel instance) => instance.DebugName, delegate(InventoryContainerModel instance, in string value)
			{
				instance.DebugName = value;
			}, (InventoryContainerModel instance) => ref Unsafe.AsRef(in instance.DebugName));
		}

		private static IMemberAccessor MassAccessor()
		{
			return new ClassMemberAccessor<InventoryContainerModel, FixedPoint>("Mass", "Mass", SerializerFormatSet.None, typeof(InventoryContainerModel).GetProperty("Mass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryContainerModel instance) => instance.Mass, null, null);
		}

		private static IMemberAccessor MaxMassAccessor()
		{
			return new ClassMemberAccessor<InventoryContainerModel, FixedPoint>("MaxMass", "MaxMass", SerializerFormatSet.None, typeof(InventoryContainerModel).GetProperty("MaxMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryContainerModel instance) => instance.MaxMass, null, null);
		}

		private static IMemberAccessor InventoriesAccessor()
		{
			return new ClassMemberAccessor<InventoryContainerModel, ObservableList<InventoryModel>>("Inventories", "Inventories", SerializerFormatSet.None, typeof(InventoryContainerModel).GetProperty("Inventories", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ObservableList<InventoryModel>), null, (InventoryContainerModel instance) => instance.Inventories, null, null);
		}

		private static IMemberAccessor ShownInventoriesAccessor()
		{
			return new ClassMemberAccessor<InventoryContainerModel, IEnumerable<InventoryModel>>("ShownInventories", "ShownInventories", SerializerFormatSet.None, typeof(InventoryContainerModel).GetProperty("ShownInventories", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(IEnumerable<InventoryModel>), null, (InventoryContainerModel instance) => instance.ShownInventories, null, null);
		}

		private static IMemberAccessor LeakedIdAccessor()
		{
			return new ClassMemberAccessor<InventoryContainerModel, DEntity>("LeakedId", "LeakedId", SerializerFormatSet.None, typeof(InventoryContainerModel).GetProperty("LeakedId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(DEntity), null, (InventoryContainerModel instance) => instance.LeakedId, delegate(InventoryContainerModel instance, in DEntity value)
			{
				instance.LeakedId = value;
			}, null);
		}

		private static IMemberAccessor DisplayNameAccessor()
		{
			return new ClassMemberAccessor<InventoryContainerModel, LocalizableText>("DisplayName", "DisplayName", SerializerFormatSet.None, typeof(InventoryContainerModel).GetProperty("DisplayName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocalizableText), () => LocalizableText.TypeInfoHolder.Value, (InventoryContainerModel instance) => instance.DisplayName, delegate(InventoryContainerModel instance, in LocalizableText value)
			{
				instance.DisplayName = value;
			}, null);
		}
	}

	[Notify]
	private LocalizableText _displayName = string.Empty;

	public string DebugName = string.Empty;

	public EntityId EntityId { get; private set; }

	public FixedPoint Mass => ShownInventories.Sum((InventoryModel x) => x.Mass);

	public FixedPoint MaxMass => ShownInventories.Sum((InventoryModel x) => x.MaxMass);

	public ObservableList<InventoryModel> Inventories { get; } = new ObservableList<InventoryModel>();

	public IEnumerable<InventoryModel> ShownInventories => Inventories.Where((InventoryModel x) => x.ShowInStats);

	/// <summary>
	/// TODO SE2-11345 Remove
	/// </summary>
	public DEntity LeakedId { get; set; }

	public LocalizableText DisplayName
	{
		get
		{
			return _displayName;
		}
		set
		{
			SetProperty(ref _displayName, value, "DisplayName");
		}
	}

	public InventoryContainerModel()
	{
	}

	public InventoryContainerModel(EntityId entityId)
	{
		EntityId = entityId;
		Inventories.CollectionChanged += delegate(object? _, NotifyCollectionChangedEventArgs e)
		{
			if (e.OldItems != null)
			{
				foreach (InventoryModel oldItem in e.OldItems)
				{
					oldItem.PropertyChanged -= OnPropertiesChanged;
				}
			}
			if (e.NewItems != null)
			{
				foreach (InventoryModel newItem in e.NewItems)
				{
					newItem.PropertyChanged += OnPropertiesChanged;
				}
			}
			if (e.Action == NotifyCollectionChangedAction.Reset)
			{
				foreach (InventoryModel inventory in Inventories)
				{
					inventory.PropertyChanged += OnPropertiesChanged;
				}
			}
			OnPropertyChanged("MaxMass");
			OnPropertyChanged("Mass");
		};
		foreach (InventoryModel inventory2 in Inventories)
		{
			inventory2.PropertyChanged += OnPropertiesChanged;
		}
	}

	private void OnPropertiesChanged(object? s, PropertyChangedEventArgs e)
	{
		string propertyName = e.PropertyName;
		if (propertyName == "Mass")
		{
			OnPropertyChanged("Mass");
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryFullnessModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Reflection;
using System.Runtime.CompilerServices;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.UI;
using Keen.VRage.Multiplayer.Annotations;
using Keen.VRage.Multiplayer.SecureIds;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Model providing the filled percentage of an inventory or collection of inventories.
/// </summary>
[Replicate]
[GenerateAccessors]
public class InventoryFullnessModel : ObservableObject, IModel, IAccessible
{
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 4;

		static TypeInfoHolder()
		{
			int num = 0;
			RawAccessors = new(string, IMemberAccessor)[4]
			{
				("_transferEvent", _transferEventAccessor()),
				("_percentage", _percentageAccessor()),
				("TransferEvent", TransferEventAccessor()),
				("Percentage", PercentageAccessor())
			};
			string documentation = "Model providing the filled percentage of an inventory or collection of inventories.";
			MemberInfo[] array = new MemberInfo[4]
			{
				typeof(InventoryFullnessModel).GetField("_transferEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryFullnessModel).GetField("_percentage", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryFullnessModel).GetProperty("TransferEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryFullnessModel).GetProperty("Percentage", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					null
				},
				{
					array[1],
					null
				},
				{
					array[2],
					null
				},
				{
					array[3],
					null
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					new List<Attribute>
					{
						new NotifyAttribute()
					}
				},
				{
					array[1],
					new List<Attribute>
					{
						new NotifyAttribute()
					}
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				}
			});
			Value = new AccessibleTypeInfo(typeof(InventoryFullnessModel), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor _transferEventAccessor()
		{
			return new ClassMemberAccessor<InventoryFullnessModel, ItemTransferEvent?>("_transferEvent", "_transferEvent", SerializerFormatSet.None, typeof(InventoryFullnessModel).GetField("_transferEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ItemTransferEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(ItemTransferEvent)), (InventoryFullnessModel instance) => instance._transferEvent, delegate(InventoryFullnessModel instance, in ItemTransferEvent? value)
			{
				instance._transferEvent = value;
			}, (InventoryFullnessModel instance) => ref Unsafe.AsRef(in instance._transferEvent));
		}

		private static IMemberAccessor _percentageAccessor()
		{
			return new ClassMemberAccessor<InventoryFullnessModel, float>("_percentage", "_percentage", SerializerFormatSet.None, typeof(InventoryFullnessModel).GetField("_percentage", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(float), null, (InventoryFullnessModel instance) => instance._percentage, delegate(InventoryFullnessModel instance, in float value)
			{
				instance._percentage = value;
			}, (InventoryFullnessModel instance) => ref Unsafe.AsRef(in instance._percentage));
		}

		private static IMemberAccessor TransferEventAccessor()
		{
			return new ClassMemberAccessor<InventoryFullnessModel, ItemTransferEvent?>("TransferEvent", "TransferEvent", SerializerFormatSet.None, typeof(InventoryFullnessModel).GetProperty("TransferEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ItemTransferEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(ItemTransferEvent)), (InventoryFullnessModel instance) => instance.TransferEvent, delegate(InventoryFullnessModel instance, in ItemTransferEvent? value)
			{
				instance.TransferEvent = value;
			}, null);
		}

		private static IMemberAccessor PercentageAccessor()
		{
			return new ClassMemberAccessor<InventoryFullnessModel, float>("Percentage", "Percentage", SerializerFormatSet.None, typeof(InventoryFullnessModel).GetProperty("Percentage", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(float), null, (InventoryFullnessModel instance) => instance.Percentage, delegate(InventoryFullnessModel instance, in float value)
			{
				instance.Percentage = value;
			}, null);
		}
	}

	[Notify]
	private ItemTransferEvent? _transferEvent;

	[Notify]
	private float _percentage;

	EntityId IModel.MainEntity { get; set; }

	public ItemTransferEvent? TransferEvent
	{
		get
		{
			return _transferEvent;
		}
		set
		{
			SetProperty(ref _transferEvent, value, "TransferEvent");
		}
	}

	public float Percentage
	{
		get
		{
			return _percentage;
		}
		set
		{
			SetProperty(ref _percentage, value, "Percentage");
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Reflection;
using System.Runtime.CompilerServices;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Core.Render;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Mathematics;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.UI;
using Keen.VRage.Library.Utils;
using Keen.VRage.Multiplayer.Annotations;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Visualizes items within an inventory
/// </summary>
[Replicate]
[GenerateAccessors]
public class InventoryItemModel : ObservableObject, IAccessible
{
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 23;

		static TypeInfoHolder()
		{
			int num = 0;
			RawAccessors = new(string, IMemberAccessor)[22]
			{
				("Definition", DefinitionAccessor()),
				("Name", NameAccessor()),
				("IsNameVisible", IsNameVisibleAccessor()),
				("Description", DescriptionAccessor()),
				("Icon", IconAccessor()),
				("_amount", _amountAccessor()),
				("Amount", AmountAccessor()),
				("_price", _priceAccessor()),
				("Price", PriceAccessor()),
				("_dragAmount", _dragAmountAccessor()),
				("DragAmount", DragAmountAccessor()),
				("HasError", HasErrorAccessor()),
				("TotalMass", TotalMassAccessor()),
				("_metaData", _metaDataAccessor()),
				("MetaData", MetaDataAccessor()),
				("_stackable", _stackableAccessor()),
				("Stackable", StackableAccessor()),
				("_disabled", _disabledAccessor()),
				("Disabled", DisabledAccessor()),
				("DisableReason", DisableReasonAccessor()),
				("_new", _newAccessor()),
				("New", NewAccessor())
			};
			string documentation = "Visualizes items within an inventory";
			MemberInfo[] array = new MemberInfo[23]
			{
				typeof(InventoryItemModel).GetProperty("Definition", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("Name", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("IsNameVisible", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("Description", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("Icon", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetField("_amount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("Amount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetField("_price", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("Price", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetField("_dragAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("DragAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("HasError", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("TotalMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetField("_metaData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("MetaData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetField("_stackable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("Stackable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetField("_disabled", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("Disabled", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetProperty("DisableReason", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetField("_new", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryItemModel).GetMethod("Disable", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(LocKey) }, null),
				typeof(InventoryItemModel).GetProperty("New", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					null
				},
				{
					array[1],
					null
				},
				{
					array[2],
					null
				},
				{
					array[3],
					null
				},
				{
					array[4],
					null
				},
				{
					array[5],
					null
				},
				{
					array[6],
					null
				},
				{
					array[7],
					null
				},
				{
					array[8],
					null
				},
				{
					array[9],
					null
				},
				{
					array[10],
					null
				},
				{
					array[11],
					null
				},
				{
					array[12],
					null
				},
				{
					array[13],
					null
				},
				{
					array[14],
					null
				},
				{
					array[15],
					null
				},
				{
					array[16],
					null
				},
				{
					array[17],
					null
				},
				{
					array[18],
					null
				},
				{
					array[19],
					null
				},
				{
					array[20],
					null
				},
				{
					array[21],
					null
				},
				{
					array[22],
					null
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					ListReader<Attribute>.Empty
				},
				{
					array[4],
					ListReader<Attribute>.Empty
				},
				{
					array[5],
					ListReader<Attribute>.Empty
				},
				{
					array[6],
					ListReader<Attribute>.Empty
				},
				{
					array[7],
					ListReader<Attribute>.Empty
				},
				{
					array[8],
					new List<Attribute>
					{
						new SyncFromClients()
					}
				},
				{
					array[9],
					ListReader<Attribute>.Empty
				},
				{
					array[10],
					new List<Attribute>
					{
						new SyncFromClients()
					}
				},
				{
					array[11],
					ListReader<Attribute>.Empty
				},
				{
					array[12],
					ListReader<Attribute>.Empty
				},
				{
					array[13],
					new List<Attribute>
					{
						new NoReplicateAttribute()
					}
				},
				{
					array[14],
					ListReader<Attribute>.Empty
				},
				{
					array[15],
					ListReader<Attribute>.Empty
				},
				{
					array[16],
					new List<Attribute>
					{
						new SyncFromClients()
					}
				},
				{
					array[17],
					ListReader<Attribute>.Empty
				},
				{
					array[18],
					new List<Attribute>
					{
						new SyncFromClients()
					}
				},
				{
					array[19],
					ListReader<Attribute>.Empty
				},
				{
					array[20],
					new List<Attribute>
					{
						new NotifyAttribute()
					}
				},
				{
					array[21],
					ListReader<Attribute>.Empty
				},
				{
					array[22],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				},
				{
					array[4],
					num + 4
				},
				{
					array[5],
					num + 5
				},
				{
					array[6],
					num + 6
				},
				{
					array[7],
					num + 7
				},
				{
					array[8],
					num + 8
				},
				{
					array[9],
					num + 9
				},
				{
					array[10],
					num + 10
				},
				{
					array[11],
					num + 11
				},
				{
					array[12],
					num + 12
				},
				{
					array[13],
					num + 13
				},
				{
					array[14],
					num + 14
				},
				{
					array[15],
					num + 15
				},
				{
					array[16],
					num + 16
				},
				{
					array[17],
					num + 17
				},
				{
					array[18],
					num + 18
				},
				{
					array[19],
					num + 19
				},
				{
					array[20],
					num + 20
				},
				{
					array[21],
					num + 21
				},
				{
					array[22],
					num + 22
				}
			});
			Value = new AccessibleTypeInfo(typeof(InventoryItemModel), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor DefinitionAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, ItemDefinition>("Definition", "Definition", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Definition", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ItemDefinition), () => ItemDefinition.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.Definition, delegate(InventoryItemModel instance, in ItemDefinition value)
			{
				instance.Definition = value;
			}, null);
		}

		private static IMemberAccessor NameAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, LocalizableText>("Name", "Name", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Name", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocalizableText), () => LocalizableText.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.Name, null, null);
		}

		private static IMemberAccessor IsNameVisibleAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, bool>("IsNameVisible", "IsNameVisible", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("IsNameVisible", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.IsNameVisible, null, null);
		}

		private static IMemberAccessor DescriptionAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, LocKey>("Description", "Description", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Description", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.Description, null, null);
		}

		private static IMemberAccessor IconAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, ResourceHandle<PngAsset>>("Icon", "Icon", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Icon", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ResourceHandle<PngAsset>), null, (InventoryItemModel instance) => instance.Icon, null, null);
		}

		private static IMemberAccessor _amountAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, FixedPoint>("_amount", "_amount", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_amount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryItemModel instance) => instance._amount, delegate(InventoryItemModel instance, in FixedPoint value)
			{
				instance._amount = value;
			}, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._amount));
		}

		private static IMemberAccessor AmountAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, FixedPoint>("Amount", "Amount", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Amount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.Amount, delegate(InventoryItemModel instance, in FixedPoint value)
			{
				instance.Amount = value;
			}, null);
		}

		private static IMemberAccessor _priceAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, float>("_price", "_price", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_price", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(float), null, (InventoryItemModel instance) => instance._price, delegate(InventoryItemModel instance, in float value)
			{
				instance._price = value;
			}, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._price));
		}

		private static IMemberAccessor PriceAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, float>("Price", "Price", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Price", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(float), null, (InventoryItemModel instance) => instance.Price, delegate(InventoryItemModel instance, in float value)
			{
				instance.Price = value;
			}, null);
		}

		private static IMemberAccessor _dragAmountAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, FixedPoint?>("_dragAmount", "_dragAmount", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_dragAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(FixedPoint)), (InventoryItemModel instance) => instance._dragAmount, delegate(InventoryItemModel instance, in FixedPoint? value)
			{
				instance._dragAmount = value;
			}, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._dragAmount));
		}

		private static IMemberAccessor DragAmountAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, FixedPoint?>("DragAmount", "DragAmount", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("DragAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(FixedPoint)), (InventoryItemModel instance) => instance.DragAmount, delegate(InventoryItemModel instance, in FixedPoint? value)
			{
				instance.DragAmount = value;
			}, null);
		}

		private static IMemberAccessor HasErrorAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, bool>("HasError", "HasError", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("HasError", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.HasError, null, null);
		}

		private static IMemberAccessor TotalMassAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, FixedPoint>("TotalMass", "TotalMass", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("TotalMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.TotalMass, null, null);
		}

		private static IMemberAccessor _metaDataAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, object>("_metaData", "_metaData", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_metaData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(object), null, (InventoryItemModel instance) => instance._metaData, delegate(InventoryItemModel instance, in object? value)
			{
				instance._metaData = value;
			}, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._metaData));
		}

		private static IMemberAccessor MetaDataAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, object>("MetaData", "MetaData", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("MetaData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(object), null, (InventoryItemModel instance) => instance.MetaData, delegate(InventoryItemModel instance, in object? value)
			{
				instance.MetaData = value;
			}, null);
		}

		private static IMemberAccessor _stackableAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, bool>("_stackable", "_stackable", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_stackable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance._stackable, delegate(InventoryItemModel instance, in bool value)
			{
				instance._stackable = value;
			}, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._stackable));
		}

		private static IMemberAccessor StackableAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, bool>("Stackable", "Stackable", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Stackable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.Stackable, delegate(InventoryItemModel instance, in bool value)
			{
				instance.Stackable = value;
			}, null);
		}

		private static IMemberAccessor _disabledAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, bool>("_disabled", "_disabled", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_disabled", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance._disabled, delegate(InventoryItemModel instance, in bool value)
			{
				instance._disabled = value;
			}, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._disabled));
		}

		private static IMemberAccessor DisabledAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, bool>("Disabled", "Disabled", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Disabled", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.Disabled, delegate(InventoryItemModel instance, in bool value)
			{
				instance.Disabled = value;
			}, null);
		}

		private static IMemberAccessor DisableReasonAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, LocKey>("DisableReason", "DisableReason", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("DisableReason", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.DisableReason, delegate(InventoryItemModel instance, in LocKey value)
			{
				instance.DisableReason = value;
			}, null);
		}

		private static IMemberAccessor _newAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, bool>("_new", "_new", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_new", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance._new, delegate(InventoryItemModel instance, in bool value)
			{
				instance._new = value;
			}, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._new));
		}

		private static IMemberAccessor NewAccessor()
		{
			return new ClassMemberAccessor<InventoryItemModel, bool>("New", "New", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("New", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.New, delegate(InventoryItemModel instance, in bool value)
			{
				instance.New = value;
			}, null);
		}
	}

	private FixedPoint _amount;

	private float _price;

	private FixedPoint? _dragAmount;

	[NoReplicate]
	private object? _metaData;

	private bool _stackable;

	private bool _disabled;

	[Notify]
	private bool _new;

	public ItemDefinition Definition { get; set; }

	public LocalizableText Name => LocalizableText.FromLocKey(Definition.DisplayName);

	public bool IsNameVisible => Definition.Type == ItemTypes.Datapad;

	public LocKey Description => Definition.Description;

	public ResourceHandle<PngAsset> Icon => Definition.Icon;

	public FixedPoint Amount
	{
		get
		{
			return _amount;
		}
		set
		{
			if (SetProperty(ref _amount, value, "Amount"))
			{
				OnPropertyChanged("TotalMass");
			}
		}
	}

	[SyncFromClients(null)]
	public float Price
	{
		get
		{
			return _price;
		}
		set
		{
			SetProperty(ref _price, value, "Price");
		}
	}

	[SyncFromClients(null)]
	public FixedPoint? DragAmount
	{
		get
		{
			return _dragAmount;
		}
		set
		{
			SetProperty(ref _dragAmount, value, "DragAmount");
			OnPropertyChanged("HasError");
		}
	}

	public bool HasError => DragAmount > Amount;

	public FixedPoint TotalMass => Definition.MassPerUnit * Amount;

	public object? MetaData
	{
		get
		{
			return _metaData;
		}
		set
		{
			SetProperty(ref _metaData, value, "MetaData");
		}
	}

	[SyncFromClients(null)]
	public bool Stackable
	{
		get
		{
			return _stackable;
		}
		set
		{
			SetProperty(ref _stackable, value, "Stackable");
		}
	}

	[SyncFromClients(null)]
	public bool Disabled
	{
		get
		{
			return _disabled;
		}
		private set
		{
			SetProperty(ref _disabled, value, "Disabled");
		}
	}

	public LocKey DisableReason { get; private set; }

	public bool New
	{
		get
		{
			return _new;
		}
		set
		{
			SetProperty(ref _new, value, "New");
		}
	}

	public void Disable(LocKey reason)
	{
		Disabled = true;
		DisableReason = reason;
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using Keen.VRage.DCS.Components;
using Keen.VRage.Library.Threading;
using Keen.VRage.Multiplayer.SecureIds;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Model for visualizing a list of inventories for multiple Entities.
/// </summary>
public class InventoryListModel : IDisposable
{
	private readonly object _lifetime;

	private readonly ITerminalInventory _inventories;

	private readonly Dictionary<EntityId, InventoryContainerModel> _entityToContainer = new Dictionary<EntityId, InventoryContainerModel>();

	private InteractionInfo? _interaction;

	public InventoryListModelStreamed StreamedModel { get; }

	public InventoryListModel(ITerminalInventory inventories, InventoryListModelStreamed streamedModel, object lifetime, InteractionInfo? interactionInfo)
	{
		_lifetime = lifetime;
		_inventories = inventories;
		StreamedModel = streamedModel;
		_interaction = interactionInfo;
		StreamedModel.Entities.CollectionChanged += OnEntitiesCollectionChanged;
		FillInventories(streamedModel.Entities).SkipWait();
	}

	public void Dispose()
	{
		if (!(StreamedModel.MainEntity != default(EntityId)))
		{
			return;
		}
		foreach (InventoryContainerModel inventoryContainer in StreamedModel.InventoryContainers)
		{
			_inventories.Detach(inventoryContainer, StreamedModel);
		}
		StreamedModel.Entities.CollectionChanged -= OnEntitiesCollectionChanged;
		_inventories.Detach(StreamedModel);
	}

	public bool ContainsInventory(InventoryModel inventory)
	{
		foreach (InventoryContainerModel inventoryContainer in StreamedModel.InventoryContainers)
		{
			foreach (InventoryModel inventory2 in inventoryContainer.Inventories)
			{
				if (inventory2 == inventory)
				{
					return true;
				}
			}
		}
		return false;
	}

	private void OnEntitiesCollectionChanged(object? collection, NotifyCollectionChangedEventArgs args)
	{
		switch (args.Action)
		{
		case NotifyCollectionChangedAction.Add:
			FillInventories(args.NewItems.Cast<EntityId>()).SkipWait();
			break;
		case NotifyCollectionChangedAction.Remove:
		{
			foreach (EntityId oldItem in args.OldItems)
			{
				if (_entityToContainer.TryGetValue(oldItem, out InventoryContainerModel value))
				{
					_inventories.Detach(value, StreamedModel);
					_entityToContainer.Remove(oldItem);
				}
			}
			break;
		}
		default:
			throw new NotImplementedException();
		}
	}

	private async Task FillInventories(IEnumerable<EntityId> entities)
	{
		await Task.SetLifetime(_lifetime);
		(Task<InventoryContainerModel> Task, EntityId EntityId)[] tasksWithEntities = entities.Select((EntityId e) => (Task: _inventories.Attach(e, _interaction), EntityId: e)).ToArray();
		await Task.AwaitAll(tasksWithEntities.Select(((Task<InventoryContainerModel> Task, EntityId EntityId) t) => t.Task.StripResult()));
		(Task<InventoryContainerModel>, EntityId)[] array = tasksWithEntities;
		for (int num = 0; num < array.Length; num++)
		{
			(Task<InventoryContainerModel>, EntityId) tuple = array[num];
			InventoryContainerModel result = tuple.Item1.GetAwaiter().GetResult();
			if (result != null)
			{
				_entityToContainer.Add(tuple.Item2, result);
			}
		}
	}

	public static async Task<InventoryListModel> CreateAsync(ITerminalInventory inventories, Entity? targetEntity, object lifetime, InteractionInfo? interactionInfo = null)
	{
		await Task.SetLifetime(lifetime);
		InventoryListModelStreamed streamedModel = ((targetEntity != null) ? (await inventories.Attach(targetEntity, populateMainEntity: false, interactionInfo)) : new InventoryListModelStreamed());
		return new InventoryListModel(inventories, streamedModel, lifetime, interactionInfo);
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModelStreamed
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Reflection;
using System.Runtime.CompilerServices;
using Keen.VRage.Library.Collections;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.UI;
using Keen.VRage.Multiplayer.Annotations;
using Keen.VRage.Multiplayer.SecureIds;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

[Replicate]
[GenerateAccessors]
public class InventoryListModelStreamed : ObservableObject, IModel, IAccessible
{
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 3;

		static TypeInfoHolder()
		{
			int num = 0;
			RawAccessors = new(string, IMemberAccessor)[3]
			{
				("MainEntity", MainEntityAccessor()),
				("Entities", EntitiesAccessor()),
				("InventoryContainers", InventoryContainersAccessor())
			};
			string documentation = null;
			MemberInfo[] array = new MemberInfo[3]
			{
				typeof(InventoryListModelStreamed).GetProperty("MainEntity", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryListModelStreamed).GetProperty("Entities", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryListModelStreamed).GetProperty("InventoryContainers", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					null
				},
				{
					array[1],
					null
				},
				{
					array[2],
					"Inventory container models for all observed entities"
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				}
			});
			Value = new AccessibleTypeInfo(typeof(InventoryListModelStreamed), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor MainEntityAccessor()
		{
			return new ClassMemberAccessor<InventoryListModelStreamed, EntityId>("MainEntity", "MainEntity", SerializerFormatSet.None, typeof(InventoryListModelStreamed).GetProperty("MainEntity", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(EntityId), null, (InventoryListModelStreamed instance) => instance.MainEntity, delegate(InventoryListModelStreamed instance, in EntityId value)
			{
				instance.MainEntity = value;
			}, null);
		}

		private static IMemberAccessor EntitiesAccessor()
		{
			return new ClassMemberAccessor<InventoryListModelStreamed, ObservableList<EntityId>>("Entities", "Entities", SerializerFormatSet.None, typeof(InventoryListModelStreamed).GetProperty("Entities", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ObservableList<EntityId>), null, (InventoryListModelStreamed instance) => instance.Entities, null, null);
		}

		private static IMemberAccessor InventoryContainersAccessor()
		{
			return new ClassMemberAccessor<InventoryListModelStreamed, ObservableList<InventoryContainerModel>>("InventoryContainers", "InventoryContainers", SerializerFormatSet.None, typeof(InventoryListModelStreamed).GetProperty("InventoryContainers", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ObservableList<InventoryContainerModel>), null, (InventoryListModelStreamed instance) => instance.InventoryContainers, null, null);
		}
	}

	public EntityId MainEntity { get; set; }

	public ObservableList<EntityId> Entities { get; } = new ObservableList<EntityId>();

	/// <summary>
	/// Inventory container models for all observed entities
	/// </summary>
	public ObservableList<InventoryContainerModel> InventoryContainers { get; } = new ObservableList<InventoryContainerModel>();

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Reflection;
using System.Runtime.CompilerServices;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Library.Collections;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Extensions;
using Keen.VRage.Library.Mathematics;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.UI;
using Keen.VRage.Library.Utils;
using Keen.VRage.Multiplayer.Annotations;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Visualizes an inventory and its contents
/// </summary>
[Replicate]
[GenerateAccessors]
public class InventoryModel : ObservableObject, IAccessible
{
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 26;

		static TypeInfoHolder()
		{
			int num = 0;
			RawAccessors = new(string, IMemberAccessor)[19]
			{
				("ShowInStats", ShowInStatsAccessor()),
				("Definition", DefinitionAccessor()),
				("Configuration", ConfigurationAccessor()),
				("MaxStacks", MaxStacksAccessor()),
				("MaxMass", MaxMassAccessor()),
				("Mass", MassAccessor()),
				("Items", ItemsAccessor()),
				("IsAccessed", IsAccessedAccessor()),
				("_entityName", _entityNameAccessor()),
				("_parentName", _parentNameAccessor()),
				("_isConnected", _isConnectedAccessor()),
				("_displayParentName", _displayParentNameAccessor()),
				("OnItemTransferError", OnItemTransferErrorAccessor()),
				("DisplayName", DisplayNameAccessor()),
				("DisplayNameShort", DisplayNameShortAccessor()),
				("EntityName", EntityNameAccessor()),
				("ParentName", ParentNameAccessor()),
				("IsConnected", IsConnectedAccessor()),
				("DisplayParentName", DisplayParentNameAccessor())
			};
			string documentation = "Visualizes an inventory and its contents";
			MemberInfo[] array = new MemberInfo[26]
			{
				typeof(InventoryModel).GetProperty("ShowInStats", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("Definition", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetField("Configuration", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("MaxStacks", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("MaxMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("Mass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("Items", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("IsAccessed", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetField("_entityName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetField("_parentName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetField("_isConnected", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetField("_displayParentName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetField("OnItemTransferError", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("DisplayName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("DisplayNameShort", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetMethod("OnItemsCollectionChanged", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[2]
				{
					typeof(object),
					typeof(NotifyCollectionChangedEventArgs)
				}, null),
				typeof(InventoryModel).GetMethod("OnItemPropertyChanged", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[2]
				{
					typeof(object),
					typeof(PropertyChangedEventArgs)
				}, null),
				typeof(InventoryModel).GetMethod("OnItemsChanged", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null),
				typeof(InventoryModel).GetMethod("GetItemAmount", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(ItemDefinition) }, null),
				typeof(InventoryModel).GetMethod("IsCompatibleWithItem", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(ItemDefinition) }, null),
				typeof(InventoryModel).GetMethod("CanFitItem", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(ItemDefinition) }, null),
				typeof(InventoryModel).GetMethod("CountItem", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(ItemDefinition) }, null),
				typeof(InventoryModel).GetProperty("EntityName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("ParentName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("IsConnected", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryModel).GetProperty("DisplayParentName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					null
				},
				{
					array[1],
					null
				},
				{
					array[2],
					null
				},
				{
					array[3],
					null
				},
				{
					array[4],
					null
				},
				{
					array[5],
					null
				},
				{
					array[6],
					null
				},
				{
					array[7],
					null
				},
				{
					array[8],
					null
				},
				{
					array[9],
					null
				},
				{
					array[10],
					null
				},
				{
					array[11],
					null
				},
				{
					array[12],
					null
				},
				{
					array[13],
					null
				},
				{
					array[14],
					null
				},
				{
					array[15],
					null
				},
				{
					array[16],
					null
				},
				{
					array[17],
					null
				},
				{
					array[18],
					null
				},
				{
					array[19],
					null
				},
				{
					array[20],
					null
				},
				{
					array[21],
					null
				},
				{
					array[22],
					null
				},
				{
					array[23],
					null
				},
				{
					array[24],
					null
				},
				{
					array[25],
					null
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					ListReader<Attribute>.Empty
				},
				{
					array[4],
					ListReader<Attribute>.Empty
				},
				{
					array[5],
					ListReader<Attribute>.Empty
				},
				{
					array[6],
					ListReader<Attribute>.Empty
				},
				{
					array[7],
					ListReader<Attribute>.Empty
				},
				{
					array[8],
					new List<Attribute>
					{
						new NotifyAttribute(),
						new NotifyAlsoAttribute("DisplayName")
					}
				},
				{
					array[9],
					new List<Attribute>
					{
						new NotifyAttribute(),
						new NotifyAlsoAttribute("DisplayName")
					}
				},
				{
					array[10],
					new List<Attribute>
					{
						new NotifyAttribute()
					}
				},
				{
					array[11],
					new List<Attribute>
					{
						new NotifyAttribute(),
						new NotifyAlsoAttribute("DisplayName")
					}
				},
				{
					array[12],
					ListReader<Attribute>.Empty
				},
				{
					array[13],
					ListReader<Attribute>.Empty
				},
				{
					array[14],
					ListReader<Attribute>.Empty
				},
				{
					array[15],
					ListReader<Attribute>.Empty
				},
				{
					array[16],
					ListReader<Attribute>.Empty
				},
				{
					array[17],
					ListReader<Attribute>.Empty
				},
				{
					array[18],
					ListReader<Attribute>.Empty
				},
				{
					array[19],
					ListReader<Attribute>.Empty
				},
				{
					array[20],
					ListReader<Attribute>.Empty
				},
				{
					array[21],
					ListReader<Attribute>.Empty
				},
				{
					array[22],
					ListReader<Attribute>.Empty
				},
				{
					array[23],
					ListReader<Attribute>.Empty
				},
				{
					array[24],
					ListReader<Attribute>.Empty
				},
				{
					array[25],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				},
				{
					array[4],
					num + 4
				},
				{
					array[5],
					num + 5
				},
				{
					array[6],
					num + 6
				},
				{
					array[7],
					num + 7
				},
				{
					array[8],
					num + 8
				},
				{
					array[9],
					num + 9
				},
				{
					array[10],
					num + 10
				},
				{
					array[11],
					num + 11
				},
				{
					array[12],
					num + 12
				},
				{
					array[13],
					num + 13
				},
				{
					array[14],
					num + 14
				},
				{
					array[15],
					num + 15
				},
				{
					array[16],
					num + 16
				},
				{
					array[17],
					num + 17
				},
				{
					array[18],
					num + 18
				},
				{
					array[19],
					num + 19
				},
				{
					array[20],
					num + 20
				},
				{
					array[21],
					num + 21
				},
				{
					array[22],
					num + 22
				},
				{
					array[23],
					num + 23
				},
				{
					array[24],
					num + 24
				},
				{
					array[25],
					num + 25
				}
			});
			Value = new AccessibleTypeInfo(typeof(InventoryModel), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor ShowInStatsAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, bool>("ShowInStats", "ShowInStats", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("ShowInStats", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryModel instance) => instance.ShowInStats, delegate(InventoryModel instance, in bool value)
			{
				instance.ShowInStats = value;
			}, null);
		}

		private static IMemberAccessor DefinitionAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, InventoryDefinition>("Definition", "Definition", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("Definition", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(InventoryDefinition), () => InventoryDefinition.TypeInfoHolder.Value, (InventoryModel instance) => instance.Definition, delegate(InventoryModel instance, in InventoryDefinition value)
			{
				instance.Definition = value;
			}, null);
		}

		private static IMemberAccessor ConfigurationAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, InventoryStreamedUIConfiguration>("Configuration", "Configuration", SerializerFormatSet.None, typeof(InventoryModel).GetField("Configuration", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(InventoryStreamedUIConfiguration), () => InventoryStreamedUIConfiguration.TypeInfoHolder.Value, (InventoryModel instance) => instance.Configuration, delegate(InventoryModel instance, in InventoryStreamedUIConfiguration value)
			{
				instance.Configuration = value;
			}, (InventoryModel instance) => ref Unsafe.AsRef(in instance.Configuration));
		}

		private static IMemberAccessor MaxStacksAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, int?>("MaxStacks", "MaxStacks", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("MaxStacks", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(int?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(int)), (InventoryModel instance) => instance.MaxStacks, null, null);
		}

		private static IMemberAccessor MaxMassAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, FixedPoint>("MaxMass", "MaxMass", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("MaxMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryModel instance) => instance.MaxMass, null, null);
		}

		private static IMemberAccessor MassAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, FixedPoint>("Mass", "Mass", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("Mass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryModel instance) => instance.Mass, null, null);
		}

		private static IMemberAccessor ItemsAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, ObservableList<InventoryItemModel>>("Items", "Items", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("Items", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ObservableList<InventoryItemModel>), null, (InventoryModel instance) => instance.Items, null, null);
		}

		private static IMemberAccessor IsAccessedAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, bool>("IsAccessed", "IsAccessed", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("IsAccessed", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryModel instance) => instance.IsAccessed, delegate(InventoryModel instance, in bool value)
			{
				instance.IsAccessed = value;
			}, null);
		}

		private static IMemberAccessor _entityNameAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, string>("_entityName", "_entityName", SerializerFormatSet.None, typeof(InventoryModel).GetField("_entityName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(string), null, (InventoryModel instance) => instance._entityName, delegate(InventoryModel instance, in string? value)
			{
				instance._entityName = value;
			}, (InventoryModel instance) => ref Unsafe.AsRef(in instance._entityName));
		}

		private static IMemberAccessor _parentNameAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, string>("_parentName", "_parentName", SerializerFormatSet.None, typeof(InventoryModel).GetField("_parentName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(string), null, (InventoryModel instance) => instance._parentName, delegate(InventoryModel instance, in string? value)
			{
				instance._parentName = value;
			}, (InventoryModel instance) => ref Unsafe.AsRef(in instance._parentName));
		}

		private static IMemberAccessor _isConnectedAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, bool>("_isConnected", "_isConnected", SerializerFormatSet.None, typeof(InventoryModel).GetField("_isConnected", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryModel instance) => instance._isConnected, delegate(InventoryModel instance, in bool value)
			{
				instance._isConnected = value;
			}, (InventoryModel instance) => ref Unsafe.AsRef(in instance._isConnected));
		}

		private static IMemberAccessor _displayParentNameAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, bool>("_displayParentName", "_displayParentName", SerializerFormatSet.None, typeof(InventoryModel).GetField("_displayParentName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryModel instance) => instance._displayParentName, delegate(InventoryModel instance, in bool value)
			{
				instance._displayParentName = value;
			}, (InventoryModel instance) => ref Unsafe.AsRef(in instance._displayParentName));
		}

		private static IMemberAccessor OnItemTransferErrorAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, Action>("OnItemTransferError", "OnItemTransferError", SerializerFormatSet.None, typeof(InventoryModel).GetField("OnItemTransferError", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(Action), null, (InventoryModel instance) => instance.OnItemTransferError, delegate(InventoryModel instance, in Action? value)
			{
				instance.OnItemTransferError = value;
			}, (InventoryModel instance) => ref Unsafe.AsRef(in instance.OnItemTransferError));
		}

		private static IMemberAccessor DisplayNameAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, string>("DisplayName", "DisplayName", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("DisplayName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(string), null, (InventoryModel instance) => instance.DisplayName, null, null);
		}

		private static IMemberAccessor DisplayNameShortAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, string>("DisplayNameShort", "DisplayNameShort", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("DisplayNameShort", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(string), null, (InventoryModel instance) => instance.DisplayNameShort, null, null);
		}

		private static IMemberAccessor EntityNameAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, string>("EntityName", "EntityName", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("EntityName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(string), null, (InventoryModel instance) => instance.EntityName, delegate(InventoryModel instance, in string? value)
			{
				instance.EntityName = value;
			}, null);
		}

		private static IMemberAccessor ParentNameAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, string>("ParentName", "ParentName", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("ParentName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(string), null, (InventoryModel instance) => instance.ParentName, delegate(InventoryModel instance, in string? value)
			{
				instance.ParentName = value;
			}, null);
		}

		private static IMemberAccessor IsConnectedAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, bool>("IsConnected", "IsConnected", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("IsConnected", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryModel instance) => instance.IsConnected, delegate(InventoryModel instance, in bool value)
			{
				instance.IsConnected = value;
			}, null);
		}

		private static IMemberAccessor DisplayParentNameAccessor()
		{
			return new ClassMemberAccessor<InventoryModel, bool>("DisplayParentName", "DisplayParentName", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("DisplayParentName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryModel instance) => instance.DisplayParentName, delegate(InventoryModel instance, in bool value)
			{
				instance.DisplayParentName = value;
			}, null);
		}
	}

	private const string CHILD_KEY = "Child";

	private const string PARENT_KEY = "Parent";

	private const string ENTITY_KEY = "Entity";

	public InventoryStreamedUIConfiguration Configuration;

	[Notify]
	[NotifyAlso("DisplayName")]
	private string? _entityName;

	[Notify]
	[NotifyAlso("DisplayName")]
	private string? _parentName;

	[Notify]
	private bool _isConnected;

	[Notify]
	[NotifyAlso("DisplayName")]
	private bool _displayParentName;

	public Action? OnItemTransferError;

	public virtual bool ShowInStats { get; protected set; }

	public virtual InventoryDefinition Definition { get; protected set; }

	public int? MaxStacks => Definition.MaxStacks;

	public FixedPoint MaxMass => Definition.MaxMass;

	public FixedPoint Mass => Items.Sum((InventoryItemModel x) => x.Amount * x.Definition.MassPerUnit);

	public ObservableList<InventoryItemModel> Items { get; } = new ObservableList<InventoryItemModel>();

	public bool IsAccessed { get; protected set; }

	public string DisplayName
	{
		get
		{
			string inventoryName = DisplayNameShort;
			if (!DisplayParentName)
			{
				return inventoryName;
			}
			return Configuration.CombinedNameFormat.EvaluateText(delegate(string x)
			{
				if (x == "Child")
				{
					return inventoryName;
				}
				return (x == "Parent") ? (ParentName ?? Configuration.DefaultEntityName.EvaluateText()) : null;
			});
		}
	}

	public string DisplayNameShort => (Definition.InventoryName ?? Configuration.DefaultInventoryName).EvaluateText((string x) => (x == "Entity") ? (EntityName ?? Configuration.DefaultEntityName.EvaluateText()) : null);

	public string? EntityName
	{
		get
		{
			return _entityName;
		}
		set
		{
			if (SetProperty(ref _entityName, value, "EntityName"))
			{
				OnPropertyChanged("DisplayName");
			}
		}
	}

	public string? ParentName
	{
		get
		{
			return _parentName;
		}
		set
		{
			if (SetProperty(ref _parentName, value, "ParentName"))
			{
				OnPropertyChanged("DisplayName");
			}
		}
	}

	public bool IsConnected
	{
		get
		{
			return _isConnected;
		}
		set
		{
			SetProperty(ref _isConnected, value, "IsConnected");
		}
	}

	public bool DisplayParentName
	{
		get
		{
			return _displayParentName;
		}
		set
		{
			if (SetProperty(ref _displayParentName, value, "DisplayParentName"))
			{
				OnPropertyChanged("DisplayName");
			}
		}
	}

	protected InventoryModel()
	{
		Items.CollectionChanged += OnItemsCollectionChanged;
	}

	private void OnItemsCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
	{
		if (e.OldItems != null)
		{
			foreach (InventoryItemModel oldItem in e.OldItems)
			{
				oldItem.PropertyChanged -= OnItemPropertyChanged;
			}
		}
		if (e.NewItems != null)
		{
			foreach (InventoryItemModel newItem in e.NewItems)
			{
				newItem.PropertyChanged += OnItemPropertyChanged;
			}
		}
		OnItemsChanged();
	}

	private void OnItemPropertyChanged(object? sender, PropertyChangedEventArgs e)
	{
		if (e.PropertyName == "Amount")
		{
			OnItemsChanged();
		}
	}

	private void OnItemsChanged()
	{
		OnPropertyChanged("Mass");
		OnPropertyChanged("Items");
	}

	public FixedPoint GetItemAmount(ItemDefinition item)
	{
		FixedPoint zero = FixedPoint.Zero;
		foreach (InventoryItemModel item2 in Items)
		{
			if (item == item2.Definition)
			{
				zero += item2.Amount;
			}
		}
		return zero;
	}

	public bool IsCompatibleWithItem(ItemDefinition item)
	{
		if (Definition.WhitelistedItems.Count == 0 || Definition.WhitelistedItems.Contains(item))
		{
			return Definition.WhitelistedTypes.HasAllFlags(item.Type);
		}
		return false;
	}

	public bool CanFitItem(ItemDefinition item)
	{
		if (Mass >= MaxMass)
		{
			return false;
		}
		if (!item.IsStackable && Items.Count == MaxStacks)
		{
			return false;
		}
		return true;
	}

	public FixedPoint CountItem(ItemDefinition item)
	{
		FixedPoint result = 0;
		foreach (InventoryItemModel item2 in Items)
		{
			if (item2.Definition == item)
			{
				result += item2.Amount;
			}
		}
		return result;
	}

	public int CountUniqueItems<T>(Predicate<T>? filter = null) where T : ItemDefinition
	{
		using PooledSet<Guid> pooledSet = new PooledSet<Guid>();
		foreach (InventoryItemModel item in Items)
		{
			if (item.Definition is T val && (filter == null || filter(val)))
			{
				pooledSet.Add(val.Guid);
			}
		}
		return pooledSet.Count;
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryPermissionsValidator
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System.Linq;
using Keen.Game2.Simulation.WorldObjects.CubeBlocks;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.DCS.Definitions;
using Keen.VRage.DCS.ObjectBuilders;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Validation;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Validates that all blocks with <see cref="T:Keen.Game2.Simulation.WorldObjects.Items.InventoryComponent" /> will also have <see cref="T:Keen.Game2.Simulation.WorldObjects.CubeBlocks.BlockPermissionsComponent" />
/// </summary>
public class InventoryPermissionsValidator : SimpleValidator<EntityCompositeDefinition>
{
	public override void Validate(EntityCompositeDefinition composite, ValidationReporter reporter, ValidationContext context, MemberReference member)
	{
		if (composite.ComponentsOfType<CubeBlockComponent>().Any() && composite.ComponentsOfType<InventoryComponent>().Any())
		{
			bool flag = composite.ComponentsOfType<BlockPermissionsComponent>().Any();
			bool condition = flag;
			ConditionalInterpolatedStringHandler<Assert.AssertTrueCondition, bool> message = new ConditionalInterpolatedStringHandler<Assert.AssertTrueCondition, bool>(58, 0, flag, out var shouldAppend);
			if (shouldAppend)
			{
				message.AppendLiteral("Block's with Inventory must have BlockPermissionsComponent");
			}
			reporter.Validate(condition, member, message);
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfiguration
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Binary;
using Keen.VRage.Library.Serialization.Json;
using Keen.VRage.Library.Serialization.ObjectBuilders;
using Keen.VRage.Library.Serialization.Serializers;
using Keen.VRage.Library.Serialization.Validation;
using Keen.VRage.Library.Utils;
using Keen.VRage.Library.Utils.Cloning;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Configuration for the Streamed Inventory
/// </summary>
[Cloneable]
[DoNotValidateMembers(new string[] { "DefaultInventoryName", "CombinedNameFormat", "DefaultEntityName", "DefaultDropDistance" })]
public class InventoryStreamedUIConfiguration : Configuration, ISerializable<InventoryStreamedUIConfiguration>, ISerializable, IObjectBuilderInitializable<InventoryStreamedUIConfigurationObjectBuilder>, IObjectBuilderInitializable, IDeepCloneable<InventoryStreamedUIConfiguration>, IAccessible
{
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public new class Serializer : ObjectBuilderInitializer<InventoryStreamedUIConfiguration, InventoryStreamedUIConfigurationObjectBuilder>, INamedObjectSerializer<InventoryStreamedUIConfiguration>, INamedObjectSerializer, ISerializer
	{
		/// <inheritdoc />
		public new static readonly Serializer Instance = new Serializer();

		/// <inheritdoc />
		ISerializer<InventoryStreamedUIConfiguration> INamedObjectSerializer<InventoryStreamedUIConfiguration>.NameSerializer => ImmutableSingleton<NameProxySerializer<InventoryStreamedUIConfiguration, Guid>>.Instance;

		/// <inheritdoc />
		ISerializer INamedObjectSerializer.NameSerializer => ImmutableSingleton<NameProxySerializer<InventoryStreamedUIConfiguration, Guid>>.Instance;

		/// <inheritdoc />
		Type INamedObjectSerializer.NameType => typeof(Guid);

		/// <inheritdoc />
		bool INamedObjectSerializer<InventoryStreamedUIConfiguration>.ShouldSerializeAsName(SerializationContext context, in InventoryStreamedUIConfiguration value)
		{
			return ((ISerializableNamedObject<Guid>)value).ShouldSerializeAsName(context);
		}

		/// <inheritdoc />
		bool INamedObjectSerializer.ShouldSerializeAsName(SerializationContext context, in object value)
		{
			return ((INamedObjectSerializer<InventoryStreamedUIConfiguration>)this).ShouldSerializeAsName(context, (InventoryStreamedUIConfiguration)value);
		}
	}

	private class Cloner : IDeepCloner<InventoryStreamedUIConfiguration>, IDeepCloner
	{
		InventoryStreamedUIConfiguration IDeepCloner<InventoryStreamedUIConfiguration>.Clone(InventoryStreamedUIConfiguration value, ref CloningContext context)
		{
			if (((ICloneableNamedObject)value).UseShallowCopy(ref context))
			{
				return value;
			}
			ref InventoryStreamedUIConfiguration reference = ref context.ClonedOrNullRef(value);
			if (!Unsafe.IsNullRef(in reference))
			{
				return reference;
			}
			return new InventoryStreamedUIConfiguration(in value, ref context);
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public new class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 16;

		static TypeInfoHolder()
		{
			int num = 11;
			RawAccessors = new(string, IMemberAccessor)[4]
			{
				("DefaultInventoryName", DefaultInventoryNameAccessor()),
				("CombinedNameFormat", CombinedNameFormatAccessor()),
				("DefaultEntityName", DefaultEntityNameAccessor()),
				("DefaultDropDistance", DefaultDropDistanceAccessor())
			};
			string documentation = "Configuration for the Streamed Inventory";
			MemberInfo[] array = new MemberInfo[5]
			{
				typeof(InventoryStreamedUIConfiguration).GetProperty("DefaultInventoryName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryStreamedUIConfiguration).GetProperty("CombinedNameFormat", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryStreamedUIConfiguration).GetProperty("DefaultEntityName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryStreamedUIConfiguration).GetProperty("DefaultDropDistance", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryStreamedUIConfiguration).GetMethod("Init", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(InventoryStreamedUIConfigurationObjectBuilder) }, null)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					"Default name that will be assigned to the inventory if it does not have custom one"
				},
				{
					array[1],
					"Format the names of entity and its parent. Use {Child} and {Parent} as placeholders for respective names."
				},
				{
					array[2],
					"Default name used if entity has no name"
				},
				{
					array[3],
					"Default distance from player item is dropped."
				},
				{
					array[4],
					null
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					ListReader<Attribute>.Empty
				},
				{
					array[4],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				},
				{
					array[4],
					num + 4
				}
			});
			RawAccessors = Configuration.TypeInfoHolder.RawAccessors.Concat<(string, IMemberAccessor)>(RawAccessors).ToArray();
			builder.AddRange(Configuration.TypeInfoHolder.Value.MembersDocumentation);
			builder3.AddRange(Configuration.TypeInfoHolder.Value.MembersDeclarationOrder);
			builder2.AddRange(Configuration.TypeInfoHolder.Value.MembersAttributes);
			Value = new AccessibleTypeInfo(typeof(InventoryStreamedUIConfiguration), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor DefaultInventoryNameAccessor()
		{
			return new ClassMemberAccessor<InventoryStreamedUIConfiguration, LocKey>("DefaultInventoryName", "DefaultInventoryName", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryStreamedUIConfiguration).GetProperty("DefaultInventoryName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryStreamedUIConfiguration instance) => instance.DefaultInventoryName, delegate(InventoryStreamedUIConfiguration instance, in LocKey value)
			{
				instance.DefaultInventoryName = value;
			}, null);
		}

		private static IMemberAccessor CombinedNameFormatAccessor()
		{
			return new ClassMemberAccessor<InventoryStreamedUIConfiguration, LocKey>("CombinedNameFormat", "CombinedNameFormat", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryStreamedUIConfiguration).GetProperty("CombinedNameFormat", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryStreamedUIConfiguration instance) => instance.CombinedNameFormat, delegate(InventoryStreamedUIConfiguration instance, in LocKey value)
			{
				instance.CombinedNameFormat = value;
			}, null);
		}

		private static IMemberAccessor DefaultEntityNameAccessor()
		{
			return new ClassMemberAccessor<InventoryStreamedUIConfiguration, LocKey>("DefaultEntityName", "DefaultEntityName", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryStreamedUIConfiguration).GetProperty("DefaultEntityName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryStreamedUIConfiguration instance) => instance.DefaultEntityName, delegate(InventoryStreamedUIConfiguration instance, in LocKey value)
			{
				instance.DefaultEntityName = value;
			}, null);
		}

		private static IMemberAccessor DefaultDropDistanceAccessor()
		{
			return new ClassMemberAccessor<InventoryStreamedUIConfiguration, float>("DefaultDropDistance", "DefaultDropDistance", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryStreamedUIConfiguration).GetProperty("DefaultDropDistance", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(float), null, (InventoryStreamedUIConfiguration instance) => instance.DefaultDropDistance, delegate(InventoryStreamedUIConfiguration instance, in float value)
			{
				instance.DefaultDropDistance = value;
			}, null);
		}
	}

	/// <summary>
	/// Default name that will be assigned to the inventory if it does not have custom one
	/// </summary>
	public LocKey DefaultInventoryName { get; private set; }

	/// <summary>
	/// Format the names of entity and its parent.
	/// Use {Child} and {Parent} as placeholders for respective names.
	/// </summary>
	public LocKey CombinedNameFormat { get; private set; }

	/// <summary>
	/// Default name used if entity has no name
	/// </summary>
	public LocKey DefaultEntityName { get; private set; }

	/// <summary>
	/// Default distance from player item is dropped. 
	/// </summary>
	public float DefaultDropDistance { get; private set; } = 1f;

	unsafe static BuildableTypeInfo IObjectBuilderInitializable.BuildableInfo
	{
		get
		{
			return new BuildableTypeInfo
			{
				ObjectType = typeof(InventoryStreamedUIConfiguration),
				BuilderType = typeof(InventoryStreamedUIConfigurationObjectBuilder),
				InitMethod = &Init
			};
			static void Init(object instance, IObjectBuilder builder, ObjectBuilderLoadingContext? context)
			{
				Unsafe.As<InventoryStreamedUIConfiguration>(instance).Init(Unsafe.As<InventoryStreamedUIConfigurationObjectBuilder>(builder));
			}
		}
	}

	/// <inheritdoc />
	static ISerializer<InventoryStreamedUIConfiguration> ISerializable<InventoryStreamedUIConfiguration>.Serializer => Serializer.Instance;

	static IDeepCloner<InventoryStreamedUIConfiguration> IDeepCloneable<InventoryStreamedUIConfiguration>.Cloner { get; } = new Cloner();

	/// <inheritdoc />
	public new static IStreamSerializer<InventoryStreamedUIConfiguration> GetStreamSerializer(SerializerFormat format)
	{
		return format switch
		{
			SerializerFormat.Binary => ImmutableSingleton<BinaryStreamSerializer<InventoryStreamedUIConfiguration>>.Instance, 
			SerializerFormat.Json => ImmutableSingleton<JsonStreamSerializer<InventoryStreamedUIConfiguration>>.Instance, 
		};
	}

	public void Init(InventoryStreamedUIConfigurationObjectBuilder builder)
	{
		Init((ConfigurationObjectBuilder)builder);
		DefaultInventoryName = builder.DefaultInventoryName;
		CombinedNameFormat = builder.CombinedNameFormat;
		DefaultEntityName = builder.DefaultEntityName;
		DefaultDropDistance = builder.DefaultDropDistance;
	}

	public InventoryStreamedUIConfiguration()
	{
	}

	[SetsRequiredMembers]
	protected InventoryStreamedUIConfiguration(in InventoryStreamedUIConfiguration instance, ref CloningContext context)
		: base((Configuration)instance, ref context)
	{
		ref InventoryStreamedUIConfiguration reference = ref context.ClonedOrNewRef(instance, out var exists);
		if (!exists)
		{
			reference = this;
		}
		DefaultInventoryName = instance.DefaultInventoryName;
		CombinedNameFormat = instance.CombinedNameFormat;
		DefaultEntityName = instance.DefaultEntityName;
		DefaultDropDistance = instance.DefaultDropDistance;
	}

	public override InventoryStreamedUIConfiguration DeepClone()
	{
		CloningContext context = new CloningContext();
		return DeepClone(ref context);
	}

	public override InventoryStreamedUIConfiguration DeepClone(ref CloningContext context)
	{
		return CloningHelper.GetCloner<InventoryStreamedUIConfiguration>().Clone(this, ref context);
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public override AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.Json;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Binary;
using Keen.VRage.Library.Serialization.Generic;
using Keen.VRage.Library.Serialization.Json;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.ObjectBuilders;
using Keen.VRage.Library.Serialization.Serializers;
using Keen.VRage.Library.Utils;
using Keen.VRage.Library.Utils.Cloning;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

[Serialize]
[Cloneable]
[KeyType]
public class InventoryStreamedUIConfigurationObjectBuilder : ConfigurationObjectBuilder, IObjectBuilder, ISerializable<InventoryStreamedUIConfigurationObjectBuilder>, ISerializable, IDeepCloneable<InventoryStreamedUIConfigurationObjectBuilder>, IAccessible
{
	/// <inheritdoc />
	/// <inheritdoc />
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	[SerializerBundle("Game2", "2.4.0.95")]
	[SerializerBundle("VRage", "2.4.0.95")]
	[SerializerBundle("System.Runtime", "1.0.0.0")]
	public new class Serializer : ConfigurationObjectBuilder.Serializer, IJsonSerializer<InventoryStreamedUIConfigurationObjectBuilder>, IJsonSerializer, ISerializer, ISerializer<InventoryStreamedUIConfigurationObjectBuilder>, IJsonObjectSerializer, IBinarySerializer<InventoryStreamedUIConfigurationObjectBuilder>, IBinarySerializer, IGenericObjectSerializer<InventoryStreamedUIConfigurationObjectBuilder>, IGenericObjectSerializer
	{
		/// <inheritdoc />
		public new static readonly Serializer Instance = new Serializer();

		private static readonly bool IsDiskBlittable = (Instance.GetSchema(SerializationHelper.MaxVersion).Flags & SerializableTypeFlags.DiskBlittable) != 0;

		private ImmutableArray<BundleInfo> _bundles = ImmutableArray<BundleInfo>.Empty;

		private readonly IMigrations _typeMigrations = new InventoryStreamedUIConfigurationObjectBuilder_Migrations();

		public new IMigrations TypeVersionInfo => _typeMigrations;

		/// <inheritdoc />
		public new ImmutableArray<BundleInfo> Bundles
		{
			get
			{
				if (_bundles.IsEmpty)
				{
					_bundles = SerializationHelper.GetSerializerBundles(GetType());
				}
				return _bundles;
			}
		}

		public new SerializableTypeFlags Flags => TypeVersionInfo.LatestSchema.Flags;

		/// <inheritdoc />
		public new void DeserializeInto(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeInto(ref source, ref Unsafe.As<object, InventoryStreamedUIConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref JsonDeserializationContext source, ref InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.Reader.TokenType == JsonTokenType.Null)
			{
				source.Reader.Read();
				value = null;
				return;
			}
			if (value == null)
			{
				value = new InventoryStreamedUIConfigurationObjectBuilder();
			}
			if (!JsonHelper.TryMigrateType(ref source, flags, ref value))
			{
				source.AssertTokenAndRead(JsonTokenType.StartObject);
				DeserializeMembers(ref source, ref value, flags);
				source.AssertTokenAndRead(JsonTokenType.EndObject);
			}
		}

		public void DeserializeMembers(ref JsonDeserializationContext source, ref InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = new InventoryStreamedUIConfigurationObjectBuilder();
			}
			while (source.Reader.TokenType == JsonTokenType.PropertyName)
			{
				ReadOnlySpan<byte> property = source.Reader.ValueSpan;
				source.Reader.Read();
				if (!TryDeserializeMember(ref source, StableHashing.Hash(property), in property, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(InventoryStreamedUIConfigurationObjectBuilder), Encoding.UTF8.GetString(property));
					source.Reader.Skip();
					source.Reader.Read();
				}
			}
		}

		protected bool TryDeserializeMember(ref JsonDeserializationContext source, int propertyHash, in ReadOnlySpan<byte> property, InventoryStreamedUIConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (TryDeserializeMember(ref source, propertyHash, in property, (ConfigurationObjectBuilder)value, flags))
			{
				return true;
			}
			switch (propertyHash)
			{
			case 1362289930:
				if ("DefaultInventoryName"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags4 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.DefaultInventoryName, SerializerFlags.None | serializerFlags4);
					return true;
				}
				break;
			case -875166421:
				if ("CombinedNameFormat"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags2 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.CombinedNameFormat, SerializerFlags.None | serializerFlags2);
					return true;
				}
				break;
			case -665717367:
				if ("DefaultEntityName"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags3 = SerializerFlags.None;
					ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.DefaultEntityName, SerializerFlags.None | serializerFlags3);
					return true;
				}
				break;
			case -561016982:
				if ("DefaultDropDistance"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags = SerializerFlags.None;
					value.DefaultDropDistance = ImmutableSingleton<SingleSerializer>.Instance.Deserialize(ref source, SerializerFlags.None | serializerFlags);
					return true;
				}
				break;
			}
			return false;
		}

		/// <inheritdoc />
		public new InventoryStreamedUIConfigurationObjectBuilder? Deserialize(ref JsonDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			InventoryStreamedUIConfigurationObjectBuilder value = null;
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref JsonSerializationContext destination, in InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				destination.Writer.WriteNullValue();
				return;
			}
			destination.Writer.WriteStartObject();
			SerializeMembers(ref destination, in value, flags);
			destination.Writer.WriteEndObject();
		}

		/// <inheritdoc />
		public new void Serialize(ref JsonSerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, (InventoryStreamedUIConfigurationObjectBuilder)value, flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref JsonSerializationContext destination, in InventoryStreamedUIConfigurationObjectBuilder value, SerializerFlags flags)
		{
			ConfigurationObjectBuilder value2 = value;
			SerializeMembers(ref destination, in value2, flags);
			destination.Writer.WritePropertyName("DefaultInventoryName"u8);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.DefaultInventoryName, SerializerFlags.None | serializerFlags);
			destination.Writer.WritePropertyName("CombinedNameFormat"u8);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.CombinedNameFormat, SerializerFlags.None | serializerFlags2);
			destination.Writer.WritePropertyName("DefaultEntityName"u8);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.DefaultEntityName, SerializerFlags.None | serializerFlags3);
			destination.Writer.WritePropertyName("DefaultDropDistance"u8);
			SerializerFlags serializerFlags4 = SerializerFlags.None;
			ImmutableSingleton<SingleSerializer>.Instance.Serialize(ref destination, in value.DefaultDropDistance, SerializerFlags.None | serializerFlags4);
		}

		/// <inheritdoc />
		public override void SerializeMembers(ref JsonSerializationContext destination, object value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, (InventoryStreamedUIConfigurationObjectBuilder)value, flags);
		}

		/// <inheritdoc />
		public override void DeserializeMembers(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeMembers(ref source, ref Unsafe.As<object, InventoryStreamedUIConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public new void DeserializeInto(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeInto(ref source, ref Unsafe.As<object, InventoryStreamedUIConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public new void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeIntoSlow(ref source, ref Unsafe.As<object, InventoryStreamedUIConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref BinaryDeserializationContext source, ref InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.IsNull(advance: false))
			{
				source.ReadObjectPrefix();
				value = null;
				return;
			}
			if (value == null)
			{
				value = new InventoryStreamedUIConfigurationObjectBuilder();
			}
			if (BinaryHelper.ShouldUseFastPath(ref source, typeof(InventoryStreamedUIConfigurationObjectBuilder)))
			{
				source.ReadObjectPrefix();
				DeserializeFast(ref source, value, flags);
			}
			else if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		public void DeserializeMembers(ref BinaryDeserializationContext source, ref InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = new InventoryStreamedUIConfigurationObjectBuilder();
			}
			if (BinaryHelper.ShouldUseDeltaEncodedPath(ref source, out var memberCount))
			{
				DeserializeDeltaEncoded(ref source, value, memberCount, flags);
				return;
			}
			source.ReadObjectPrefix();
			if (!source.TypeModel.IsInterned(typeof(InventoryStreamedUIConfigurationObjectBuilder), out var index))
			{
				throw new SerializationException("Type InventoryStreamedUIConfigurationObjectBuilder not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			int position = source.Reader.Position;
			foreach (var (text2, memberData2) in entry.Members)
			{
				if (entry.IsDiskBlittable)
				{
					source.Reader.Position = position + memberData2.Offset;
				}
				if (!TryDeserializeMember(ref source, text2, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(InventoryStreamedUIConfigurationObjectBuilder), text2);
				}
			}
			if (entry.IsDiskBlittable)
			{
				source.Reader.Position = position + entry.Size;
			}
		}

		/// <inheritdoc />
		public void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.IsNull(advance: false))
			{
				source.ReadObjectPrefix();
				value = null;
				return;
			}
			if (value == null)
			{
				value = new InventoryStreamedUIConfigurationObjectBuilder();
			}
			if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		protected bool TryDeserializeMember(ref BinaryDeserializationContext source, string property, InventoryStreamedUIConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (TryDeserializeMember(ref source, property, (ConfigurationObjectBuilder)value, flags))
			{
				return true;
			}
			switch (property)
			{
			case "DefaultInventoryName":
			{
				SerializerFlags serializerFlags4 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.DefaultInventoryName, SerializerFlags.None | serializerFlags4);
				return true;
			}
			case "CombinedNameFormat":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.CombinedNameFormat, SerializerFlags.None | serializerFlags3);
				return true;
			}
			case "DefaultEntityName":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.DefaultEntityName, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "DefaultDropDistance":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				value.DefaultDropDistance = ImmutableSingleton<SingleSerializer>.Instance.Deserialize(ref source, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		protected void DeserializeFast(ref BinaryDeserializationContext source, InventoryStreamedUIConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (value == null)
			{
				value = new InventoryStreamedUIConfigurationObjectBuilder();
			}
			DeserializeFast(ref source, (ConfigurationObjectBuilder)value, flags);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.DefaultInventoryName, SerializerFlags.None | serializerFlags);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.CombinedNameFormat, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.DefaultEntityName, SerializerFlags.None | serializerFlags3);
			SerializerFlags serializerFlags4 = SerializerFlags.None;
			value.DefaultDropDistance = ImmutableSingleton<SingleSerializer>.Instance.Deserialize(ref source, SerializerFlags.None | serializerFlags4);
		}

		protected void DeserializeDeltaEncoded(ref BinaryDeserializationContext source, InventoryStreamedUIConfigurationObjectBuilder value, int memberCount, SerializerFlags flags)
		{
			if (!source.TypeModel.IsInterned(typeof(InventoryStreamedUIConfigurationObjectBuilder), out var index))
			{
				throw new SerializationException("Type InventoryStreamedUIConfigurationObjectBuilder not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			for (int i = 0; i < memberCount; i++)
			{
				int index2 = source.Reader.Read<ushort>();
				MemberData memberData = entry.OrderedMembers[index2];
				string name = memberData.Name;
				if ((source.PeekObjectPrefix() & ValuePrefix.DeltaEncoded) == 0)
				{
					source.DeltaEncoded = false;
					if (memberData.Type.IsValueType)
					{
						source.ReadObjectPrefix();
					}
				}
				if (!TryDeserializeMember(ref source, name, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(InventoryStreamedUIConfigurationObjectBuilder), name);
				}
				source.DeltaEncoded = true;
			}
		}

		/// <inheritdoc />
		public new InventoryStreamedUIConfigurationObjectBuilder? Deserialize(ref BinaryDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			InventoryStreamedUIConfigurationObjectBuilder value = null;
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref BinarySerializationContext destination, in InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				destination.WriteIsNull(isNull: true);
				return;
			}
			destination.WritePrefix(ValuePrefix.Value);
			SerializeMembers(ref destination, in value, flags);
		}

		/// <inheritdoc />
		public new void Serialize(ref BinarySerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, (InventoryStreamedUIConfigurationObjectBuilder)value, flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref BinarySerializationContext destination, in InventoryStreamedUIConfigurationObjectBuilder value, SerializerFlags flags)
		{
			ConfigurationObjectBuilder value2 = value;
			SerializeMembers(ref destination, in value2, flags);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.DefaultInventoryName, SerializerFlags.None | serializerFlags);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.CombinedNameFormat, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<LocStringSerializer>.Instance.Serialize(ref destination, in value.DefaultEntityName, SerializerFlags.None | serializerFlags3);
			SerializerFlags serializerFlags4 = SerializerFlags.None;
			ImmutableSingleton<SingleSerializer>.Instance.Serialize(ref destination, in value.DefaultDropDistance, SerializerFlags.None | serializerFlags4);
		}

		/// <inheritdoc />
		public new void DeserializeInto(ref GenericObjectDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeInto(ref source, ref Unsafe.As<object, InventoryStreamedUIConfigurationObjectBuilder>(ref value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref GenericObjectDeserializationContext source, ref InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (source.Object == null)
			{
				value = null;
				return;
			}
			if (value == null)
			{
				value = new InventoryStreamedUIConfigurationObjectBuilder();
			}
			if (source.Object is InventoryStreamedUIConfigurationObjectBuilder inventoryStreamedUIConfigurationObjectBuilder)
			{
				value = inventoryStreamedUIConfigurationObjectBuilder;
			}
			else
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		public void DeserializeMembers(ref GenericObjectDeserializationContext source, ref InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = new InventoryStreamedUIConfigurationObjectBuilder();
			}
			foreach (var (text2, obj2) in source.GenericObject)
			{
				GenericObjectDeserializationContext source2 = new GenericObjectDeserializationContext(source.Context, obj2, source.SourceFormat);
				if (!TryDeserializeMember(ref source2, text2, value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(InventoryStreamedUIConfigurationObjectBuilder), text2);
				}
			}
		}

		protected bool TryDeserializeMember(ref GenericObjectDeserializationContext source, string property, InventoryStreamedUIConfigurationObjectBuilder value, SerializerFlags flags)
		{
			if (TryDeserializeMember(ref source, property, (ConfigurationObjectBuilder)value, flags))
			{
				return true;
			}
			switch (property)
			{
			case "DefaultInventoryName":
			{
				SerializerFlags serializerFlags4 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.DefaultInventoryName, SerializerFlags.None | serializerFlags4);
				return true;
			}
			case "CombinedNameFormat":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.CombinedNameFormat, SerializerFlags.None | serializerFlags3);
				return true;
			}
			case "DefaultEntityName":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<LocStringSerializer>.Instance.DeserializeInto(ref source, ref value.DefaultEntityName, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "DefaultDropDistance":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				value.DefaultDropDistance = ImmutableSingleton<SingleSerializer>.Instance.Deserialize(ref source, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		/// <inheritdoc />
		public new InventoryStreamedUIConfigurationObjectBuilder? Deserialize(ref GenericObjectDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			InventoryStreamedUIConfigurationObjectBuilder value = null;
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		public new ImmutableArray<MigrationInfo> GetMigrations()
		{
			return _typeMigrations.GetMigrations();
		}

		public new SerializationSchema GetSchema(Version version)
		{
			return _typeMigrations.GetSchema(version);
		}

		public new bool TryGetDeltaSchema(Version version, out SerializationSchema? schema)
		{
			schema = null;
			return false;
		}

		void IJsonSerializer<InventoryStreamedUIConfigurationObjectBuilder>.Serialize(ref JsonSerializationContext destination, in InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in value, flags);
		}

		void IBinarySerializer<InventoryStreamedUIConfigurationObjectBuilder>.Serialize(ref BinarySerializationContext destination, in InventoryStreamedUIConfigurationObjectBuilder? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in value, flags);
		}
	}

	private class Cloner : IDeepCloner<InventoryStreamedUIConfigurationObjectBuilder>, IDeepCloner
	{
		InventoryStreamedUIConfigurationObjectBuilder IDeepCloner<InventoryStreamedUIConfigurationObjectBuilder>.Clone(InventoryStreamedUIConfigurationObjectBuilder value, ref CloningContext context)
		{
			ref InventoryStreamedUIConfigurationObjectBuilder reference = ref context.ClonedOrNullRef(value);
			if (!Unsafe.IsNullRef(in reference))
			{
				return reference;
			}
			return new InventoryStreamedUIConfigurationObjectBuilder(in value, ref context);
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public new class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 6;

		static TypeInfoHolder()
		{
			int num = 2;
			RawAccessors = new(string, IMemberAccessor)[4]
			{
				("DefaultInventoryName", DefaultInventoryNameAccessor()),
				("CombinedNameFormat", CombinedNameFormatAccessor()),
				("DefaultEntityName", DefaultEntityNameAccessor()),
				("DefaultDropDistance", DefaultDropDistanceAccessor())
			};
			string documentation = null;
			MemberInfo[] array = new MemberInfo[4]
			{
				typeof(InventoryStreamedUIConfigurationObjectBuilder).GetField("DefaultInventoryName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryStreamedUIConfigurationObjectBuilder).GetField("CombinedNameFormat", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryStreamedUIConfigurationObjectBuilder).GetField("DefaultEntityName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(InventoryStreamedUIConfigurationObjectBuilder).GetField("DefaultDropDistance", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					"Default name that will be assigned to the inventory if it does not have custom one"
				},
				{
					array[1],
					"Format the names of entity and its parent. Use {Child} and {Parent} as placeholders for respective names."
				},
				{
					array[2],
					"Default name used if entity has no name"
				},
				{
					array[3],
					"Default distance from player item is dropped."
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				},
				{
					array[3],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				},
				{
					array[3],
					num + 3
				}
			});
			RawAccessors = ConfigurationObjectBuilder.TypeInfoHolder.RawAccessors.Concat<(string, IMemberAccessor)>(RawAccessors).ToArray();
			builder.AddRange(ConfigurationObjectBuilder.TypeInfoHolder.Value.MembersDocumentation);
			builder3.AddRange(ConfigurationObjectBuilder.TypeInfoHolder.Value.MembersDeclarationOrder);
			builder2.AddRange(ConfigurationObjectBuilder.TypeInfoHolder.Value.MembersAttributes);
			Value = new AccessibleTypeInfo(typeof(InventoryStreamedUIConfigurationObjectBuilder), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor DefaultInventoryNameAccessor()
		{
			return new ClassMemberAccessor<InventoryStreamedUIConfigurationObjectBuilder, LocKey>("DefaultInventoryName", "DefaultInventoryName", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryStreamedUIConfigurationObjectBuilder).GetField("DefaultInventoryName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryStreamedUIConfigurationObjectBuilder instance) => instance.DefaultInventoryName, delegate(InventoryStreamedUIConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.DefaultInventoryName = value;
			}, (InventoryStreamedUIConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.DefaultInventoryName));
		}

		private static IMemberAccessor CombinedNameFormatAccessor()
		{
			return new ClassMemberAccessor<InventoryStreamedUIConfigurationObjectBuilder, LocKey>("CombinedNameFormat", "CombinedNameFormat", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryStreamedUIConfigurationObjectBuilder).GetField("CombinedNameFormat", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryStreamedUIConfigurationObjectBuilder instance) => instance.CombinedNameFormat, delegate(InventoryStreamedUIConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.CombinedNameFormat = value;
			}, (InventoryStreamedUIConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.CombinedNameFormat));
		}

		private static IMemberAccessor DefaultEntityNameAccessor()
		{
			return new ClassMemberAccessor<InventoryStreamedUIConfigurationObjectBuilder, LocKey>("DefaultEntityName", "DefaultEntityName", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryStreamedUIConfigurationObjectBuilder).GetField("DefaultEntityName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryStreamedUIConfigurationObjectBuilder instance) => instance.DefaultEntityName, delegate(InventoryStreamedUIConfigurationObjectBuilder instance, in LocKey value)
			{
				instance.DefaultEntityName = value;
			}, (InventoryStreamedUIConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.DefaultEntityName));
		}

		private static IMemberAccessor DefaultDropDistanceAccessor()
		{
			return new ClassMemberAccessor<InventoryStreamedUIConfigurationObjectBuilder, float>("DefaultDropDistance", "DefaultDropDistance", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryStreamedUIConfigurationObjectBuilder).GetField("DefaultDropDistance", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(float), null, (InventoryStreamedUIConfigurationObjectBuilder instance) => instance.DefaultDropDistance, delegate(InventoryStreamedUIConfigurationObjectBuilder instance, in float value)
			{
				instance.DefaultDropDistance = value;
			}, (InventoryStreamedUIConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.DefaultDropDistance));
		}
	}

	/// <summary>
	/// Default name that will be assigned to the inventory if it does not have custom one
	/// </summary>
	public LocKey DefaultInventoryName;

	/// <summary>
	/// Format the names of entity and its parent.
	/// Use {Child} and {Parent} as placeholders for respective names.
	/// </summary>
	public LocKey CombinedNameFormat;

	/// <summary>
	/// Default name used if entity has no name
	/// </summary>
	public LocKey DefaultEntityName;

	/// <summary>
	/// Default distance from player item is dropped. 
	/// </summary>
	public float DefaultDropDistance;

	[RemoveMigration("2.0.1.5822", null, SerializerFlags.None)]
	private static UnknownType AccessedCombinedNameFormat
	{
		get
		{
			throw new UnreachableException();
		}
	}

	static BuildableTypeInfo IObjectBuilder.BuildableInfo => ObjectBuilder.GetBuildableInfo<InventoryStreamedUIConfiguration>();

	/// <inheritdoc />
	static ISerializer<InventoryStreamedUIConfigurationObjectBuilder> ISerializable<InventoryStreamedUIConfigurationObjectBuilder>.Serializer => Serializer.Instance;

	static IDeepCloner<InventoryStreamedUIConfigurationObjectBuilder> IDeepCloneable<InventoryStreamedUIConfigurationObjectBuilder>.Cloner { get; } = new Cloner();

	public InventoryStreamedUIConfigurationObjectBuilder()
	{
		DefaultInventoryName = default(LocKey);
		CombinedNameFormat = default(LocKey);
		DefaultEntityName = default(LocKey);
		DefaultDropDistance = 1f;
	}

	/// <inheritdoc />
	public new static IStreamSerializer<InventoryStreamedUIConfigurationObjectBuilder> GetStreamSerializer(SerializerFormat format)
	{
		return format switch
		{
			SerializerFormat.Binary => ImmutableSingleton<BinaryStreamSerializer<InventoryStreamedUIConfigurationObjectBuilder>>.Instance, 
			SerializerFormat.Json => ImmutableSingleton<JsonStreamSerializer<InventoryStreamedUIConfigurationObjectBuilder>>.Instance, 
		};
	}

	[SetsRequiredMembers]
	protected InventoryStreamedUIConfigurationObjectBuilder(in InventoryStreamedUIConfigurationObjectBuilder instance, ref CloningContext context)
		: base((ConfigurationObjectBuilder)instance, ref context)
	{
		ref InventoryStreamedUIConfigurationObjectBuilder reference = ref context.ClonedOrNewRef(instance, out var exists);
		if (!exists)
		{
			reference = this;
		}
		DefaultInventoryName = instance.DefaultInventoryName;
		CombinedNameFormat = instance.CombinedNameFormat;
		DefaultEntityName = instance.DefaultEntityName;
		DefaultDropDistance = instance.DefaultDropDistance;
	}

	public override InventoryStreamedUIConfigurationObjectBuilder DeepClone()
	{
		CloningContext context = new CloningContext();
		return DeepClone(ref context);
	}

	public override InventoryStreamedUIConfigurationObjectBuilder DeepClone(ref CloningContext context)
	{
		return CloningHelper.GetCloner<InventoryStreamedUIConfigurationObjectBuilder>().Clone(this, ref context);
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public override AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Immutable;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.Migrations.Internal;
using Keen.VRage.Library.Utils;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

[Migrations(typeof(InventoryStreamedUIConfigurationObjectBuilder))]
public class InventoryStreamedUIConfigurationObjectBuilder_Migrations : IMigrations
{
	private readonly ImmutableArray<MigrationInfo> _migrationInfos;

	private static readonly ImmutableArray<LayoutInfo> VersionLayouts;

	private static readonly ImmutableArray<VersionLayoutDelta> VersionLayoutDeltas;

	private static LayoutInfo DiskBlittableLayout;

	private static TypeSerializationSchemas _schemas;

	[Version(0)]
	private static readonly TypeStructureDelta Version_0_0_0_0_Delta;

	[Version("2.0.1.5822")]
	private static readonly TypeStructureDelta Version_2_0_1_5822_Delta;

	public ref readonly SerializationSchema LatestSchema => ref _schemas.GetLatestSchema();

	public InventoryStreamedUIConfigurationObjectBuilder_Migrations()
	{
		ImmutableArray<MigrationInfo>.Builder builder = ImmutableArray.CreateBuilder<MigrationInfo>(1);
		builder.Add(new MigrationInfo(new Version(2, 0, 1, 5822), Migrate_2_0_1_5822));
		_migrationInfos = MigrationsHelper.CombineMigrations<ConfigurationObjectBuilder>(builder);
	}

	static InventoryStreamedUIConfigurationObjectBuilder_Migrations()
	{
		VersionLayoutDeltas = ImmutableArray<VersionLayoutDelta>.Empty;
		DiskBlittableLayout = default(LayoutInfo);
		Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("AccessedCombinedNameFormat", typeof(UnknownType))).Add(new MemberData("DefaultInventoryName", typeof(LocKey))).Add(new MemberData("CombinedNameFormat", typeof(LocKey)))
			.Add(new MemberData("DefaultEntityName", typeof(LocKey)))
			.Add(new MemberData("DefaultDropDistance", typeof(float)));
		Version_2_0_1_5822_Delta = TypeStructureDelta.Static.Remove("AccessedCombinedNameFormat");
		ImmutableArray<VersionLayoutDelta> baseLayout = MigrationsHelper.GetBaseLayout<ConfigurationObjectBuilder>();
		ImmutableArray<VersionLayoutDelta>.Builder builder = ImmutableArray.CreateBuilder<VersionLayoutDelta>(2 + baseLayout.Length);
		builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
		builder.Add(new VersionLayoutDelta(new Version(2, 0, 1, 5822), Version_2_0_1_5822_Delta));
		VersionLayoutDeltas = MigrationsHelper.CombineLayouts(baseLayout, builder);
		VersionLayouts = MigrationsHelper.ConstructFinalVersionLayouts(typeof(InventoryStreamedUIConfigurationObjectBuilder), VersionLayoutDeltas);
		SerializableTypeFlags flags = SerializableTypeFlags.KeyType;
		_schemas = new TypeSerializationSchemas(typeof(InventoryStreamedUIConfigurationObjectBuilder), null, VersionLayouts, flags, DiskBlittableLayout);
	}

	public ImmutableArray<MigrationInfo> GetMigrations()
	{
		return _migrationInfos;
	}

	public ImmutableArray<VersionLayoutDelta> GetLayoutDeltas()
	{
		return VersionLayoutDeltas;
	}

	public SerializationSchema GetSchema(Version version)
	{
		return _schemas.GetSchema(version);
	}

	[Migration("2.0.1.5822")]
	public static void Migrate_2_0_1_5822(ref dynamic instance)
	{
		if (instance.ContainsKey("AccessedCombinedNameFormat"))
		{
			instance.Remove("AccessedCombinedNameFormat");
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryValidators
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using Keen.Game2.Simulation.RuntimeSystems.Validators;
using Keen.Game2.Simulation.WorldObjects.CubeBlocks;
using Keen.Game2.Simulation.WorldObjects.CubeGrids.ResourceDistribution.Conveyors;
using Keen.VRage.Multiplayer;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Validators for Inventory methods.
/// </summary>
public static class InventoryValidators
{
	public static void ValidateItemDrop(this ReplicationEventContext eventContext, InteractionInfo interactionInfo)
	{
		eventContext.ValidateInteractedEntities(interactionInfo.InteractedEntity);
		if (interactionInfo.ConveyorSubgraphId.HasValue && (((!((interactionInfo.InteractedEntity.TryGet<CubeBlockComponent>()?.Grid.Entity.TryGet<ConveyorSystemComponent>())?.HasNodeWithSubgraphId(interactionInfo.InteractedEntity.DEntity, interactionInfo.ConveyorSubgraphId.Value))) ?? true) ? true : false))
		{
			eventContext.Throw();
		}
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferData
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
#define FEATURE_ASSERTIONS
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.Json;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.Library.Mathematics;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Binary;
using Keen.VRage.Library.Serialization.Generic;
using Keen.VRage.Library.Serialization.Json;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Utils;
using Keen.VRage.Library.Utils.Cloning;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Data representing transferred item and its total amount after transfer in inventory
/// </summary>
[Serialize]
[Cloneable]
public struct ItemTransferData : ISerializable<ItemTransferData>, ISerializable, IDeepCloneable<ItemTransferData>, IAccessible
{
	/// <inheritdoc />
	/// <inheritdoc />
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	[SerializerBundle("Game2", "2.4.0.95")]
	[SerializerBundle("VRage", "2.4.0.95")]
	[SerializerBundle("System.Runtime", "1.0.0.0")]
	public class Serializer : IJsonSerializer<ItemTransferData>, IJsonSerializer, ISerializer, ISerializer<ItemTransferData>, IJsonObjectSerializer, IBinarySerializer<ItemTransferData>, IBinarySerializer, IGenericObjectSerializer<ItemTransferData>, IGenericObjectSerializer
	{
		/// <inheritdoc />
		public static readonly Serializer Instance = new Serializer();

		private static readonly bool IsDiskBlittable = (Instance.GetSchema(SerializationHelper.MaxVersion).Flags & SerializableTypeFlags.DiskBlittable) != 0;

		private ImmutableArray<BundleInfo> _bundles = ImmutableArray<BundleInfo>.Empty;

		private readonly IMigrations _typeMigrations = new ItemTransferData_Migrations();

		public IMigrations TypeVersionInfo => _typeMigrations;

		/// <inheritdoc />
		public ImmutableArray<BundleInfo> Bundles
		{
			get
			{
				if (_bundles.IsEmpty)
				{
					_bundles = SerializationHelper.GetSerializerBundles(GetType());
				}
				return _bundles;
			}
		}

		public SerializableTypeFlags Flags => TypeVersionInfo.LatestSchema.Flags;

		/// <inheritdoc />
		public void DeserializeInto(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = default(ItemTransferData);
			}
			DeserializeInto(ref source, ref Unsafe.Unbox<ItemTransferData>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref JsonDeserializationContext source, ref ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			if (!JsonHelper.TryMigrateType(ref source, flags, ref value))
			{
				source.AssertTokenAndRead(JsonTokenType.StartObject);
				DeserializeMembers(ref source, ref value, flags);
				source.AssertTokenAndRead(JsonTokenType.EndObject);
			}
		}

		public void DeserializeMembers(ref JsonDeserializationContext source, ref ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			while (source.Reader.TokenType == JsonTokenType.PropertyName)
			{
				ReadOnlySpan<byte> property = source.Reader.ValueSpan;
				source.Reader.Read();
				if (!TryDeserializeMember(ref source, StableHashing.Hash(property), in property, ref value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(ItemTransferData), Encoding.UTF8.GetString(property));
					source.Reader.Skip();
					source.Reader.Read();
				}
			}
		}

		protected bool TryDeserializeMember(ref JsonDeserializationContext source, int propertyHash, in ReadOnlySpan<byte> property, ref ItemTransferData value, SerializerFlags flags)
		{
			switch (propertyHash)
			{
			case -806705308:
				if ("Item"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags2 = SerializerFlags.None;
					if (source.Reader.TokenType == JsonTokenType.Null)
					{
						value.Item = null;
						source.Reader.Read();
					}
					else if (JsonHelper.IsNameSerialized(ref source))
					{
						((IJsonSerializer<ItemDefinition>)ItemDefinition.Serializer.Instance.GetNameSerializer()).DeserializeInto(ref source, ref value.Item, SerializerFlags.None | serializerFlags2);
					}
					else
					{
						ItemDefinition.Serializer.Instance.DeserializeInto(ref source, ref value.Item, SerializerFlags.None | serializerFlags2);
					}
					return true;
				}
				break;
			case 1232657151:
				if ("TransferredAmount"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags3 = SerializerFlags.None;
					ImmutableSingleton<FixedPointSerializer>.Instance.DeserializeInto(ref source, ref value.TransferredAmount, SerializerFlags.None | serializerFlags3);
					return true;
				}
				break;
			case -1202711352:
				if ("TotalAmount"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags = SerializerFlags.None;
					ImmutableSingleton<FixedPointSerializer>.Instance.DeserializeInto(ref source, ref value.TotalAmount, SerializerFlags.None | serializerFlags);
					return true;
				}
				break;
			}
			return false;
		}

		/// <inheritdoc />
		public ItemTransferData Deserialize(ref JsonDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			ItemTransferData value = default(ItemTransferData);
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref JsonSerializationContext destination, in ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			destination.Writer.WriteStartObject();
			SerializeMembers(ref destination, in value, flags);
			destination.Writer.WriteEndObject();
		}

		/// <inheritdoc />
		public void Serialize(ref JsonSerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in Unsafe.Unbox<ItemTransferData>(value), flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref JsonSerializationContext destination, in ItemTransferData value, SerializerFlags flags)
		{
			destination.Writer.WritePropertyName("Item"u8);
			SerializerFlags serializerFlags = SerializerFlags.None;
			ItemDefinition value2 = value.Item;
			if (value2 == null)
			{
				destination.Writer.WriteNullValue();
			}
			else if (ItemDefinition.Serializer.Instance.ShouldSerializeAsName(destination.Context, in value2))
			{
				((IJsonSerializer<ItemDefinition>)ItemDefinition.Serializer.Instance.GetNameSerializer()).Serialize(ref destination, in value2, SerializerFlags.None | serializerFlags);
			}
			else
			{
				ItemDefinition.Serializer.Instance.Serialize(ref destination, in value2, SerializerFlags.None | serializerFlags);
			}
			destination.Writer.WritePropertyName("TransferredAmount"u8);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<FixedPointSerializer>.Instance.Serialize(ref destination, in value.TransferredAmount, SerializerFlags.None | serializerFlags2);
			destination.Writer.WritePropertyName("TotalAmount"u8);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<FixedPointSerializer>.Instance.Serialize(ref destination, in value.TotalAmount, SerializerFlags.None | serializerFlags3);
		}

		/// <inheritdoc />
		public virtual void SerializeMembers(ref JsonSerializationContext destination, object value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, in Unsafe.Unbox<ItemTransferData>(value), flags);
		}

		/// <inheritdoc />
		public virtual void DeserializeMembers(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = default(ItemTransferData);
			}
			DeserializeMembers(ref source, ref Unsafe.Unbox<ItemTransferData>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = default(ItemTransferData);
			}
			DeserializeInto(ref source, ref Unsafe.Unbox<ItemTransferData>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Assert.True(value != null, "Struct serializer should always be provided a non-null boxed instance.", "value is { }", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Simulation\\obj\\Release\\VRage.Library.Generator\\Keen.VRage.Library.Generator.Generation.MainIncrementalGenerator\\ItemTransferData_-1556879704.binary.g.cs", 61);
			DeserializeIntoSlow(ref source, ref Unsafe.Unbox<ItemTransferData>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref BinaryDeserializationContext source, ref ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			if (BinaryHelper.ShouldUseFastPath(ref source, typeof(ItemTransferData)))
			{
				DeserializeFast(ref source, ref value, flags);
			}
			else if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		public void DeserializeMembers(ref BinaryDeserializationContext source, ref ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			if (BinaryHelper.ShouldUseDeltaEncodedPath(ref source, out var memberCount))
			{
				DeserializeDeltaEncoded(ref source, ref value, memberCount, flags);
				return;
			}
			if (!source.TypeModel.IsInterned(typeof(ItemTransferData), out var index))
			{
				throw new SerializationException("Type ItemTransferData not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			int position = source.Reader.Position;
			foreach (var (text2, memberData2) in entry.Members)
			{
				if (entry.IsDiskBlittable)
				{
					source.Reader.Position = position + memberData2.Offset;
				}
				if (!TryDeserializeMember(ref source, text2, ref value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(ItemTransferData), text2);
				}
			}
			if (entry.IsDiskBlittable)
			{
				source.Reader.Position = position + entry.Size;
			}
		}

		/// <inheritdoc />
		public void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		protected bool TryDeserializeMember(ref BinaryDeserializationContext source, string property, ref ItemTransferData value, SerializerFlags flags)
		{
			switch (property)
			{
			case "Item":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				if (source.IsNull(advance: false))
				{
					value.Item = null;
					source.ReadObjectPrefix();
				}
				else if (BinaryHelper.IsNameSerialized(ref source))
				{
					((IBinarySerializer<ItemDefinition>)ItemDefinition.Serializer.Instance.GetNameSerializer()).DeserializeIntoSlow(ref source, ref value.Item, SerializerFlags.None | serializerFlags3);
				}
				else
				{
					ItemDefinition.Serializer.Instance.DeserializeIntoSlow(ref source, ref value.Item, SerializerFlags.None | serializerFlags3);
				}
				return true;
			}
			case "TransferredAmount":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<FixedPointSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.TransferredAmount, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "TotalAmount":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				ImmutableSingleton<FixedPointSerializer>.Instance.DeserializeIntoSlow(ref source, ref value.TotalAmount, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		protected void DeserializeFast(ref BinaryDeserializationContext source, ref ItemTransferData value, SerializerFlags flags)
		{
			SerializerFlags serializerFlags = SerializerFlags.None;
			if (source.IsNull(advance: false))
			{
				value.Item = null;
				source.ReadObjectPrefix();
			}
			else if (BinaryHelper.IsNameSerialized(ref source))
			{
				((IBinarySerializer<ItemDefinition>)ItemDefinition.Serializer.Instance.GetNameSerializer()).DeserializeInto(ref source, ref value.Item, SerializerFlags.None | serializerFlags);
			}
			else
			{
				ItemDefinition.Serializer.Instance.DeserializeInto(ref source, ref value.Item, SerializerFlags.None | serializerFlags);
			}
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<FixedPointSerializer>.Instance.DeserializeInto(ref source, ref value.TransferredAmount, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<FixedPointSerializer>.Instance.DeserializeInto(ref source, ref value.TotalAmount, SerializerFlags.None | serializerFlags3);
		}

		protected void DeserializeDeltaEncoded(ref BinaryDeserializationContext source, ref ItemTransferData value, int memberCount, SerializerFlags flags)
		{
			if (!source.TypeModel.IsInterned(typeof(ItemTransferData), out var index))
			{
				throw new SerializationException("Type ItemTransferData not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			for (int i = 0; i < memberCount; i++)
			{
				int index2 = source.Reader.Read<ushort>();
				MemberData memberData = entry.OrderedMembers[index2];
				string name = memberData.Name;
				if ((source.PeekObjectPrefix() & ValuePrefix.DeltaEncoded) == 0)
				{
					source.DeltaEncoded = false;
					if (memberData.Type.IsValueType)
					{
						source.ReadObjectPrefix();
					}
				}
				if (!TryDeserializeMember(ref source, name, ref value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(ItemTransferData), name);
				}
				source.DeltaEncoded = true;
			}
		}

		/// <inheritdoc />
		public ItemTransferData Deserialize(ref BinaryDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			ItemTransferData value = default(ItemTransferData);
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref BinarySerializationContext destination, in ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, in value, flags);
		}

		/// <inheritdoc />
		public void Serialize(ref BinarySerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, in Unsafe.Unbox<ItemTransferData>(value), flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref BinarySerializationContext destination, in ItemTransferData value, SerializerFlags flags)
		{
			SerializerFlags serializerFlags = SerializerFlags.None;
			ItemDefinition value2 = value.Item;
			if (value2 == null)
			{
				destination.WriteIsNull(isNull: true);
			}
			else if (ItemDefinition.Serializer.Instance.ShouldSerializeAsName(destination.Context, in value2))
			{
				destination.WritePrefix(ValuePrefix.Name);
				((IBinarySerializer<ItemDefinition>)ItemDefinition.Serializer.Instance.GetNameSerializer()).Serialize(ref destination, in value2, SerializerFlags.None | serializerFlags);
			}
			else
			{
				ItemDefinition.Serializer.Instance.Serialize(ref destination, in value2, SerializerFlags.None | serializerFlags);
			}
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<FixedPointSerializer>.Instance.Serialize(ref destination, in value.TransferredAmount, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<FixedPointSerializer>.Instance.Serialize(ref destination, in value.TotalAmount, SerializerFlags.None | serializerFlags3);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref GenericObjectDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = default(ItemTransferData);
			}
			DeserializeMembers(ref source, ref Unsafe.Unbox<ItemTransferData>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref GenericObjectDeserializationContext source, ref ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeMembers(ref source, ref value, flags);
		}

		public void DeserializeMembers(ref GenericObjectDeserializationContext source, ref ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			foreach (var (text2, obj2) in source.GenericObject)
			{
				GenericObjectDeserializationContext source2 = new GenericObjectDeserializationContext(source.Context, obj2, source.SourceFormat);
				if (!TryDeserializeMember(ref source2, text2, ref value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(ItemTransferData), text2);
				}
			}
		}

		protected bool TryDeserializeMember(ref GenericObjectDeserializationContext source, string property, ref ItemTransferData value, SerializerFlags flags)
		{
			switch (property)
			{
			case "Item":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				if (source.Object == null)
				{
					value.Item = null;
				}
				else if (GenericObjectHelper.IsNameSerialized(ref source))
				{
					((IGenericObjectSerializer<ItemDefinition>)ItemDefinition.Serializer.Instance.GetNameSerializer()).DeserializeInto(ref source, ref value.Item, SerializerFlags.None | serializerFlags3);
				}
				else
				{
					ItemDefinition.Serializer.Instance.DeserializeInto(ref source, ref value.Item, SerializerFlags.None | serializerFlags3);
				}
				return true;
			}
			case "TransferredAmount":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<FixedPointSerializer>.Instance.DeserializeInto(ref source, ref value.TransferredAmount, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "TotalAmount":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				ImmutableSingleton<FixedPointSerializer>.Instance.DeserializeInto(ref source, ref value.TotalAmount, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		/// <inheritdoc />
		public ItemTransferData Deserialize(ref GenericObjectDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			ItemTransferData value = default(ItemTransferData);
			DeserializeMembers(ref source, ref value, flags);
			return value;
		}

		public ImmutableArray<MigrationInfo> GetMigrations()
		{
			return _typeMigrations.GetMigrations();
		}

		public SerializationSchema GetSchema(Version version)
		{
			return _typeMigrations.GetSchema(version);
		}

		public bool TryGetDeltaSchema(Version version, out SerializationSchema? schema)
		{
			schema = null;
			return false;
		}

		void IJsonSerializer<ItemTransferData>.Serialize(ref JsonSerializationContext destination, in ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in value, flags);
		}

		void IBinarySerializer<ItemTransferData>.Serialize(ref BinarySerializationContext destination, in ItemTransferData value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, in value, flags);
		}
	}

	private class Cloner : IDeepCloner<ItemTransferData>, IDeepCloner
	{
		ItemTransferData IDeepCloner<ItemTransferData>.Clone(ItemTransferData value, ref CloningContext context)
		{
			return new ItemTransferData(in value, ref context);
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 3;

		static TypeInfoHolder()
		{
			int num = 0;
			RawAccessors = new(string, IMemberAccessor)[3]
			{
				("Item", ItemAccessor()),
				("TransferredAmount", TransferredAmountAccessor()),
				("TotalAmount", TotalAmountAccessor())
			};
			string documentation = "Data representing transferred item and its total amount after transfer in inventory";
			MemberInfo[] array = new MemberInfo[3]
			{
				typeof(ItemTransferData).GetField("Item", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(ItemTransferData).GetField("TransferredAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(ItemTransferData).GetField("TotalAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					null
				},
				{
					array[1],
					null
				},
				{
					array[2],
					null
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				}
			});
			Value = new AccessibleTypeInfo(typeof(ItemTransferData), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor ItemAccessor()
		{
			return new StructMemberAccessor<ItemTransferData, ItemDefinition>("Item", "Item", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(ItemTransferData).GetField("Item", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ItemDefinition), () => ItemDefinition.TypeInfoHolder.Value, delegate(in ItemTransferData instance)
			{
				return instance.Item;
			}, delegate(ref ItemTransferData instance, in ItemDefinition value)
			{
				instance.Item = value;
			}, delegate(in ItemTransferData instance)
			{
				return ref Unsafe.AsRef(in instance.Item);
			});
		}

		private static IMemberAccessor TransferredAmountAccessor()
		{
			return new StructMemberAccessor<ItemTransferData, FixedPoint>("TransferredAmount", "TransferredAmount", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(ItemTransferData).GetField("TransferredAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, delegate(in ItemTransferData instance)
			{
				return instance.TransferredAmount;
			}, delegate(ref ItemTransferData instance, in FixedPoint value)
			{
				instance.TransferredAmount = value;
			}, delegate(in ItemTransferData instance)
			{
				return ref Unsafe.AsRef(in instance.TransferredAmount);
			});
		}

		private static IMemberAccessor TotalAmountAccessor()
		{
			return new StructMemberAccessor<ItemTransferData, FixedPoint>("TotalAmount", "TotalAmount", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(ItemTransferData).GetField("TotalAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, delegate(in ItemTransferData instance)
			{
				return instance.TotalAmount;
			}, delegate(ref ItemTransferData instance, in FixedPoint value)
			{
				instance.TotalAmount = value;
			}, delegate(in ItemTransferData instance)
			{
				return ref Unsafe.AsRef(in instance.TotalAmount);
			});
		}
	}

	public ItemDefinition Item;

	public FixedPoint TransferredAmount;

	public FixedPoint TotalAmount;

	/// <inheritdoc />
	static ISerializer<ItemTransferData> ISerializable<ItemTransferData>.Serializer => Serializer.Instance;

	static IDeepCloner<ItemTransferData> IDeepCloneable<ItemTransferData>.Cloner { get; } = new Cloner();

	public ItemTransferData(ItemDefinition item, FixedPoint transferred, FixedPoint total)
	{
		Item = item;
		TransferredAmount = transferred;
		TotalAmount = total;
	}

	/// <inheritdoc />
	public static IStreamSerializer<ItemTransferData> GetStreamSerializer(SerializerFormat format)
	{
		return format switch
		{
			SerializerFormat.Binary => ImmutableSingleton<BinaryStreamSerializer<ItemTransferData>>.Instance, 
			SerializerFormat.Json => ImmutableSingleton<JsonStreamSerializer<ItemTransferData>>.Instance, 
		};
	}

	[SetsRequiredMembers]
	private ItemTransferData(in ItemTransferData instance, ref CloningContext context)
	{
		Item = null;
		if (instance.Item != null)
		{
			Item = (ItemDefinition)CloningHelper.ClonePolymorphic(instance.Item, ref context);
		}
		TransferredAmount = instance.TransferredAmount;
		TotalAmount = instance.TotalAmount;
	}

	public ItemTransferData DeepClone()
	{
		CloningContext context = new CloningContext();
		return DeepClone(ref context);
	}

	public ItemTransferData DeepClone(ref CloningContext context)
	{
		return CloningHelper.GetCloner<ItemTransferData>().Clone(this, ref context);
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferData_Migrations
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Immutable;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Library.Mathematics;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.Migrations.Internal;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

[Migrations(typeof(ItemTransferData))]
public struct ItemTransferData_Migrations : IMigrations
{
	private readonly ImmutableArray<MigrationInfo> _migrationInfos;

	private static readonly ImmutableArray<LayoutInfo> VersionLayouts;

	private static readonly ImmutableArray<VersionLayoutDelta> VersionLayoutDeltas;

	private static LayoutInfo DiskBlittableLayout;

	private static TypeSerializationSchemas _schemas;

	[Version(0)]
	private static readonly TypeStructureDelta Version_0_0_0_0_Delta;

	public ref readonly SerializationSchema LatestSchema => ref _schemas.GetLatestSchema();

	public ItemTransferData_Migrations()
	{
		ImmutableArray<MigrationInfo>.Builder builder = ImmutableArray.CreateBuilder<MigrationInfo>(0);
		_migrationInfos = builder.MoveToImmutable();
	}

	static ItemTransferData_Migrations()
	{
		VersionLayoutDeltas = ImmutableArray<VersionLayoutDelta>.Empty;
		DiskBlittableLayout = default(LayoutInfo);
		Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("Item", typeof(ItemDefinition))).Add(new MemberData("TransferredAmount", typeof(FixedPoint))).Add(new MemberData("TotalAmount", typeof(FixedPoint)));
		ImmutableArray<VersionLayoutDelta> empty = ImmutableArray<VersionLayoutDelta>.Empty;
		ImmutableArray<VersionLayoutDelta>.Builder builder = ImmutableArray.CreateBuilder<VersionLayoutDelta>(1 + empty.Length);
		builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
		VersionLayoutDeltas = MigrationsHelper.CombineLayouts(empty, builder);
		VersionLayouts = MigrationsHelper.ConstructFinalVersionLayouts(typeof(ItemTransferData), VersionLayoutDeltas);
		SerializableTypeFlags flags = SerializableTypeFlags.None;
		_schemas = new TypeSerializationSchemas(typeof(ItemTransferData), null, VersionLayouts, flags, DiskBlittableLayout);
	}

	public ImmutableArray<MigrationInfo> GetMigrations()
	{
		return _migrationInfos;
	}

	public ImmutableArray<VersionLayoutDelta> GetLayoutDeltas()
	{
		return VersionLayoutDeltas;
	}

	public SerializationSchema GetSchema(Version version)
	{
		return _schemas.GetSchema(version);
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferEvent
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
#define FEATURE_ASSERTIONS
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.Json;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Binary;
using Keen.VRage.Library.Serialization.Generic;
using Keen.VRage.Library.Serialization.Json;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.Serializers;
using Keen.VRage.Library.Utils;
using Keen.VRage.Library.Utils.Cloning;
using Keen.VRage.Library.Utils.Cloning.Cloners;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
///
/// </summary>
[Serialize]
[Cloneable]
public struct ItemTransferEvent : ISerializable<ItemTransferEvent>, ISerializable, IDeepCloneable<ItemTransferEvent>, IAccessible
{
	/// <inheritdoc />
	/// <inheritdoc />
	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	[SerializerBundle("Game2", "2.4.0.95")]
	[SerializerBundle("VRage", "2.4.0.95")]
	[SerializerBundle("System.Runtime", "1.0.0.0")]
	public class Serializer : IJsonSerializer<ItemTransferEvent>, IJsonSerializer, ISerializer, ISerializer<ItemTransferEvent>, IJsonObjectSerializer, IBinarySerializer<ItemTransferEvent>, IBinarySerializer, IGenericObjectSerializer<ItemTransferEvent>, IGenericObjectSerializer
	{
		/// <inheritdoc />
		public static readonly Serializer Instance = new Serializer();

		private static readonly bool IsDiskBlittable = (Instance.GetSchema(SerializationHelper.MaxVersion).Flags & SerializableTypeFlags.DiskBlittable) != 0;

		private ImmutableArray<BundleInfo> _bundles = ImmutableArray<BundleInfo>.Empty;

		private readonly IMigrations _typeMigrations = new ItemTransferEvent_Migrations();

		public IMigrations TypeVersionInfo => _typeMigrations;

		/// <inheritdoc />
		public ImmutableArray<BundleInfo> Bundles
		{
			get
			{
				if (_bundles.IsEmpty)
				{
					_bundles = SerializationHelper.GetSerializerBundles(GetType());
				}
				return _bundles;
			}
		}

		public SerializableTypeFlags Flags => TypeVersionInfo.LatestSchema.Flags;

		/// <inheritdoc />
		public void DeserializeInto(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = default(ItemTransferEvent);
			}
			DeserializeInto(ref source, ref Unsafe.Unbox<ItemTransferEvent>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref JsonDeserializationContext source, ref ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			if (!JsonHelper.TryMigrateType(ref source, flags, ref value))
			{
				source.AssertTokenAndRead(JsonTokenType.StartObject);
				DeserializeMembers(ref source, ref value, flags);
				source.AssertTokenAndRead(JsonTokenType.EndObject);
			}
		}

		public void DeserializeMembers(ref JsonDeserializationContext source, ref ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			while (source.Reader.TokenType == JsonTokenType.PropertyName)
			{
				ReadOnlySpan<byte> property = source.Reader.ValueSpan;
				source.Reader.Read();
				if (!TryDeserializeMember(ref source, StableHashing.Hash(property), in property, ref value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(ItemTransferEvent), Encoding.UTF8.GetString(property));
					source.Reader.Skip();
					source.Reader.Read();
				}
			}
		}

		protected bool TryDeserializeMember(ref JsonDeserializationContext source, int propertyHash, in ReadOnlySpan<byte> property, ref ItemTransferEvent value, SerializerFlags flags)
		{
			switch (propertyHash)
			{
			case 1773935317:
				if ("Inventory"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags2 = SerializerFlags.None;
					if (source.Reader.TokenType == JsonTokenType.Null)
					{
						value.Inventory = null;
						source.Reader.Read();
					}
					else if (JsonHelper.IsNameSerialized(ref source))
					{
						((IJsonSerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).DeserializeInto(ref source, ref value.Inventory, SerializerFlags.None | serializerFlags2);
					}
					else
					{
						InventoryDefinition.Serializer.Instance.DeserializeInto(ref source, ref value.Inventory, SerializerFlags.None | serializerFlags2);
					}
					return true;
				}
				break;
			case -806705308:
				if ("Item"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags3 = SerializerFlags.None;
					ImmutableSingleton<NullableSerializer<ItemTransferData>>.Instance.DeserializeInto(ref source, ref value.Item, SerializerFlags.None | serializerFlags3);
					return true;
				}
				break;
			case 1489337408:
				if ("Result"u8.SequenceEqual(property))
				{
					SerializerFlags serializerFlags = SerializerFlags.None;
					ImmutableSingleton<EnumSerializer<ItemTransferResult>>.Instance.DeserializeInto(ref source, ref value.Result, SerializerFlags.None | serializerFlags);
					return true;
				}
				break;
			}
			return false;
		}

		/// <inheritdoc />
		public ItemTransferEvent Deserialize(ref JsonDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			ItemTransferEvent value = default(ItemTransferEvent);
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref JsonSerializationContext destination, in ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			destination.Writer.WriteStartObject();
			SerializeMembers(ref destination, in value, flags);
			destination.Writer.WriteEndObject();
		}

		/// <inheritdoc />
		public void Serialize(ref JsonSerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in Unsafe.Unbox<ItemTransferEvent>(value), flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref JsonSerializationContext destination, in ItemTransferEvent value, SerializerFlags flags)
		{
			destination.Writer.WritePropertyName("Inventory"u8);
			SerializerFlags serializerFlags = SerializerFlags.None;
			InventoryDefinition value2 = value.Inventory;
			if (value2 == null)
			{
				destination.Writer.WriteNullValue();
			}
			else if (InventoryDefinition.Serializer.Instance.ShouldSerializeAsName(destination.Context, in value2))
			{
				((IJsonSerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).Serialize(ref destination, in value2, SerializerFlags.None | serializerFlags);
			}
			else
			{
				InventoryDefinition.Serializer.Instance.Serialize(ref destination, in value2, SerializerFlags.None | serializerFlags);
			}
			destination.Writer.WritePropertyName("Item"u8);
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<ItemTransferData>>.Instance.Serialize(ref destination, in value.Item, SerializerFlags.None | serializerFlags2);
			destination.Writer.WritePropertyName("Result"u8);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<EnumSerializer<ItemTransferResult>>.Instance.Serialize(ref destination, in value.Result, SerializerFlags.None | serializerFlags3);
		}

		/// <inheritdoc />
		public virtual void SerializeMembers(ref JsonSerializationContext destination, object value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, in Unsafe.Unbox<ItemTransferEvent>(value), flags);
		}

		/// <inheritdoc />
		public virtual void DeserializeMembers(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = default(ItemTransferEvent);
			}
			DeserializeMembers(ref source, ref Unsafe.Unbox<ItemTransferEvent>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = default(ItemTransferEvent);
			}
			DeserializeInto(ref source, ref Unsafe.Unbox<ItemTransferEvent>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			Assert.True(value != null, "Struct serializer should always be provided a non-null boxed instance.", "value is { }", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Simulation\\obj\\Release\\VRage.Library.Generator\\Keen.VRage.Library.Generator.Generation.MainIncrementalGenerator\\ItemTransferEvent_-1302323681.binary.g.cs", 61);
			DeserializeIntoSlow(ref source, ref Unsafe.Unbox<ItemTransferEvent>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref BinaryDeserializationContext source, ref ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			if (BinaryHelper.ShouldUseFastPath(ref source, typeof(ItemTransferEvent)))
			{
				DeserializeFast(ref source, ref value, flags);
			}
			else if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		public void DeserializeMembers(ref BinaryDeserializationContext source, ref ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			if (BinaryHelper.ShouldUseDeltaEncodedPath(ref source, out var memberCount))
			{
				DeserializeDeltaEncoded(ref source, ref value, memberCount, flags);
				return;
			}
			if (!source.TypeModel.IsInterned(typeof(ItemTransferEvent), out var index))
			{
				throw new SerializationException("Type ItemTransferEvent not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			int position = source.Reader.Position;
			foreach (var (text2, memberData2) in entry.Members)
			{
				if (entry.IsDiskBlittable)
				{
					source.Reader.Position = position + memberData2.Offset;
				}
				if (!TryDeserializeMember(ref source, text2, ref value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(ItemTransferEvent), text2);
				}
			}
			if (entry.IsDiskBlittable)
			{
				source.Reader.Position = position + entry.Size;
			}
		}

		/// <inheritdoc />
		public void DeserializeIntoSlow(ref BinaryDeserializationContext source, ref ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			if (!BinaryHelper.TryMigrateType(ref source, flags, ref value))
			{
				DeserializeMembers(ref source, ref value, flags);
			}
		}

		protected bool TryDeserializeMember(ref BinaryDeserializationContext source, string property, ref ItemTransferEvent value, SerializerFlags flags)
		{
			switch (property)
			{
			case "Inventory":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				if (source.IsNull(advance: false))
				{
					value.Inventory = null;
					source.ReadObjectPrefix();
				}
				else if (BinaryHelper.IsNameSerialized(ref source))
				{
					((IBinarySerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).DeserializeIntoSlow(ref source, ref value.Inventory, SerializerFlags.None | serializerFlags3);
				}
				else
				{
					InventoryDefinition.Serializer.Instance.DeserializeIntoSlow(ref source, ref value.Inventory, SerializerFlags.None | serializerFlags3);
				}
				return true;
			}
			case "Item":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<ItemTransferData>>.Instance.DeserializeIntoSlow(ref source, ref value.Item, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "Result":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				ImmutableSingleton<EnumSerializer<ItemTransferResult>>.Instance.DeserializeIntoSlow(ref source, ref value.Result, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		protected void DeserializeFast(ref BinaryDeserializationContext source, ref ItemTransferEvent value, SerializerFlags flags)
		{
			SerializerFlags serializerFlags = SerializerFlags.None;
			if (source.IsNull(advance: false))
			{
				value.Inventory = null;
				source.ReadObjectPrefix();
			}
			else if (BinaryHelper.IsNameSerialized(ref source))
			{
				((IBinarySerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).DeserializeInto(ref source, ref value.Inventory, SerializerFlags.None | serializerFlags);
			}
			else
			{
				InventoryDefinition.Serializer.Instance.DeserializeInto(ref source, ref value.Inventory, SerializerFlags.None | serializerFlags);
			}
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<ItemTransferData>>.Instance.DeserializeInto(ref source, ref value.Item, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<EnumSerializer<ItemTransferResult>>.Instance.DeserializeInto(ref source, ref value.Result, SerializerFlags.None | serializerFlags3);
		}

		protected void DeserializeDeltaEncoded(ref BinaryDeserializationContext source, ref ItemTransferEvent value, int memberCount, SerializerFlags flags)
		{
			if (!source.TypeModel.IsInterned(typeof(ItemTransferEvent), out var index))
			{
				throw new SerializationException("Type ItemTransferEvent not found in type table");
			}
			if (!source.TypeModel.TryGetSchema(index, out var entry))
			{
				throw new SerializationException($"Could not find type schema for the given index {index}");
			}
			for (int i = 0; i < memberCount; i++)
			{
				int index2 = source.Reader.Read<ushort>();
				MemberData memberData = entry.OrderedMembers[index2];
				string name = memberData.Name;
				if ((source.PeekObjectPrefix() & ValuePrefix.DeltaEncoded) == 0)
				{
					source.DeltaEncoded = false;
					if (memberData.Type.IsValueType)
					{
						source.ReadObjectPrefix();
					}
				}
				if (!TryDeserializeMember(ref source, name, ref value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(ItemTransferEvent), name);
				}
				source.DeltaEncoded = true;
			}
		}

		/// <inheritdoc />
		public ItemTransferEvent Deserialize(ref BinaryDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			ItemTransferEvent value = default(ItemTransferEvent);
			DeserializeInto(ref source, ref value, flags);
			return value;
		}

		/// <inheritdoc />
		public void Serialize(ref BinarySerializationContext destination, in ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, in value, flags);
		}

		/// <inheritdoc />
		public void Serialize(ref BinarySerializationContext destination, object? value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, in Unsafe.Unbox<ItemTransferEvent>(value), flags);
		}

		/// <inheritdoc />
		protected void SerializeMembers(ref BinarySerializationContext destination, in ItemTransferEvent value, SerializerFlags flags)
		{
			SerializerFlags serializerFlags = SerializerFlags.None;
			InventoryDefinition value2 = value.Inventory;
			if (value2 == null)
			{
				destination.WriteIsNull(isNull: true);
			}
			else if (InventoryDefinition.Serializer.Instance.ShouldSerializeAsName(destination.Context, in value2))
			{
				destination.WritePrefix(ValuePrefix.Name);
				((IBinarySerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).Serialize(ref destination, in value2, SerializerFlags.None | serializerFlags);
			}
			else
			{
				InventoryDefinition.Serializer.Instance.Serialize(ref destination, in value2, SerializerFlags.None | serializerFlags);
			}
			SerializerFlags serializerFlags2 = SerializerFlags.None;
			ImmutableSingleton<NullableSerializer<ItemTransferData>>.Instance.Serialize(ref destination, in value.Item, SerializerFlags.None | serializerFlags2);
			SerializerFlags serializerFlags3 = SerializerFlags.None;
			ImmutableSingleton<EnumSerializer<ItemTransferResult>>.Instance.Serialize(ref destination, in value.Result, SerializerFlags.None | serializerFlags3);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref GenericObjectDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
		{
			if (value == null)
			{
				value = default(ItemTransferEvent);
			}
			DeserializeMembers(ref source, ref Unsafe.Unbox<ItemTransferEvent>(value), flags);
		}

		/// <inheritdoc />
		public void DeserializeInto(ref GenericObjectDeserializationContext source, ref ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			DeserializeMembers(ref source, ref value, flags);
		}

		public void DeserializeMembers(ref GenericObjectDeserializationContext source, ref ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			foreach (var (text2, obj2) in source.GenericObject)
			{
				GenericObjectDeserializationContext source2 = new GenericObjectDeserializationContext(source.Context, obj2, source.SourceFormat);
				if (!TryDeserializeMember(ref source2, text2, ref value, flags))
				{
					source.Context.UnknownPropertyHandler?.Invoke(source.Context, typeof(ItemTransferEvent), text2);
				}
			}
		}

		protected bool TryDeserializeMember(ref GenericObjectDeserializationContext source, string property, ref ItemTransferEvent value, SerializerFlags flags)
		{
			switch (property)
			{
			case "Inventory":
			{
				SerializerFlags serializerFlags3 = SerializerFlags.None;
				if (source.Object == null)
				{
					value.Inventory = null;
				}
				else if (GenericObjectHelper.IsNameSerialized(ref source))
				{
					((IGenericObjectSerializer<InventoryDefinition>)InventoryDefinition.Serializer.Instance.GetNameSerializer()).DeserializeInto(ref source, ref value.Inventory, SerializerFlags.None | serializerFlags3);
				}
				else
				{
					InventoryDefinition.Serializer.Instance.DeserializeInto(ref source, ref value.Inventory, SerializerFlags.None | serializerFlags3);
				}
				return true;
			}
			case "Item":
			{
				SerializerFlags serializerFlags2 = SerializerFlags.None;
				ImmutableSingleton<NullableSerializer<ItemTransferData>>.Instance.DeserializeInto(ref source, ref value.Item, SerializerFlags.None | serializerFlags2);
				return true;
			}
			case "Result":
			{
				SerializerFlags serializerFlags = SerializerFlags.None;
				ImmutableSingleton<EnumSerializer<ItemTransferResult>>.Instance.DeserializeInto(ref source, ref value.Result, SerializerFlags.None | serializerFlags);
				return true;
			}
			default:
				return false;
			}
		}

		/// <inheritdoc />
		public ItemTransferEvent Deserialize(ref GenericObjectDeserializationContext source, SerializerFlags flags = SerializerFlags.None)
		{
			ItemTransferEvent value = default(ItemTransferEvent);
			DeserializeMembers(ref source, ref value, flags);
			return value;
		}

		public ImmutableArray<MigrationInfo> GetMigrations()
		{
			return _typeMigrations.GetMigrations();
		}

		public SerializationSchema GetSchema(Version version)
		{
			return _typeMigrations.GetSchema(version);
		}

		public bool TryGetDeltaSchema(Version version, out SerializationSchema? schema)
		{
			schema = null;
			return false;
		}

		void IJsonSerializer<ItemTransferEvent>.Serialize(ref JsonSerializationContext destination, in ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			Serialize(ref destination, in value, flags);
		}

		void IBinarySerializer<ItemTransferEvent>.Serialize(ref BinarySerializationContext destination, in ItemTransferEvent value, SerializerFlags flags = SerializerFlags.None)
		{
			SerializeMembers(ref destination, in value, flags);
		}
	}

	private class Cloner : IDeepCloner<ItemTransferEvent>, IDeepCloner
	{
		ItemTransferEvent IDeepCloner<ItemTransferEvent>.Clone(ItemTransferEvent value, ref CloningContext context)
		{
			return new ItemTransferEvent(in value, ref context);
		}
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public class TypeInfoHolder
	{
		/// <summary>Singleton instance</summary>
		public static AccessibleTypeInfo Value;

		/// <summary>Accessors for this instance and parent types.</summary>
		public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

		public const int OrderOffset = 3;

		static TypeInfoHolder()
		{
			int num = 0;
			RawAccessors = new(string, IMemberAccessor)[3]
			{
				("Inventory", InventoryAccessor()),
				("Item", ItemAccessor()),
				("Result", ResultAccessor())
			};
			string empty = string.Empty;
			MemberInfo[] array = new MemberInfo[3]
			{
				typeof(ItemTransferEvent).GetField("Inventory", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(ItemTransferEvent).GetField("Item", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
				typeof(ItemTransferEvent).GetField("Result", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
			};
			ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
			builder.AddRange(new Dictionary<MemberInfo, string>
			{
				{
					array[0],
					null
				},
				{
					array[1],
					null
				},
				{
					array[2],
					null
				}
			});
			ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
			builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
			{
				{
					array[0],
					ListReader<Attribute>.Empty
				},
				{
					array[1],
					ListReader<Attribute>.Empty
				},
				{
					array[2],
					ListReader<Attribute>.Empty
				}
			});
			ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
			builder3.AddRange(new Dictionary<MemberInfo, int>
			{
				{
					array[0],
					num
				},
				{
					array[1],
					num + 1
				},
				{
					array[2],
					num + 2
				}
			});
			Value = new AccessibleTypeInfo(typeof(ItemTransferEvent), empty, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
		}

		private static IMemberAccessor InventoryAccessor()
		{
			return new StructMemberAccessor<ItemTransferEvent, InventoryDefinition>("Inventory", "Inventory", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(ItemTransferEvent).GetField("Inventory", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(InventoryDefinition), () => InventoryDefinition.TypeInfoHolder.Value, delegate(in ItemTransferEvent instance)
			{
				return instance.Inventory;
			}, delegate(ref ItemTransferEvent instance, in InventoryDefinition value)
			{
				instance.Inventory = value;
			}, delegate(in ItemTransferEvent instance)
			{
				return ref Unsafe.AsRef(in instance.Inventory);
			});
		}

		private static IMemberAccessor ItemAccessor()
		{
			return new StructMemberAccessor<ItemTransferEvent, ItemTransferData?>("Item", "Item", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(ItemTransferEvent).GetField("Item", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ItemTransferData?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(ItemTransferData)), delegate(in ItemTransferEvent instance)
			{
				return instance.Item;
			}, delegate(ref ItemTransferEvent instance, in ItemTransferData? value)
			{
				instance.Item = value;
			}, delegate(in ItemTransferEvent instance)
			{
				return ref Unsafe.AsRef(in instance.Item);
			});
		}

		private static IMemberAccessor ResultAccessor()
		{
			return new StructMemberAccessor<ItemTransferEvent, ItemTransferResult>("Result", "Result", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(ItemTransferEvent).GetField("Result", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ItemTransferResult), null, delegate(in ItemTransferEvent instance)
			{
				return instance.Result;
			}, delegate(ref ItemTransferEvent instance, in ItemTransferResult value)
			{
				instance.Result = value;
			}, delegate(in ItemTransferEvent instance)
			{
				return ref Unsafe.AsRef(in instance.Result);
			});
		}
	}

	public required InventoryDefinition Inventory = null;

	public required ItemTransferData? Item;

	public required ItemTransferResult Result;

	/// <inheritdoc />
	static ISerializer<ItemTransferEvent> ISerializable<ItemTransferEvent>.Serializer => Serializer.Instance;

	static IDeepCloner<ItemTransferEvent> IDeepCloneable<ItemTransferEvent>.Cloner { get; } = new Cloner();

	/// <inheritdoc />
	public static IStreamSerializer<ItemTransferEvent> GetStreamSerializer(SerializerFormat format)
	{
		return format switch
		{
			SerializerFormat.Binary => ImmutableSingleton<BinaryStreamSerializer<ItemTransferEvent>>.Instance, 
			SerializerFormat.Json => ImmutableSingleton<JsonStreamSerializer<ItemTransferEvent>>.Instance, 
		};
	}

	[SetsRequiredMembers]
	private ItemTransferEvent(in ItemTransferEvent instance, ref CloningContext context)
	{
		if (instance.Inventory != null)
		{
			Inventory = (InventoryDefinition)CloningHelper.ClonePolymorphic(instance.Inventory, ref context);
		}
		Item = Singleton<NullableCloner<ItemTransferData>>.Instance.Clone(instance.Item, ref context);
		Result = instance.Result;
	}

	public ItemTransferEvent DeepClone()
	{
		CloningContext context = new CloningContext();
		return DeepClone(ref context);
	}

	public ItemTransferEvent DeepClone(ref CloningContext context)
	{
		return CloningHelper.GetCloner<ItemTransferEvent>().Clone(this, ref context);
	}

	/// <inheritdoc />
	[CompilerGenerated]
	[EditorBrowsable(EditorBrowsableState.Never)]
	public AccessibleTypeInfo GetTypeInfo()
	{
		return TypeInfoHolder.Value;
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferEvent_Migrations
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Immutable;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.Library.Reflection;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Migrations;
using Keen.VRage.Library.Serialization.Migrations.Internal;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

[Migrations(typeof(ItemTransferEvent))]
public struct ItemTransferEvent_Migrations : IMigrations
{
	private readonly ImmutableArray<MigrationInfo> _migrationInfos;

	private static readonly ImmutableArray<LayoutInfo> VersionLayouts;

	private static readonly ImmutableArray<VersionLayoutDelta> VersionLayoutDeltas;

	private static LayoutInfo DiskBlittableLayout;

	private static TypeSerializationSchemas _schemas;

	[Version(0)]
	private static readonly TypeStructureDelta Version_0_0_0_0_Delta;

	public ref readonly SerializationSchema LatestSchema => ref _schemas.GetLatestSchema();

	public ItemTransferEvent_Migrations()
	{
		ImmutableArray<MigrationInfo>.Builder builder = ImmutableArray.CreateBuilder<MigrationInfo>(0);
		_migrationInfos = builder.MoveToImmutable();
	}

	static ItemTransferEvent_Migrations()
	{
		VersionLayoutDeltas = ImmutableArray<VersionLayoutDelta>.Empty;
		DiskBlittableLayout = default(LayoutInfo);
		Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("Inventory", typeof(InventoryDefinition))).Add(new MemberData("Item", typeof(ItemTransferData?))).Add(new MemberData("Result", typeof(ItemTransferResult)));
		ImmutableArray<VersionLayoutDelta> empty = ImmutableArray<VersionLayoutDelta>.Empty;
		ImmutableArray<VersionLayoutDelta>.Builder builder = ImmutableArray.CreateBuilder<VersionLayoutDelta>(1 + empty.Length);
		builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
		VersionLayoutDeltas = MigrationsHelper.CombineLayouts(empty, builder);
		VersionLayouts = MigrationsHelper.ConstructFinalVersionLayouts(typeof(ItemTransferEvent), VersionLayoutDeltas);
		SerializableTypeFlags flags = SerializableTypeFlags.None;
		_schemas = new TypeSerializationSchemas(typeof(ItemTransferEvent), null, VersionLayouts, flags, DiskBlittableLayout);
	}

	public ImmutableArray<MigrationInfo> GetMigrations()
	{
		return _migrationInfos;
	}

	public ImmutableArray<VersionLayoutDelta> GetLayoutDeltas()
	{
		return VersionLayoutDeltas;
	}

	public SerializationSchema GetSchema(Version version)
	{
		return _schemas.GetSchema(version);
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using Keen.Game2.Simulation.RuntimeSystems.Validators;
using Keen.Game2.Simulation.StreamedUI.Terminal.Controllers;
using Keen.Game2.Simulation.StreamedUI.Terminal.DetachableCallbacks;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.VRage.DCS.Annotations;
using Keen.VRage.DCS.Components;
using Keen.VRage.Library.Collections;
using Keen.VRage.Library.Extensions;
using Keen.VRage.Library.Mathematics;
using Keen.VRage.Library.Threading;
using Keen.VRage.Multiplayer;
using Keen.VRage.Multiplayer.Annotations;
using Keen.VRage.Multiplayer.NetworkStories;
using Keen.VRage.Multiplayer.Replications.FailureStrategies;
using NoAlloq;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// <inheritdoc cref="T:Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryFullnessModel" />.
/// </summary>
public sealed class StreamedInventoryFullnessSessionComponent : StreamedBaseSessionComponent, IInventoryFullnessProvider, IModelWriter<InventoryFullnessModel>
{
	private sealed class InventoryFullnessModelServer : InventoryFullnessModel
	{
		private record struct InventoryData(FixedPoint Capacity, FixedPoint Filled)
		{
			public static InventoryData From(Entity entity)
			{
				if (!entity.Data.TryGet<InventoryComponent.InventoryData>(out var data))
				{
					return default(InventoryData);
				}
				return data.PerInventoryData.Data.Aggregate(default(InventoryData), (InventoryData sum, InventoryComponent.IndexData indexData) => sum + new InventoryData(indexData.MassMax, indexData.MassCurrent));
			}

			public static InventoryData operator +(InventoryData left, InventoryData right)
			{
				return new InventoryData(left.Capacity + right.Capacity, left.Filled + right.Filled);
			}

			public static InventoryData operator -(InventoryData left, InventoryData right)
			{
				return new InventoryData(left.Capacity - right.Capacity, left.Filled - right.Filled);
			}
		}

		private readonly Dictionary<Entity, InventoryData> _inventoryData = new Dictionary<Entity, InventoryData>();

		private InventoryData _total;

		public void Add(Entity entity)
		{
			InventoryData inventoryData = InventoryData.From(entity);
			_inventoryData.Add(entity, inventoryData);
			_total += inventoryData;
			InventoryComponent.InventoryChangedSignal.Subscribe(entity, OnInventoryChanged);
			InventoryComponent.ItemTransferSignal.Subscribe(entity, OnItemTransfer);
			OnDataChanged();
		}

		private void OnInventoryChanged(Entity entity)
		{
			InventoryData inventoryData = InventoryData.From(entity);
			_total += inventoryData - _inventoryData[entity];
			_inventoryData[entity] = inventoryData;
			OnDataChanged();
		}

		private void OnItemTransfer(Entity entity, ItemTransferResult result, InventoryDefinition inventory, ItemTransferData? item)
		{
			base.TransferEvent = null;
			base.TransferEvent = new ItemTransferEvent
			{
				Inventory = inventory,
				Item = item,
				Result = result
			};
		}

		public void Remove(Entity entity)
		{
			InventoryComponent.InventoryChangedSignal.Unsubscribe(entity, OnInventoryChanged);
			InventoryComponent.ItemTransferSignal.Unsubscribe(entity, OnItemTransfer);
			if (_inventoryData.Remove(entity, out var value))
			{
				_total -= value;
				OnDataChanged();
			}
		}

		private void OnDataChanged()
		{
			base.Percentage = (float)(_total.Filled / _total.Capacity);
		}
	}

	private GridBasedController<InventoryFullnessModel> _grids;

	private readonly HashSetDictionary<InventoryFullnessModel, Entity> _rootAttachments = new HashSetDictionary<InventoryFullnessModel, Entity>(ReferenceEqualityComparer.Instance);

	private readonly DetachableCallbackCollection<InventoryFullnessModel> _detachableCallbackCollection = new DetachableCallbackCollection<InventoryFullnessModel>();

	[Init]
	private new void Init()
	{
		_grids = new GridBasedController<InventoryFullnessModel>(_detachableCallbackCollection, this, IsBlockEligible);
	}

	private bool IsBlockEligible(Entity block)
	{
		InventoryComponent feature;
		return block.Has(out feature, (InventoryComponent _) => true);
	}

	Task<InventoryFullnessModel> IInventoryFullnessProvider.Attach(Entity entity)
	{
		return AttachImpl(entity).Task;
	}

	private async NetworkStory<InventoryFullnessModel> AttachImpl(NullOnAnyReplicationFail<Entity> grid)
	{
		ReplicationEventContext replicationEventContext = await MoveTo.Server(delegate(ReplicationEventContext validation)
		{
			validation.ValidateGamePlayer();
		});
		InventoryFullnessModelServer inventoryFullnessModelServer = new InventoryFullnessModelServer();
		if (!grid.HasValue)
		{
			return inventoryFullnessModelServer;
		}
		((IModel)inventoryFullnessModelServer).MainEntity = AsId(grid, inventoryFullnessModelServer, replicationEventContext);
		_replicables.Add(inventoryFullnessModelServer, _replication?.RegisterObservable(inventoryFullnessModelServer));
		_grids.TryAttachCollecting(grid, inventoryFullnessModelServer, OnEntityRemoved, replicationEventContext);
		return inventoryFullnessModelServer;
	}

	private void OnEntityRemoved(Entity entity, InventoryFullnessModel model)
	{
	}

	public void Detach(InventoryFullnessModel model)
	{
		DetachImpl(model).SkipWait();
	}

	[Server(null)]
	private async NetworkStory DetachImpl(InventoryFullnessModel model)
	{
		if (!_replicables.Remove(model, out IDisposable value))
		{
			return;
		}
		if (_rootAttachments.TryGet(model, out HashSet<Entity> collection))
		{
			while (collection.Count > 0)
			{
				_grids.TryDetach(collection.First(), model);
			}
		}
		_detachableCallbackCollection.RemoveDetachable(model);
		value?.Dispose();
	}

	public Entity GetMainEntity(InventoryFullnessModel model, ReplicationEventContext? context = null)
	{
		return AsEntity(((IModel)model).MainEntity, model, context);
	}

	public HashSet<Entity> GetRoots(InventoryFullnessModel model)
	{
		return _rootAttachments.GetOrAdd(model);
	}

	public void AddRootEntity(Entity root, InventoryFullnessModel model, ReplicationEventContext? context = null)
	{
		_rootAttachments.Add(model, root);
	}

	public void RemoveRootEntity(Entity root, InventoryFullnessModel model, ReplicationEventContext? context = null)
	{
		_rootAttachments.Remove(model, root, removeKeyIfEmpty: true);
	}

	public void AddEntity(Entity entity, Entity? parent, InventoryFullnessModel model, ReplicationEventContext? context = null)
	{
		((InventoryFullnessModelServer)model).Add(entity);
	}

	public void RemoveEntity(Entity entity, Entity? parent, InventoryFullnessModel model, ReplicationEventContext? context = null)
	{
		((InventoryFullnessModelServer)model).Remove(entity);
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using Keen.Game2.Simulation.GameSystems.GridId;
using Keen.Game2.Simulation.GameSystems.Physicss;
using Keen.Game2.Simulation.Replication;
using Keen.Game2.Simulation.RuntimeSystems.Validators;
using Keen.Game2.Simulation.StreamedUI.Terminal.Controllers;
using Keen.Game2.Simulation.StreamedUI.Terminal.DetachableCallbacks;
using Keen.Game2.Simulation.Utils;
using Keen.Game2.Simulation.WorldObjects.Characters;
using Keen.Game2.Simulation.WorldObjects.CubeBlocks;
using Keen.Game2.Simulation.WorldObjects.CubeBlocks.Production.ItemConverters;
using Keen.Game2.Simulation.WorldObjects.CubeGrids;
using Keen.Game2.Simulation.WorldObjects.CubeGrids.ResourceDistribution.Conveyors;
using Keen.Game2.Simulation.WorldObjects.FloatingObjects;
using Keen.Game2.Simulation.WorldObjects.Items;
using Keen.Game2.Simulation.WorldObjects.Tools;
using Keen.VRage.Core;
using Keen.VRage.Core.Game.Components;
using Keen.VRage.Core.Game.Data;
using Keen.VRage.Core.Systems;
using Keen.VRage.DCS.Accessors;
using Keen.VRage.DCS.Annotations;
using Keen.VRage.DCS.Annotations.Signals;
using Keen.VRage.DCS.Components;
using Keen.VRage.DCS.CoreData;
using Keen.VRage.DCS.Definitions;
using Keen.VRage.DCS.ObjectBuilders;
using Keen.VRage.DCS.Scenes;
using Keen.VRage.DCS.Signals;
using Keen.VRage.Game.Components.Models;
using Keen.VRage.Library.Collections;
using Keen.VRage.Library.Collections.Readers;
using Keen.VRage.Library.Definitions;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.Library.Extensions;
using Keen.VRage.Library.Localization;
using Keen.VRage.Library.Mathematics;
using Keen.VRage.Library.Memory;
using Keen.VRage.Library.Reflection.DependencyInjections;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Threading;
using Keen.VRage.Library.Utils;
using Keen.VRage.Multiplayer;
using Keen.VRage.Multiplayer.NetworkStories;
using Keen.VRage.Multiplayer.Replications.FailureStrategies;
using Keen.VRage.Multiplayer.SecureIds;
using Keen.VRage.Multiplayer.Sessions;
using Keen.VRage.Physics.Colliders;
using NoAlloq;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// View model provider for inventories.
/// </summary>
public class StreamedInventorySessionComponent : StreamedBaseSessionComponent, ITerminalInventory, IModelWriter<InventoryListModelStreamed>
{
	/// <summary>
	/// Server side model for an item in an inventory
	/// </summary>
	public class InventoryItemModelImpl : InventoryItemModel
	{
		public required InventoryModel Inventory { get; init; }
	}

	/// <summary>
	/// Server-only class that updates inventory content when <see cref="T:Keen.Game2.Simulation.WorldObjects.Items.InventoryComponent.InventoryData" /> changes
	/// </summary>
	public class InventoryModelImpl : InventoryModel, IAccessible
	{
		[After(typeof(OnInventoryChanged))]
		[Before(typeof(OnDataReplication))]
		private class UpdateInventory : JobGroup
		{
		}

		/// <inheritdoc />
		[CompilerGenerated]
		[EditorBrowsable(EditorBrowsableState.Never)]
		public new class TypeInfoHolder
		{
			/// <summary>Singleton instance</summary>
			public static AccessibleTypeInfo Value;

			/// <summary>Accessors for this instance and parent types.</summary>
			public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

			public const int OrderOffset = 28;

			static TypeInfoHolder()
			{
				int num = 26;
				RawAccessors = new(string, IMemberAccessor)[1] { ("Component", ComponentAccessor()) };
				string documentation = "Server-only class that updates inventory content when <see cref=\"Keen.Game2.Simulation.WorldObjects.Items.InventoryComponent.InventoryData\"/> changes";
				MemberInfo[] array = new MemberInfo[2]
				{
					typeof(InventoryModelImpl).GetField("Component", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
					typeof(InventoryModelImpl).GetMethod("Update", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null)
				};
				ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
				builder.AddRange(new Dictionary<MemberInfo, string>
				{
					{
						array[0],
						null
					},
					{
						array[1],
						null
					}
				});
				ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
				builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
				{
					{
						array[0],
						ListReader<Attribute>.Empty
					},
					{
						array[1],
						ListReader<Attribute>.Empty
					}
				});
				ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
				builder3.AddRange(new Dictionary<MemberInfo, int>
				{
					{
						array[0],
						num
					},
					{
						array[1],
						num + 1
					}
				});
				RawAccessors = InventoryModel.TypeInfoHolder.RawAccessors.Concat<(string, IMemberAccessor)>(RawAccessors).ToArray();
				builder.AddRange(InventoryModel.TypeInfoHolder.Value.MembersDocumentation);
				builder3.AddRange(InventoryModel.TypeInfoHolder.Value.MembersDeclarationOrder);
				builder2.AddRange(InventoryModel.TypeInfoHolder.Value.MembersAttributes);
				Value = new AccessibleTypeInfo(typeof(InventoryModelImpl), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
			}

			private static IMemberAccessor ComponentAccessor()
			{
				return new ClassMemberAccessor<InventoryModelImpl, InventoryComponent>("Component", "Component", SerializerFormatSet.None, typeof(InventoryModelImpl).GetField("Component", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(InventoryComponent), null, (InventoryModelImpl instance) => instance.Component, null, (InventoryModelImpl instance) => ref Unsafe.AsRef(in instance.Component));
			}
		}

		public readonly InventoryComponent Component;

		private static readonly StringId ___JobId__OnInventoryChanged = StringId.Get("Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent.InventoryModelImpl__OnInventoryChanged__1");

		public override bool ShowInStats => !Definition.ExcludeFromCapacityStats;

		public override InventoryDefinition Definition => Component.Definition;

		public InventoryModelImpl(InventoryComponent component, InventoryStreamedUIConfiguration configuration, bool isConnected, bool isAccessed)
		{
			Component = component;
			Configuration = configuration;
			Entity entity = Component.Entity;
			Entity topLevelParent = entity.GetTopLevelParent();
			base.EntityName = entity.TryGetLocalizedDisplayName();
			base.ParentName = ((topLevelParent != entity) ? topLevelParent.TryGetLocalizedDisplayName() : null);
			base.IsConnected = isConnected;
			base.IsAccessed = isAccessed;
		}

		public void Update()
		{
			ObservableList<InventoryItemModel> items = base.Items;
			ReadOnlySpan<ItemStack> items2 = Component.Items;
			int i;
			for (i = 0; i < items.Count && i < items2.Length && items[i].Definition == items2[i].Definition; i++)
			{
				items[i].Amount = items2[i].Amount;
			}
			items.RemoveRange(i, items.Count - i);
			for (; i < items2.Length; i++)
			{
				items.Add(new InventoryItemModelImpl
				{
					Definition = items2[i].Definition,
					Inventory = this,
					Amount = items2[i].Amount,
					MetaData = items2[i].MetaData
				});
			}
		}

		[UpdateInventory]
		[MustHave(typeof(InventoryComponent.InventoryData))]
		[OnChanged(typeof(InventoryComponent.InventoryData))]
		private static void OnInventoryChanged(HashSet<InventoryModelImpl> inventories)
		{
			foreach (InventoryModelImpl inventory in inventories)
			{
				inventory.Update();
			}
		}

		[InvocationStub("Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent.InventoryModelImpl", "OnInventoryChanged", 1, "Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent.InventoryModelImpl__OnInventoryChanged__1", 785, "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Simulation\\StreamedUI\\Terminal\\Inventories\\StreamedInventorySessionComponent.cs")]
		[InvocationStubData(typeof(DEntity), InvocationStubData.DataAccess.ReadOnly, false)]
		[InvocationStubData(typeof(HashSet<InventoryModelImpl>), InvocationStubData.DataAccess.Write, false)]
		[SkipLocalsInit]
		private unsafe static void OnInventoryChanged_InvocationStub(byte** __dataPointers, int loops, Scene __scene, object __jobContext)
		{
			using (Profiler.Begin("OnInventoryChanged", Profiler.Color.Null, 785, "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Simulation\\StreamedUI\\Terminal\\Inventories\\StreamedInventorySessionComponent.cs"))
			{
				int* ptr = (int*)__dataPointers[-1];
				ulong* ptr2 = (ulong*)__dataPointers[-2];
				ulong num = 0uL;
				ulong num2 = 0uL;
				while (true)
				{
					if (num2 == 0L)
					{
						num2 = 1uL;
						num = *ptr2;
						ptr2++;
					}
					if ((num2 & num) != 0L)
					{
						OnInventoryChanged(((InstanceBind<HashSet<InventoryModelImpl>>*)__dataPointers[1])->Instance);
					}
					num2 <<= 1;
					if (--loops != 0)
					{
						*__dataPointers += *ptr;
						__dataPointers[1] += ptr[1];
						continue;
					}
					break;
				}
			}
		}

		/// <inheritdoc />
		[CompilerGenerated]
		[EditorBrowsable(EditorBrowsableState.Never)]
		public override AccessibleTypeInfo GetTypeInfo()
		{
			return TypeInfoHolder.Value;
		}
	}

	/// <summary>
	/// Server-only part of <see cref="T:Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel" />
	/// </summary>
	public class InventoryContainerModelImpl : InventoryContainerModel, IDisposable, IAccessible
	{
		/// <inheritdoc />
		[CompilerGenerated]
		[EditorBrowsable(EditorBrowsableState.Never)]
		public new class TypeInfoHolder
		{
			/// <summary>Singleton instance</summary>
			public static AccessibleTypeInfo Value;

			/// <summary>Accessors for this instance and parent types.</summary>
			public static (string Name, IMemberAccessor Accessor)[] RawAccessors;

			public const int OrderOffset = 14;

			static TypeInfoHolder()
			{
				int num = 10;
				RawAccessors = new(string, IMemberAccessor)[1] { ("_serverEntity", _serverEntityAccessor()) };
				string documentation = "Server-only part of <see cref=\"Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel\"/>";
				MemberInfo[] array = new MemberInfo[4]
				{
					typeof(InventoryContainerModelImpl).GetField("_serverEntity", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
					typeof(InventoryContainerModelImpl).GetMethod("Dispose", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null),
					typeof(InventoryContainerModelImpl).GetMethod("OnBlockNameChanged", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[2]
					{
						typeof(Entity),
						typeof(LocalizableText).MakeByRefType()
					}, null),
					typeof(InventoryContainerModelImpl).GetMethod("OnGridNameChanged", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[2]
					{
						typeof(Entity),
						typeof(LocalizableText).MakeByRefType()
					}, null)
				};
				ImmutableDictionary<MemberInfo, string>.Builder builder = ImmutableDictionary.CreateBuilder<MemberInfo, string>();
				builder.AddRange(new Dictionary<MemberInfo, string>
				{
					{
						array[0],
						null
					},
					{
						array[1],
						null
					},
					{
						array[2],
						null
					},
					{
						array[3],
						null
					}
				});
				ImmutableDictionary<MemberInfo, ListReader<Attribute>>.Builder builder2 = ImmutableDictionary.CreateBuilder<MemberInfo, ListReader<Attribute>>();
				builder2.AddRange(new Dictionary<MemberInfo, ListReader<Attribute>>
				{
					{
						array[0],
						ListReader<Attribute>.Empty
					},
					{
						array[1],
						ListReader<Attribute>.Empty
					},
					{
						array[2],
						ListReader<Attribute>.Empty
					},
					{
						array[3],
						ListReader<Attribute>.Empty
					}
				});
				ImmutableDictionary<MemberInfo, int>.Builder builder3 = ImmutableDictionary.CreateBuilder<MemberInfo, int>();
				builder3.AddRange(new Dictionary<MemberInfo, int>
				{
					{
						array[0],
						num
					},
					{
						array[1],
						num + 1
					},
					{
						array[2],
						num + 2
					},
					{
						array[3],
						num + 3
					}
				});
				RawAccessors = InventoryContainerModel.TypeInfoHolder.RawAccessors.Concat<(string, IMemberAccessor)>(RawAccessors).ToArray();
				builder.AddRange(InventoryContainerModel.TypeInfoHolder.Value.MembersDocumentation);
				builder3.AddRange(InventoryContainerModel.TypeInfoHolder.Value.MembersDeclarationOrder);
				builder2.AddRange(InventoryContainerModel.TypeInfoHolder.Value.MembersAttributes);
				Value = new AccessibleTypeInfo(typeof(InventoryContainerModelImpl), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
			}

			private static IMemberAccessor _serverEntityAccessor()
			{
				return new ClassMemberAccessor<InventoryContainerModelImpl, Entity>("_serverEntity", "_serverEntity", SerializerFormatSet.None, typeof(InventoryContainerModelImpl).GetField("_serverEntity", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(Entity), null, (InventoryContainerModelImpl instance) => instance._serverEntity, delegate(InventoryContainerModelImpl instance, in Entity value)
				{
					instance._serverEntity = value;
				}, (InventoryContainerModelImpl instance) => ref Unsafe.AsRef(in instance._serverEntity));
			}
		}

		private Entity _serverEntity;

		public InventoryContainerModelImpl(EntityId id, Entity entity)
			: base(id)
		{
			_serverEntity = entity;
			base.DisplayName = _serverEntity.GetDisplayName();
			DebugName = _serverEntity.DebugName;
			base.LeakedId = _serverEntity.DEntity;
			FunctionalBlockComponent.DisplayNameProperty.Subscribe(_serverEntity, OnBlockNameChanged);
			CubeGridComponent.DisplayNameProperty.Subscribe(_serverEntity.GetRoot(), OnGridNameChanged);
		}

		public void Dispose()
		{
			FunctionalBlockComponent.DisplayNameProperty.Unsubscribe(_serverEntity, OnBlockNameChanged);
			CubeGridComponent.DisplayNameProperty.Unsubscribe(_serverEntity.GetRoot(), OnGridNameChanged);
		}

		private void OnBlockNameChanged(Entity _, in LocalizableText value)
		{
			base.DisplayName = value;
			string entityName = value.EvaluateText();
			foreach (InventoryModel inventory in base.Inventories)
			{
				InventoryModelImpl inventoryModelImpl = (InventoryModelImpl)inventory;
				inventoryModelImpl.EntityName = entityName;
			}
		}

		private void OnGridNameChanged(Entity _, in LocalizableText value)
		{
			base.DisplayName = value;
			string parentName = value.EvaluateText();
			foreach (InventoryModel inventory in base.Inventories)
			{
				InventoryModelImpl inventoryModelImpl = (InventoryModelImpl)inventory;
				inventoryModelImpl.ParentName = parentName;
			}
		}

		/// <inheritdoc />
		[CompilerGenerated]
		[EditorBrowsable(EditorBrowsableState.Never)]
		public override AccessibleTypeInfo GetTypeInfo()
		{
			return TypeInfoHolder.Value;
		}
	}

	[AttributeUsage(AttributeTargets.Method)]
	[SignalSignature(SyncProperty = false)]
	public class OnItemDroppedSignal : SignalAttribute
	{
		public delegate void ExternalApi(Entity entity);

		public static void Subscribe(Entity entity, ExternalApi subscription)
		{
			EntityInternalSignalsApi.Subscribe(entity, typeof(OnItemDroppedSignal), subscription);
		}

		public static bool Unsubscribe(Entity entity, ExternalApi subscription)
		{
			return EntityInternalSignalsApi.Unsubscribe(entity, typeof(OnItemDroppedSignal), subscription);
		}
	}

	public class __InternalOnItemDroppedSignal
	{
		public static void TriggerLocally(Entity entity, int triggerIndex)
		{
			ref CompositionData.SignalsMap signals = ref entity.CompositionData.Signals;
			(int Begin, int End) tuple = signals.SignalIndex[triggerIndex];
			int item = tuple.Begin;
			int item2 = tuple.End;
			Span<SignalHandler> handlers = signals.SignalHandlers.AsSpan().Slice(item, item2 - item);
			Trigger(entity, handlers);
		}

		public unsafe static void Trigger(Entity entity, Span<SignalHandler> handlers)
		{
			Span<SignalHandler> span = handlers;
			for (int i = 0; i < span.Length; i++)
			{
				SignalHandler signalHandler = span[i];
				object obj = ((signalHandler.ComponentIndex == -1) ? ((object)entity) : ((object)entity.Components[signalHandler.ComponentIndex]));
				if (obj == null)
				{
					throw new NullReferenceException($"DCS signal dispatch target is null: signal 'OnItemDroppedSignal', ComponentIndex={signalHandler.ComponentIndex}, entity={entity}, {entity.GetComposition()}. ");
				}
				((delegate*<object, void>)signalHandler.Callsite)(obj);
			}
			if (!EntityInternalSignalsApi.Constructed(entity))
			{
				Assert.Fail("Signal 'OnItemDroppedSignal' dispatched on a destroyed (not constructed) entity", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Simulation\\obj\\Release\\VRage.DCS.Generator\\Keen.VRage.DCS.Generator.Generators.DCSGenerators\\zGen_SignalsGenerator_StreamedInventorySessionComponent_SignalTypes.cs", 55);
			}
			else
			{
				if (!EntityInternalSignalsApi.TryGetInvocationToken(entity, typeof(OnItemDroppedSignal), out var token))
				{
					return;
				}
				using (token.Value)
				{
					foreach (Delegate handler in token.Value.Handlers)
					{
						((OnItemDroppedSignal.ExternalApi)handler)(entity);
					}
				}
			}
		}
	}

	[AttributeUsage(AttributeTargets.Method)]
	[SignalSignature(SyncProperty = false)]
	public class OnItemTransferredSignal : SignalAttribute
	{
		public delegate void ExternalApi(Entity entity, InteractionInfo interactionInfo, InventoryComponent from, InventoryComponent to, ItemDefinition itemType, FixedPoint transferred);

		public static void Subscribe(Entity entity, ExternalApi subscription)
		{
			EntityInternalSignalsApi.Subscribe(entity, typeof(OnItemTransferredSignal), subscription);
		}

		public static bool Unsubscribe(Entity entity, ExternalApi subscription)
		{
			return EntityInternalSignalsApi.Unsubscribe(entity, typeof(OnItemTransferredSignal), subscription);
		}
	}

	public class __InternalOnItemTransferredSignal
	{
		public static void TriggerLocally(Entity entity, int triggerIndex, InteractionInfo interactionInfo, InventoryComponent from, InventoryComponent to, ItemDefinition itemType, FixedPoint transferred)
		{
			ref CompositionData.SignalsMap signals = ref entity.CompositionData.Signals;
			(int Begin, int End) tuple = signals.SignalIndex[triggerIndex];
			int item = tuple.Begin;
			int item2 = tuple.End;
			Span<SignalHandler> handlers = signals.SignalHandlers.AsSpan().Slice(item, item2 - item);
			Trigger(entity, handlers, interactionInfo, from, to, itemType, transferred);
		}

		public unsafe static void Trigger(Entity entity, Span<SignalHandler> handlers, InteractionInfo interactionInfo, InventoryComponent from, InventoryComponent to, ItemDefinition itemType, FixedPoint transferred)
		{
			Span<SignalHandler> span = handlers;
			for (int i = 0; i < span.Length; i++)
			{
				SignalHandler signalHandler = span[i];
				object obj = ((signalHandler.ComponentIndex == -1) ? ((object)entity) : ((object)entity.Components[signalHandler.ComponentIndex]));
				if (obj == null)
				{
					throw new NullReferenceException($"DCS signal dispatch target is null: signal 'OnItemTransferredSignal', ComponentIndex={signalHandler.ComponentIndex}, entity={entity}, {entity.GetComposition()}. ");
				}
				((delegate*<object, InteractionInfo, InventoryComponent, InventoryComponent, ItemDefinition, FixedPoint, void>)signalHandler.Callsite)(obj, interactionInfo, from, to, itemType, transferred);
			}
			if (!EntityInternalSignalsApi.Constructed(entity))
			{
				Assert.Fail("Signal 'OnItemTransferredSignal' dispatched on a destroyed (not constructed) entity", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Simulation\\obj\\Release\\VRage.DCS.Generator\\Keen.VRage.DCS.Generator.Generators.DCSGenerators\\zGen_SignalsGenerator_StreamedInventorySessionComponent_SignalTypes.cs", 114);
			}
			else
			{
				if (!EntityInternalSignalsApi.TryGetInvocationToken(entity, typeof(OnItemTransferredSignal), out var token))
				{
					return;
				}
				using (token.Value)
				{
					foreach (Delegate handler in token.Value.Handlers)
					{
						((OnItemTransferredSignal.ExternalApi)handler)(entity, interactionInfo, from, to, itemType, transferred);
					}
				}
			}
		}
	}

	[AttributeUsage(AttributeTargets.Method)]
	[SignalSignature(SyncProperty = false)]
	public class OnNotifyClientItemTransferredSignal : SignalAttribute
	{
		public delegate void ExternalApi(Entity entity, TransferInfo info);

		public static void Subscribe(Entity entity, ExternalApi subscription)
		{
			EntityInternalSignalsApi.Subscribe(entity, typeof(OnNotifyClientItemTransferredSignal), subscription);
		}

		public static bool Unsubscribe(Entity entity, ExternalApi subscription)
		{
			return EntityInternalSignalsApi.Unsubscribe(entity, typeof(OnNotifyClientItemTransferredSignal), subscription);
		}
	}

	public class __InternalOnNotifyClientItemTransferredSignal
	{
		public static void TriggerLocally(Entity entity, int triggerIndex, TransferInfo info)
		{
			ref CompositionData.SignalsMap signals = ref entity.CompositionData.Signals;
			(int Begin, int End) tuple = signals.SignalIndex[triggerIndex];
			int item = tuple.Begin;
			int item2 = tuple.End;
			Span<SignalHandler> handlers = signals.SignalHandlers.AsSpan().Slice(item, item2 - item);
			Trigger(entity, handlers, info);
		}

		public unsafe static void Trigger(Entity entity, Span<SignalHandler> handlers, TransferInfo info)
		{
			Span<SignalHandler> span = handlers;
			for (int i = 0; i < span.Length; i++)
			{
				SignalHandler signalHandler = span[i];
				object obj = ((signalHandler.ComponentIndex == -1) ? ((object)entity) : ((object)entity.Components[signalHandler.ComponentIndex]));
				if (obj == null)
				{
					throw new NullReferenceException($"DCS signal dispatch target is null: signal 'OnNotifyClientItemTransferredSignal', ComponentIndex={signalHandler.ComponentIndex}, entity={entity}, {entity.GetComposition()}. ");
				}
				((delegate*<object, TransferInfo, void>)signalHandler.Callsite)(obj, info);
			}
			if (!EntityInternalSignalsApi.Constructed(entity))
			{
				Assert.Fail("Signal 'OnNotifyClientItemTransferredSignal' dispatched on a destroyed (not constructed) entity", "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Simulation\\obj\\Release\\VRage.DCS.Generator\\Keen.VRage.DCS.Generator.Generators.DCSGenerators\\zGen_SignalsGenerator_StreamedInventorySessionComponent_SignalTypes.cs", 173);
			}
			else
			{
				if (!EntityInternalSignalsApi.TryGetInvocationToken(entity, typeof(OnNotifyClientItemTransferredSignal), out var token))
				{
					return;
				}
				using (token.Value)
				{
					foreach (Delegate handler in token.Value.Handlers)
					{
						((OnNotifyClientItemTransferredSignal.ExternalApi)handler)(entity, info);
					}
				}
			}
		}
	}

	private DetachableCallbackCollection<InventoryListModelStreamed> _detachableCallbackCollection = new DetachableCallbackCollection<InventoryListModelStreamed>();

	private readonly HashSetDictionary<InventoryListModelStreamed, Entity> _rootAttachments = new HashSetDictionary<InventoryListModelStreamed, Entity>(ReferenceEqualityComparer.Instance);

	private readonly Dictionary<InventoryContainerModel, Entity> _attachments = new Dictionary<InventoryContainerModel, Entity>(ReferenceEqualityComparer.Instance);

	private GridBasedController<InventoryListModelStreamed> _grids;

	private CharacterInventoryController _characters;

	private FloatingContainerBasedController _floatingContainer;

	[Service]
	private IFindFreeSpace _findFreeSpace;

	[Configuration]
	private InventoryStreamedUIConfiguration _configuration;

	public int __signalTableOffset;

	[Init]
	public new void Init()
	{
		_grids = new GridBasedController<InventoryListModelStreamed>(_detachableCallbackCollection, this, IsBlockEligible);
		_characters = new CharacterInventoryController(_detachableCallbackCollection, this);
		_floatingContainer = new FloatingContainerBasedController(_detachableCallbackCollection, this);
	}

	private async NetworkStory RequestContainerListDetachment(SkipOnReplicationFail<InventoryListModelStreamed> inventoryListModel)
	{
		await MoveTo.Server(delegate(ReplicationEventContext c)
		{
			c.ValidateGamePlayer();
		});
		DetachContainerList(inventoryListModel);
	}

	private async NetworkStory RequestInventoryContainerModelDetachment(SkipOnReplicationFail<InventoryContainerModel> container, SkipOnReplicationFail<InventoryListModelStreamed> list)
	{
		await MoveTo.Server(delegate(ReplicationEventContext c)
		{
			c.ValidateGamePlayer();
		});
		DetachInventoryModelFromEntity(container, list);
	}

	[SignalTrigger(typeof(OnItemDroppedSignal), 0)]
	private void OnItemDropped()
	{
		if (EntityInternalSignalsApi.Constructed(base.Entity))
		{
			__InternalOnItemDroppedSignal.TriggerLocally(base.Entity, __signalTableOffset);
		}
	}

	[SignalTrigger(typeof(OnItemTransferredSignal), 1)]
	private void OnItemTransferred(InteractionInfo interactionInfo, InventoryComponent from, InventoryComponent to, ItemDefinition itemType, FixedPoint transferred)
	{
		if (EntityInternalSignalsApi.Constructed(base.Entity))
		{
			__InternalOnItemTransferredSignal.TriggerLocally(base.Entity, __signalTableOffset + 1, interactionInfo, from, to, itemType, transferred);
		}
	}

	[SignalTrigger(typeof(OnNotifyClientItemTransferredSignal), 2)]
	private void OnNotifyClientItemTransferred(TransferInfo info)
	{
		if (EntityInternalSignalsApi.Constructed(base.Entity))
		{
			__InternalOnNotifyClientItemTransferredSignal.TriggerLocally(base.Entity, __signalTableOffset + 2, info);
		}
	}

	private void NotifyItemTransferred(ReplicationEventContext eventContext, InteractionInfo interactionInfo, InventoryComponent from, InventoryComponent to, ItemDefinition itemType, FixedPoint transferred)
	{
		OnItemTransferred(interactionInfo, from, to, itemType, transferred);
		if (eventContext.IsFromServer || transferred <= FixedPoint.Zero || interactionInfo.InteractedEntity == null)
		{
			return;
		}
		bool flag = to.Entity == interactionInfo.InteractorEntity;
		bool flag2 = from.Entity == interactionInfo.InteractorEntity;
		if (!flag && !flag2)
		{
			return;
		}
		string sourceBlockType = string.Empty;
		string sourceGridId = string.Empty;
		DIRECTION direction;
		TRANSFER_TYPE type;
		if (flag)
		{
			direction = DIRECTION.IN;
			if (from.IsLootGenerated)
			{
				type = TRANSFER_TYPE.LOOT;
			}
			else
			{
				ItemConverterComponent itemConverterComponent = from.Entity.TryGet<ItemConverterComponent>();
				if (itemConverterComponent != null && from == itemConverterComponent.OutputInventory)
				{
					type = TRANSFER_TYPE.PRODUCTION_RESULT;
					CubeBlockComponent cubeBlockComponent = itemConverterComponent.Entity.TryGet<CubeBlockComponent>();
					if (cubeBlockComponent != null)
					{
						sourceBlockType = cubeBlockComponent.Definition.DebugNameShort;
						sourceGridId = GridHelper.GetGridId(cubeBlockComponent.Grid.Data).ToString();
					}
				}
				else
				{
					type = TRANSFER_TYPE.MANUAL_TRANSFER;
					CubeBlockComponent cubeBlockComponent2 = from.Entity.TryGet<CubeBlockComponent>();
					if (cubeBlockComponent2 != null)
					{
						sourceBlockType = cubeBlockComponent2.Definition.DebugNameShort;
						sourceGridId = GridHelper.GetGridId(cubeBlockComponent2.Grid.Data).ToString();
					}
				}
			}
		}
		else
		{
			direction = DIRECTION.OUT;
			type = TRANSFER_TYPE.MANUAL_TRANSFER;
			CubeBlockComponent cubeBlockComponent3 = to.Entity.TryGet<CubeBlockComponent>();
			if (cubeBlockComponent3 != null)
			{
				sourceBlockType = cubeBlockComponent3.Definition.DebugNameShort;
				sourceGridId = GridHelper.GetGridId(cubeBlockComponent3.Grid.Data).ToString();
			}
		}
		TransferInfo info = new TransferInfo
		{
			InventoryName = from.Definition.DebugNameShort,
			TransferredItemType = itemType.DebugNameShort,
			Quantity = transferred.ToIntSafe(),
			ItemCategory = itemType.Type.ToString(),
			Type = type,
			Direction = direction,
			SourceBlockType = sourceBlockType,
			SourceGridId = sourceGridId
		};
		NotifyClientItemTransferred(eventContext.ClientId, info).SkipWait();
	}

	public void NotifyFloatingObjectPickup(ClientId clientId, ItemDefinition itemType, FixedPoint amount)
	{
		NotifyClientItemTransferred(clientId, new TransferInfo
		{
			InventoryName = string.Empty,
			TransferredItemType = itemType.DebugNameShort,
			Quantity = amount.ToIntSafe(),
			ItemCategory = itemType.Type.ToString(),
			Type = TRANSFER_TYPE.FLOATING_OBJECT,
			Direction = DIRECTION.IN,
			SourceBlockType = string.Empty,
			SourceGridId = string.Empty
		}).SkipWait();
	}

	private async NetworkStory NotifyClientItemTransferred(ClientId client, TransferInfo info)
	{
		await MoveTo.Client(client);
		OnNotifyClientItemTransferred(info);
	}

	public void Attach(Entity root, InventoryListModelStreamed model, ReplicationEventContext? context = null)
	{
		_grids.TryAttachCollecting(root, model, OnEntityRemoved, context);
		_characters.TryAttach(root, model, OnEntityRemoved, context);
		_floatingContainer.TryAttach(root, model, OnEntityRemoved, context);
	}

	public async Task<InventoryListModelStreamed> Attach(Entity rootEntity, bool populateMainEntity = false, InteractionInfo? interactionInfo = null)
	{
		InventoryListModelStreamed listModel = await AttachContainerList(rootEntity);
		if (listModel == null)
		{
			return new InventoryListModelStreamed();
		}
		if (populateMainEntity)
		{
			await AttachInventoryModelToEntity(listModel.MainEntity, interactionInfo.GetValueOrDefault());
		}
		return listModel;
	}

	public Task<InventoryContainerModel> Attach(EntityId entity, InteractionInfo? interactionInfo = null)
	{
		return AttachInventoryModelToEntity(entity, interactionInfo.GetValueOrDefault()).Task;
	}

	public void Detach(InventoryListModelStreamed model)
	{
		RequestContainerListDetachment(model).SkipWait();
	}

	public void Detach(InventoryContainerModel container, InventoryListModelStreamed list)
	{
		RequestInventoryContainerModelDetachment(container, list).SkipWait();
	}

	public Task<(ItemTransferResult, FixedPoint, FixedPoint)> TransferAsync(InventoryItemModel item, InventoryModel target, InteractionInfo interactionInfo, FixedPoint? amount, int? targetSlot)
	{
		return RequestItemTransfer(item, target, interactionInfo, amount, targetSlot).Task;
	}

	public Task<bool> DropItemAsync(InventoryItemModel item, InteractionInfo interactionInfo)
	{
		return RequestDropItem(item, interactionInfo).Task;
	}

	public Entity GetMainEntity(InventoryListModelStreamed model, ReplicationEventContext? context = null)
	{
		return AsEntity(model.MainEntity, model, context);
	}

	public HashSet<Entity> GetRoots(InventoryListModelStreamed model)
	{
		return _rootAttachments.GetOrAdd(model);
	}

	public void AddRootEntity(Entity root, InventoryListModelStreamed model, ReplicationEventContext? context = null)
	{
		_rootAttachments.Add(model, root);
	}

	public void RemoveRootEntity(Entity root, InventoryListModelStreamed model, ReplicationEventContext? context = null)
	{
		_rootAttachments.Remove(model, root, removeKeyIfEmpty: true);
	}

	public void AddEntity(Entity entity, Entity? parent, InventoryListModelStreamed model, ReplicationEventContext? context = null)
	{
		EntityId item = AsId(entity, model, context);
		model.Entities.Add(item);
	}

	public void RemoveEntity(Entity entity, Entity? parent, InventoryListModelStreamed model, ReplicationEventContext? context = null)
	{
		EntityId item = AsId(entity, model, context);
		model.Entities.Remove(item);
	}

	private async NetworkStory<InventoryListModelStreamed> AttachContainerList(SkipOnReplicationFail<Entity> rootEntity)
	{
		ReplicationEventContext replicationEventContext = await MoveTo.Server(delegate(ReplicationEventContext validation)
		{
			validation.ValidateGamePlayer();
		});
		Entity value = rootEntity.Value;
		InventoryListModelStreamed inventoryListModelStreamed = new InventoryListModelStreamed();
		inventoryListModelStreamed.MainEntity = AsId(value, inventoryListModelStreamed, replicationEventContext);
		Attach(value, inventoryListModelStreamed, replicationEventContext);
		_replicables.Add(inventoryListModelStreamed, _replication?.RegisterObservable(inventoryListModelStreamed));
		return inventoryListModelStreamed;
	}

	public static bool IsBlockEligible(EntityCompositeDefinition composite)
	{
		return composite.ComponentsOfType<InventoryComponent>().Any();
	}

	private bool IsBlockEligible(Entity entity)
	{
		return IsBlockEligible(entity.GetComposition());
	}

	private void OnEntityRemoved(Entity entity, InventoryListModelStreamed model)
	{
		CubeGridComponent cubeGridComponent = entity.TryGet<CubeGridComponent>();
		if (cubeGridComponent != null)
		{
			PooledList<Entity> children = cubeGridComponent.HierarchyComponent.Children;
			if (children != null)
			{
				foreach (Entity item in children)
				{
					OnEntityRemoved(item, model);
				}
			}
		}
		bool flag;
		do
		{
			flag = false;
			foreach (var (container, entity3) in _attachments)
			{
				if (entity3 == entity)
				{
					flag = true;
					DetachInventoryModelFromEntity(container, model);
					break;
				}
			}
		}
		while (flag);
	}

	private async NetworkStory<bool> RequestDropItem(InventoryItemModel item, InteractionInfo interactionInfo, Vector3 spawnOffset = default(Vector3))
	{
		ReplicationEventContext eventContext = await MoveTo.Server(delegate(ReplicationEventContext validation)
		{
			validation.ValidateGamePlayer();
		});
		GC.KeepAlive(this);
		eventContext.ValidateItemDrop(interactionInfo);
		InventoryItemModelImpl inventoryItemModelImpl = (InventoryItemModelImpl)item;
		InventoryComponent from = ((InventoryModelImpl)inventoryItemModelImpl.Inventory).Component;
		if (from.Entity != interactionInfo.InteractorEntity && !interactionInfo.ConveyorSubgraphId.HasValue)
		{
			return false;
		}
		int itemIndex = inventoryItemModelImpl.Inventory.Items.IndexOf(item);
		if (itemIndex == -1 || itemIndex >= from.Items.Length)
		{
			return false;
		}
		_ = from.Items[itemIndex].Definition;
		bool flag = from.Entity.TryGet<CharacterComponent>() != null || from.Entity.TryGet<FloatingContainerServerComponent>() != null || await TestCanDropItemImpl(from, item.Definition, interactionInfo);
		bool flag2 = false;
		if (flag)
		{
			WorldTransform transform = interactionInfo.InteractorEntity.Data.GetWorldTransform();
			ItemStack? itemStack = from.RemoveItemByIndex(itemIndex);
			if (!itemStack.HasValue)
			{
				return false;
			}
			EntityObjectBuilder oB = Singleton<DefinitionManager>.Instance.GetConfiguration<FloatingObjectPrefabsConfiguration>().GetOB(itemStack.Value);
			IToolOriginProvider toolOriginProvider = interactionInfo.InteractorEntity.FirstOrDefault<IToolOriginProvider>();
			if (toolOriginProvider != null)
			{
				transform.Position = WorldTransform.Transform(Vector3D.Forward * _configuration.DefaultDropDistance, toolOriginProvider.WorldTransform);
			}
			IPhysicsCollider collider = oB.Definition.Definition<ModelComponent, ModelComponentDefinition>().Collider;
			if (collider != null && !_findFreeSpace.IsSpaceFree(transform, collider, default(QueryFilteringInfo)))
			{
				FreeSpaceSearchInfo searchInfo = new FreeSpaceSearchInfo
				{
					Collider = collider,
					BaseDistance = collider.GetBoundingBox(Quaternion.Identity).Size.Length() / 2f,
					IgnoreLineOfSight = true
				};
				WorldTransform? worldTransform = _findFreeSpace.TryFindSpace(transform.Position, searchInfo);
				if (worldTransform.HasValue)
				{
					transform = worldTransform.Value;
				}
			}
			oB.OB<WorldTransformComponent, WorldTransformComponentObjectBuilder>().Transform = new WorldTransform(transform.Position);
			base.Entity.GetSession<IGameServer>().SpawnEntity(oB);
			flag2 = true;
			NotifyClientItemTransferred(eventContext.ClientId, new TransferInfo
			{
				InventoryName = from.Definition.DebugNameShort,
				TransferredItemType = itemStack.Value.Definition.DebugNameShort,
				Quantity = itemStack.Value.Amount.ToIntSafe(),
				ItemCategory = itemStack.Value.Definition.Type.ToString(),
				Type = TRANSFER_TYPE.FLOATING_OBJECT,
				Direction = DIRECTION.OUT,
				SourceBlockType = string.Empty,
				SourceGridId = string.Empty
			}).SkipWait();
		}
		if (flag2)
		{
			OnItemDropped();
		}
		return flag2;
	}

	private async NetworkStory<(ItemTransferResult, FixedPoint, FixedPoint)> RequestItemTransfer(SkipOnReplicationFail<InventoryItemModel> itemModel, SkipOnReplicationFail<InventoryModel> targetModel, SkipOnReplicationFail<InteractionInfo> interactionInfo, FixedPoint? amount, int? targetSlot)
	{
		ReplicationEventContext eventContext = await MoveTo.Server(delegate(ReplicationEventContext validation)
		{
			validation.ValidateGamePlayer();
		});
		GC.KeepAlive(this);
		InventoryItemModel item = itemModel.Value;
		InventoryModel value = targetModel.Value;
		InteractionInfo info = interactionInfo.Value;
		eventContext.ValidateInteractedEntities(info.InteractedEntity);
		InventoryItemModelImpl inventoryItemModelImpl = (InventoryItemModelImpl)item;
		int itemIndex = inventoryItemModelImpl.Inventory.Items.IndexOf(item);
		InventoryComponent from = ((InventoryModelImpl)inventoryItemModelImpl.Inventory).Component;
		if (itemIndex == -1 || itemIndex >= from.Items.Length)
		{
			return (ItemTransferResult.ErrorMissingItem, 0, 0);
		}
		InventoryComponent to = ((InventoryModelImpl)value).Component;
		ItemDefinition itemType = from.GetItemDefinition(itemIndex);
		_ = (FixedPoint)0;
		ItemTransferResult itemTransferResult = await TestCanTransferItemImpl(from, to, itemType, info);
		if (itemTransferResult == ItemTransferResult.Success)
		{
			FixedPoint fixedPoint = amount ?? item.Amount;
			FixedPoint fixedPoint2 = from.TransferByIdx(to, itemIndex, targetSlot, fixedPoint, allowPartial: true);
			FixedPoint item2 = to.CountItem(item.Definition);
			if (fixedPoint2 != fixedPoint)
			{
				itemTransferResult = ((to.GetFillRatio() == FixedPoint.One) ? ItemTransferResult.ErrorFull : ItemTransferResult.ErrorFit);
			}
			NotifyItemTransferred(eventContext, info, from, to, itemType, fixedPoint2);
			return (itemTransferResult, fixedPoint2, item2);
		}
		return (itemTransferResult, 0, to.CountItem(item.Definition));
	}

	private async NetworkStory<InventoryContainerModel> AttachInventoryModelToEntity(EntityId entityId, SkipOnReplicationFail<InteractionInfo> interactionInfo)
	{
		ReplicationEventContext replicationEventContext = await MoveTo.Server(delegate(ReplicationEventContext validation)
		{
			validation.ValidateGamePlayer();
		});
		InteractionInfo info = interactionInfo.Value;
		object obj = TryGetContextFor(entityId);
		if (obj == null)
		{
			throw replicationEventContext.Throw($"No context found for EntityId {entityId}.");
		}
		Entity entity = AsEntity(entityId, obj, replicationEventContext);
		if (entity == null)
		{
			throw replicationEventContext.Throw($"No Entity found for EntityId {entityId} and the given context.");
		}
		InventoryContainerModelImpl container = new InventoryContainerModelImpl(entityId, entity);
		if (!ObservableReplicationFeatureFlag.IsEnabled)
		{
			_replicables.Add(container, _replication?.RegisterObservable(container));
		}
		InventoryListModelStreamed rootViewModel = (InventoryListModelStreamed)obj;
		_attachments.Add(container, entity);
		(int NodeId, ConveyorSystemComponent System)? fromData = TryGetNodeIdAndConveyorSystem(info);
		await AddInventoriesAsync();
		foreach (InventoryModel inventory2 in container.Inventories)
		{
			ModelWithDataUpdate.AttachNewToEntity((InventoryModelImpl)inventory2, entity.Data);
		}
		rootViewModel.InventoryContainers.Add(container);
		return container;
		async Task AddInventoriesAsync()
		{
			using PooledList<InventoryComponent> collectedInventories = new PooledList<InventoryComponent>();
			SpanEnumerable<Component, InventoryComponent, NoAlloq.Producers.SecondaryWhereDelegateProducer<Component, InventoryComponent, NoAlloq.Producers.OfTypeProducer<Component, InventoryComponent>>>.Enumerator enumerator2 = entity.All<InventoryComponent>().GetEnumerator();
			while (enumerator2.MoveNext())
			{
				InventoryComponent current2 = enumerator2.Current;
				collectedInventories.Add(current2);
			}
			bool isBlock = entity.TryGet<CubeBlockComponent>() != null;
			using ArraySegmentEnumerator<InventoryComponent> arraySegmentEnumerator = collectedInventories.GetEnumerator();
			InventoryModelImpl inventoryModelImpl;
			InventoryComponent inventory;
			bool isConnected;
			bool isAccessed;
			for (; arraySegmentEnumerator.MoveNext(); inventoryModelImpl = new InventoryModelImpl(inventory, _configuration, isConnected, isAccessed), inventoryModelImpl.Update(), container.Inventories.Add(inventoryModelImpl))
			{
				inventory = arraySegmentEnumerator.Current;
				isConnected = true;
				isAccessed = true;
				if (isBlock)
				{
					if (fromData.HasValue)
					{
						(int NodeId, ConveyorSystemComponent System) from = fromData.GetValueOrDefault();
						(int, ConveyorSystemComponent)? tuple = TryGetNodeIdAndConveyorSystem(inventory, info);
						if (tuple.HasValue)
						{
							(int NodeId, ConveyorSystemComponent System) to = tuple.GetValueOrDefault();
							isConnected = await ConveyorSystemComponent.AreConnectedAsync(from.NodeId, from.System, to.NodeId, to.System);
							isAccessed = from.NodeId == to.NodeId && from.System == to.System;
							continue;
						}
					}
					isConnected = false;
					isAccessed = false;
				}
			}
		}
	}

	private void DetachContainerList(InventoryListModelStreamed model)
	{
		if (!_replicables.Remove(model, out IDisposable value))
		{
			return;
		}
		if (_rootAttachments.TryGet(model, out HashSet<Entity> collection))
		{
			while (collection.Count > 0)
			{
				Entity root = collection.First();
				_grids.TryDetach(root, model);
				_characters.TryDetach(root, model);
				_floatingContainer.TryDetach(root, model);
			}
		}
		_detachableCallbackCollection.RemoveDetachable(model);
		value?.Dispose();
	}

	private void DetachInventoryModelFromEntity(InventoryContainerModel container, InventoryListModelStreamed list)
	{
		StringBuilder stringBuilder = StringBuilderPool.Get();
		try
		{
			StringBuilder stringBuilder2 = stringBuilder;
			StringBuilder stringBuilder3 = stringBuilder2;
			StringBuilder.AppendInterpolatedStringHandler handler = new StringBuilder.AppendInterpolatedStringHandler(6, 1, stringBuilder2);
			handler.AppendLiteral("Begin ");
			handler.AppendFormatted(_attachments?.Count ?? (-1));
			stringBuilder3.AppendLine(ref handler);
			stringBuilder2 = stringBuilder;
			StringBuilder stringBuilder4 = stringBuilder2;
			handler = new StringBuilder.AppendInterpolatedStringHandler(10, 1, stringBuilder2);
			handler.AppendLiteral("Container ");
			handler.AppendFormatted(container == null);
			stringBuilder4.AppendLine(ref handler);
			stringBuilder2 = stringBuilder;
			StringBuilder stringBuilder5 = stringBuilder2;
			handler = new StringBuilder.AppendInterpolatedStringHandler(5, 1, stringBuilder2);
			handler.AppendLiteral("List ");
			handler.AppendFormatted(list == null);
			stringBuilder5.AppendLine(ref handler);
			if (_attachments.Remove(container, out Entity value))
			{
				stringBuilder.AppendLine("Removed");
				stringBuilder2 = stringBuilder;
				StringBuilder stringBuilder6 = stringBuilder2;
				handler = new StringBuilder.AppendInterpolatedStringHandler(1, 2, stringBuilder2);
				handler.AppendFormatted(value?.DEntity);
				handler.AppendLiteral(" ");
				handler.AppendFormatted(value?.GetComposition()?.Guid);
				stringBuilder6.AppendLine(ref handler);
				if (_replicables.Remove(container, out IDisposable value2))
				{
					stringBuilder.AppendLine("Removed2");
					value2?.Dispose();
				}
				stringBuilder2 = stringBuilder;
				StringBuilder stringBuilder7 = stringBuilder2;
				handler = new StringBuilder.AppendInterpolatedStringHandler(12, 1, stringBuilder2);
				handler.AppendLiteral("Inventories ");
				handler.AppendFormatted(container?.Inventories?.Count ?? (-1));
				stringBuilder7.AppendLine(ref handler);
				foreach (InventoryModel inventory in container.Inventories)
				{
					stringBuilder2 = stringBuilder;
					StringBuilder stringBuilder8 = stringBuilder2;
					handler = new StringBuilder.AppendInterpolatedStringHandler(12, 1, stringBuilder2);
					handler.AppendLiteral("Inventories ");
					handler.AppendFormatted(inventory?.Definition?.Guid);
					stringBuilder8.AppendLine(ref handler);
					ModelWithDataUpdate.DetachFromEntity((InventoryModelImpl)inventory, value.Data);
				}
				stringBuilder.AppendLine("Clear");
				container.Inventories.Clear();
				stringBuilder.AppendLine("Dispose");
				(container as IDisposable)?.Dispose();
			}
			stringBuilder2 = stringBuilder;
			StringBuilder stringBuilder9 = stringBuilder2;
			handler = new StringBuilder.AppendInterpolatedStringHandler(20, 1, stringBuilder2);
			handler.AppendLiteral("InventoryContainers ");
			handler.AppendFormatted(list?.InventoryContainers == null);
			stringBuilder9.AppendLine(ref handler);
			stringBuilder2 = stringBuilder;
			StringBuilder stringBuilder10 = stringBuilder2;
			handler = new StringBuilder.AppendInterpolatedStringHandler(6, 1, stringBuilder2);
			handler.AppendLiteral("Count ");
			handler.AppendFormatted(list?.InventoryContainers?.Count ?? (-1));
			stringBuilder10.AppendLine(ref handler);
			stringBuilder2 = stringBuilder;
			StringBuilder stringBuilder11 = stringBuilder2;
			handler = new StringBuilder.AppendInterpolatedStringHandler(10, 1, stringBuilder2);
			handler.AppendLiteral("Container ");
			handler.AppendFormatted(container == null);
			stringBuilder11.AppendLine(ref handler);
			stringBuilder2 = stringBuilder;
			StringBuilder stringBuilder12 = stringBuilder2;
			handler = new StringBuilder.AppendInterpolatedStringHandler(9, 1, stringBuilder2);
			handler.AppendLiteral("Contains ");
			handler.AppendFormatted(list?.InventoryContainers?.Contains(container));
			stringBuilder12.AppendLine(ref handler);
			list.InventoryContainers.Remove(container);
		}
		catch (Exception ex) when (ex.CanHandle())
		{
			Log.Default.Error(stringBuilder.ToString());
			throw;
		}
		StringBuilderPool.Return(stringBuilder);
	}

	private static Task<bool> TestCanDropItemImpl(InventoryComponent from, ItemDefinition item, InteractionInfo interactionInfo)
	{
		(int, ConveyorSystemComponent)? tuple = TryGetNodeIdAndConveyorSystem(from, interactionInfo);
		(int, ConveyorSystemComponent)? tuple2 = TryGetNodeIdAndConveyorSystem(interactionInfo);
		if (!tuple2.HasValue || !tuple.HasValue)
		{
			return new Task<bool>(result: false);
		}
		if (!tuple.Value.Item2.IsConnectedTo(tuple2.Value.Item2))
		{
			return new Task<bool>(result: false);
		}
		return ConveyorSystemComponent.AreConnectedAsync(tuple.Value.Item1, tuple.Value.Item2, tuple2.Value.Item1, tuple2.Value.Item2, item);
	}

	private static async Task<ItemTransferResult> TestCanTransferItemImpl(InventoryComponent from, InventoryComponent to, ItemDefinition item, InteractionInfo interactionInfo)
	{
		if (from == to)
		{
			return ItemTransferResult.Success;
		}
		if (!item.CanFitInventoryFilter(to))
		{
			return ItemTransferResult.ErrorFilter;
		}
		if ((from.Entity == interactionInfo.InteractorEntity && to.Entity == interactionInfo.InteractedEntity) || (to.Entity == interactionInfo.InteractorEntity && from.Entity == interactionInfo.InteractedEntity))
		{
			bool flag = from.Entity.TryGet<FunctionalBlockComponent>()?.Functional ?? true;
			bool flag2 = to.Entity.TryGet<FunctionalBlockComponent>()?.Functional ?? true;
			return (!(flag & flag2)) ? ItemTransferResult.ErrorFunctional : ItemTransferResult.Success;
		}
		(int, ConveyorSystemComponent)? tuple = TryGetNodeIdAndConveyorSystem(from, interactionInfo);
		if (tuple.HasValue)
		{
			(int, ConveyorSystemComponent) valueOrDefault = tuple.GetValueOrDefault();
			tuple = TryGetNodeIdAndConveyorSystem(to, interactionInfo);
			if (tuple.HasValue)
			{
				(int, ConveyorSystemComponent) valueOrDefault2 = tuple.GetValueOrDefault();
				if (!valueOrDefault.Item2.IsConnectedTo(valueOrDefault2.Item2))
				{
					return ItemTransferResult.ErrorConnection;
				}
				return (!(await ConveyorSystemComponent.AreConnectedAsync(valueOrDefault.Item1, valueOrDefault.Item2, valueOrDefault2.Item1, valueOrDefault2.Item2, item))) ? ItemTransferResult.ErrorConnection : ItemTransferResult.Success;
			}
		}
		return ItemTransferResult.ErrorConnection;
	}

	private static (int NodeId, ConveyorSystemComponent System)? TryGetNodeIdAndConveyorSystem(InventoryComponent inventory, InteractionInfo interactionInfo)
	{
		ConveyorSystemComponent conveyorSystemComponent = TryGetConveyorSystem(inventory.Entity);
		if (conveyorSystemComponent != null && conveyorSystemComponent.IsInventoryRegistered(inventory))
		{
			return (ConveyorSystemComponent.GetNodeIdByInventory(inventory), conveyorSystemComponent);
		}
		if (inventory.Entity == interactionInfo.InteractorEntity)
		{
			return TryGetNodeIdAndConveyorSystem(interactionInfo);
		}
		return null;
	}

	private static (int NodeId, ConveyorSystemComponent System)? TryGetNodeIdAndConveyorSystem(InteractionInfo interactionInfo)
	{
		Entity interactorEntity = interactionInfo.InteractorEntity;
		Entity interactedEntity = interactionInfo.InteractedEntity;
		if (interactorEntity == null || interactedEntity == null)
		{
			return null;
		}
		ConveyorSystemComponent conveyorSystemComponent = TryGetConveyorSystem(interactedEntity);
		if (conveyorSystemComponent == null)
		{
			return null;
		}
		int? num = null;
		if (interactionInfo.InventoryTag.HasValue)
		{
			InventoryComponent inventoryComponent = interactedEntity.TryGet<InventoryComponent>(interactionInfo.InventoryTag.Value);
			if (inventoryComponent == null || inventoryComponent.ConveyorSystem == null)
			{
				return null;
			}
			num = ConveyorSystemComponent.GetNodeIdByInventory(inventoryComponent);
		}
		if (!num.HasValue && interactionInfo.ConveyorSubgraphId.HasValue)
		{
			if (!conveyorSystemComponent.HasNodeWithSubgraphId(interactedEntity.DEntity, interactionInfo.ConveyorSubgraphId.Value))
			{
				return null;
			}
			num = conveyorSystemComponent.GetNodeBySubgraphId(interactedEntity.DEntity, interactionInfo.ConveyorSubgraphId.Value);
		}
		if (num.HasValue)
		{
			return (num.Value, conveyorSystemComponent);
		}
		return null;
	}

	private static ConveyorSystemComponent? TryGetConveyorSystem(Entity entity)
	{
		return entity.TryGet<CubeBlockComponent>()?.Grid.Entity.TryGet<ConveyorSystemComponent>();
	}
}

====================================================================================================
TYPE: Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryValidator
ASSEMBLY: C:\Program Files (x86)\Steam\steamapps\common\SpaceEngineers2\Game2\Game2.Simulation.dll
====================================================================================================
--- DECOMPILED C# ---
using System.Linq;
using Keen.Game2.Simulation.WorldObjects.Shared;
using Keen.VRage.DCS.Definitions;
using Keen.VRage.DCS.ObjectBuilders;
using Keen.VRage.Library.Diagnostics;
using Keen.VRage.Library.Serialization;
using Keen.VRage.Library.Serialization.Validation;

namespace Keen.Game2.Simulation.StreamedUI.Terminal.Inventories;

/// <summary>
/// Validates requirements for <see cref="T:Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent" />
/// </summary>
public class StreamedInventoryValidator : SimpleValidator<EntityCompositeDefinition>
{
	public override void Validate(EntityCompositeDefinition composite, ValidationReporter reporter, ValidationContext context, MemberReference member)
	{
		if (StreamedInventorySessionComponent.IsBlockEligible(composite))
		{
			bool flag = composite.ComponentsOfType<IDisplayNameProvider>().Any();
			bool condition = flag;
			ConditionalInterpolatedStringHandler<Assert.AssertTrueCondition, bool> message = new ConditionalInterpolatedStringHandler<Assert.AssertTrueCondition, bool>(33, 1, flag, out var shouldAppend);
			if (shouldAppend)
			{
				message.AppendLiteral("Block's with Inventory must have ");
				message.AppendFormatted("IDisplayNameProvider");
			}
			reporter.Validate(condition, member, message);
		}
	}
}

====================================================================================================
KEYWORD INDEX ACROSS DECOMPILED TARGET TYPES
====================================================================================================

### ItemsSource
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] StyledProperty<IEnumerable?> itemsSourceProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] context.ProvideTargetProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] itemsControl4.Bind(itemsSourceProperty, binding);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] StyledProperty<IEnumerable?> itemsSourceProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] context.ProvideTargetProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] carousel4.Bind(itemsSourceProperty, binding2);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] StyledProperty<IEnumerable?> itemsSourceProperty2 = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] context.ProvideTargetProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] itemsControl4.Bind(itemsSourceProperty2, binding13);

### Items
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.IInventoryEffects] using Keen.Game2.Simulation.WorldObjects.Items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] ItemsControl itemsControl2;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] ItemsControl itemsControl = (itemsControl2 = new ItemsControl());
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] ((ISupportInitialize)itemsControl).BeginInit();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] border4.Child = itemsControl;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] ItemsControl itemsControl4;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] ItemsControl itemsControl3 = (itemsControl4 = itemsControl2);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] context.PushParent(itemsControl4);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] StyledProperty<IEnumerable?> itemsSourceProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] context.ProvideTargetProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] itemsControl4.Bind(itemsSourceProperty, binding);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] itemsControl4.Background = new ImmutableSolidColorBrush(16777215u);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] itemsControl4.ItemTemplate = itemTemplate;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] ((ISupportInitialize)itemsControl3).EndInit();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] _inventoryCache.Items.ForEach(delegate(InventoryViewModel x)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] if (inventory.Model.Items.Where(value).Count() != 0)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] foreach (InventoryViewModel item in _inventoryCache.Items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] public void ItemsChanged(InventoryViewModel inventoryViewModel)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] if (isSearching && inventory.InventoryItems.Count == 0)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] if (!isSearching && !_showEmpty && inventory.InventoryItems.Count == 0)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] bool flag2 = inventory.InventoryItems.Any((InventoryItemModel item) => item.Name.ToString().Contains(_searchQuery, StringComparison.OrdinalIgnoreCase));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] enumerable = _containers.Where((InventoryContainerModel c) => filters.Aggregate(seed: true, (bool current, string filter) => current && c.DisplayName.EvaluateText().Contains(filter, StringComparison.InvariantCultureIgnoreCase)) || c.Inventories.Any((InventoryModel inv) => inv.Items.Any((InventoryItemModel item) => filters.Aggregate(seed: true, (bool current, string filter) => current && item.Name.EvaluateText().Contains(filter, StringComparison.InvariantCultureIgnoreCase)))));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] IEnumerable<InventoryContainerModel> items = enumerable;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] pooledList.AddRange(items);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] using Keen.Game2.Simulation.WorldObjects.Items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] if (e.NewItems?[0] is EmptyToolbarTile)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] [SessionInGameUISessionComponent.OnNotifyEnqueueProductionItemSignal]
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] [SessionInGameUISessionComponent.OnNotifyStartBackpackProductionItemSignal]
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] using Keen.Game2.Simulation.WorldObjects.Items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] using Keen.Game2.Simulation.WorldObjects.Items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] using Keen.Game2.Simulation.WorldObjects.Items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] public static readonly DirectProperty<InventoryGrid, IEnumerable> ItemsProperty = AvaloniaProperty.RegisterDirect("Items", (InventoryGrid o) => o.Items, delegate(InventoryGrid o, IEnumerable v)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] o.Items = v;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] public static readonly DirectProperty<InventoryGrid, double> ItemSizeProperty = AvaloniaProperty.RegisterDirect("ItemSize", (InventoryGrid o) => o.ItemSize, delegate(InventoryGrid o, double v)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] o.ItemSize = v;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] private double _itemSize;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] private ItemsControl? _itemsControl;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] public IEnumerable Items
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] return ItemsFilled();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] RaisePropertyChanged(ItemsProperty, value, value);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] public double ItemSize
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] return _itemSize;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] _itemSize = value;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] InventoryItemsChanged(null, null);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] private void InventoryItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] RaisePropertyChanged(ItemsProperty, _inventory.InventoryItems, _inventory.InventoryItems);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] private IEnumerable ItemsFilled()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] if (_itemsControl == null || _itemsControl.Bounds.Width == 0.0)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] _availableWidth = _itemsControl.Bounds.Width;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] int numberOfItems = 0;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] foreach (InventoryItemModel inventoryItem in _inventory.InventoryItems)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] numberOfItems++;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] for (int i = numberOfItems; i < maxStacks2; i++)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] numberOfItems++;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] int num = (int)Math.Floor(_availableWidth / ItemSize);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] for (int i = num - numberOfItems % num; i > 0; i--)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] numberOfItems++;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] if (_itemsControl != null)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] _itemsControl.PropertyChanged -= OnItemsControlPropertyChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] _itemsControl = e.NameScope.Find<ItemsControl>("PART_ItemsControl");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] if (_itemsControl != null)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] _itemsControl.PropertyChanged += OnItemsControlPropertyChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] private void OnItemsControlPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs args)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] RaisePropertyChanged(ItemsProperty, _inventory.InventoryItems, _inventory.InventoryItems);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] int num = inventoryViewModel.Model.Items.IndexOf(inventoryItemModel);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] targetSlot = inventoryViewModel.Model.Items.Count;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] public static void DynamicSetter_3(SelectingItemsControl P_0, Binding P_1)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] P_0.Bind(SelectingItemsControl.SelectedItemProperty, binding);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] StyledProperty<IEnumerable?> itemsSourceProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] context.ProvideTargetProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] carousel4.Bind(itemsSourceProperty, binding2);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] context.ProvideTargetProperty = SelectingItemsControl.SelectedItemProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] ItemsControl itemsControl2;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] ItemsControl itemsControl = (itemsControl2 = new ItemsControl());
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] ((ISupportInitialize)itemsControl).BeginInit();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] border4.Child = itemsControl;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] ItemsControl itemsControl4;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] ItemsControl itemsControl3 = (itemsControl4 = itemsControl2);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] context.PushParent(itemsControl4);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] StyledProperty<IEnumerable?> itemsSourceProperty2 = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] context.ProvideTargetProperty = ItemsControl.ItemsSourceProperty;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] itemsControl4.Bind(itemsSourceProperty2, binding13);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] itemsControl4.Background = new ImmutableSolidColorBrush(16777215u);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] itemsControl4.Classes.Add("InventoryListBox");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] itemsControl4.ItemTemplate = itemTemplate;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] ((ISupportInitialize)itemsControl3).EndInit();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] foreach (InventoryContainerViewModel item in _inventoryContainers.Items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] foreach (InventoryContainerViewModel item in _inventoryContainers.Items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] foreach (InventoryContainerViewModel item in _inventoryContainers.Items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private ReadOnlyObservableCollection<InventoryItemModel> _items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private SourceList<InventoryItemModel> _itemsCache = new SourceList<InventoryItemModel>();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private IDisposable _itemsCacheSubscription;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public ReadOnlyObservableCollection<InventoryItemModel> InventoryItems => _items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public int ItemsCount => _itemsCache.Count;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] if (InventoryItems.Count < 60)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _itemsCacheSubscription = _itemsCache.Connect().Filter(itemFilter).Bind(out _items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] ((INotifyCollectionChanged)InventoryItems).CollectionChanged += FilteredItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _model.Items.CollectionChanged += ItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] ItemsChanged(null, null);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] ((INotifyCollectionChanged)InventoryItems).CollectionChanged -= FilteredItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _model.Items.CollectionChanged -= ItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _itemsCacheSubscription.Dispose();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private void ItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _itemsCache.Edit(delegate(IExtendedList<InventoryItemModel> list)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] list.AddRange(Model.Items);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _itemsCache.AddRange(e.NewItems.Cast<InventoryItemModel>());
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _itemsCache.RemoveMany(e.OldItems.Cast<InventoryItemModel>());
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] OnPropertyChanged("ItemsCount");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private void FilteredItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _parentContainer?.ItemsChanged(this);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public void HighlightStackableItems(InventoryItemModel item)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] foreach (InventoryItemModel item2 in Model.Items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public void ResetStackableItems()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] foreach (InventoryItemModel item in Model.Items)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ITerminalInventory] using Keen.Game2.Simulation.WorldObjects.Items;
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] if (e.OldItems != null)

### CollectionChanged
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] field.CollectionChanged -= InventoryContainersChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] field.CollectionChanged += InventoryContainersChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private void InventoryContainersChanged(object? sender, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] Model.Inventories.CollectionChanged += InventoriesChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] Model.Inventories.CollectionChanged -= InventoriesChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] private void InventoriesChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] _containers.CollectionChanged -= ContainersOnPropertyChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] _containers.CollectionChanged += ContainersOnPropertyChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] private void ContainersOnPropertyChanged(object? sender, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] _toolbarState.Tiles.CollectionChanged += OnToolbarTilesCollectionChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] OnToolbarTilesCollectionChanged(null, null);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] _toolbarState.Tiles.CollectionChanged -= OnToolbarTilesCollectionChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] private void OnToolbarTilesCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] tile.CollectionChanged -= OnToolbarTilesChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] tile.CollectionChanged += OnToolbarTilesChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] private void OnToolbarTilesChanged(object? sender, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] private void InventoryItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] ((INotifyCollectionChanged)InventoryItems).CollectionChanged += FilteredItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _model.Items.CollectionChanged += ItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] ((INotifyCollectionChanged)InventoryItems).CollectionChanged -= FilteredItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _model.Items.CollectionChanged -= ItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private void ItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] if (e == null || e.Action == NotifyCollectionChangedAction.Reset)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] else if (e.Action == NotifyCollectionChangedAction.Add)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] else if (e.Action == NotifyCollectionChangedAction.Remove)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private void FilteredItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] Inventories.CollectionChanged += delegate(object? _, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] if (e.Action == NotifyCollectionChangedAction.Reset)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] StreamedModel.Entities.CollectionChanged += OnEntitiesCollectionChanged;
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] StreamedModel.Entities.CollectionChanged -= OnEntitiesCollectionChanged;
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] private void OnEntitiesCollectionChanged(object? collection, NotifyCollectionChangedEventArgs args)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] case NotifyCollectionChangedAction.Add:
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] case NotifyCollectionChangedAction.Remove:
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] typeof(InventoryModel).GetMethod("OnItemsCollectionChanged", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[2]
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] typeof(NotifyCollectionChangedEventArgs)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] Items.CollectionChanged += OnItemsCollectionChanged;
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] private void OnItemsCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)

### ObservableCollection
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] private ReadOnlyObservableCollection<InventoryViewModel> _inventories;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] public ReadOnlyObservableCollection<InventoryViewModel> Inventories => _inventories;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] foreach (ObservableCollection<ToolbarTile> tile in _toolbarState.Tiles)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private ReadOnlyObservableCollection<InventoryContainerViewModel> _filteredInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] public ReadOnlyObservableCollection<InventoryContainerViewModel> InventoryContainers => _filteredInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private ReadOnlyObservableCollection<InventoryItemModel> _items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public ReadOnlyObservableCollection<InventoryItemModel> InventoryItems => _items;

### Clear(
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] allInventories.Clear();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] _inventoryCache.Clear();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] _sortedContainers.Clear();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] Clear();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] public void Clear()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] _inventoryContainers.Clear();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] PrimaryFilters.Clear();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] Clear();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] PrimaryFilters.Clear();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] list.Clear();
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] container.Inventories.Clear();

### Add(
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory] children.Add(textBlock);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory] textBlock4.Classes.Add("SubTitle");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory] children2.Add(grid6);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory] columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory] columnDefinitions.Add(new ColumnDefinition(new GridLength(50.0, GridUnitType.Pixel)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory] columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory] children3.Add(inventoryList);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory] children4.Add(inventoryList6);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("AllInventoriesKey", typeof(LocKey))).Add(new MemberData("AllConnectedInventoriesKey", typeof(LocKey))).Add(new MemberData("NoneFilterKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("AllSourcesKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("CharacterSourceKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("CharacterInventoryKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("FilteredInventoryKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("FullInventoryKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("InventoryMissingKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("ToggleShowEmptyKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("ToggleHideEmptyKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("ShowConnectedInventoriesOnlyKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("ShowAllInventoriesKey", typeof(LocKey)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] .Add(new MemberData("DisabledInventoryTooltip", typeof(LocKey)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryConfigurationObjectBuilder_Migrations] builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] tasks.Add(CreateInventoryContainerViewModel(interactorInventoryContainer));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] tasks.Add(CreateInventoryContainerViewModel(interactedInventoryContainer));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] rowDefinitions.Add(new RowDefinition(new GridLength(30.0, GridUnitType.Pixel)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] rowDefinitions.Add(new RowDefinition(new GridLength(1.0, GridUnitType.Star)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] columnDefinitions.Add(new ColumnDefinition(new GridLength(25.0, GridUnitType.Pixel)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] columnDefinitions.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children.Add(image);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children2.Add(textBlock);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children3.Add(stackPanel);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children4.Add(stackPanel6);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children5.Add(formattedTextBlock);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children6.Add(textBlock6);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children7.Add(formattedTextBlock6);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children8.Add(progressBar);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] progressBar4.Classes.Add("Simple");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] bindings.Add(item);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] bindings2.Add(item2);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children9.Add(image6);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children10.Add(inventoryGrid);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] columnDefinitions.Add(new ColumnDefinition(new GridLength(6.0, GridUnitType.Pixel)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] children.Add(border);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] _inventoryCache.Add(inventoryViewModel);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("OnTerminalScreenToggleAudio", typeof(StringId?))).Add(new MemberData("TerminalScreenToggleParameter", typeof(StringId))).Add(new MemberData("TerminalScreenToggleParameterOffValue", typeof(StringId)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnObjectClickAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnChangeToolbarAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnToolbarTileSelectedAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnToolbarTileActivatedAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnToolbarTileDeselectedAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnChangeToolbarTileAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnRemoveToolbarTileAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnSelectGScreenTileAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnSearchGScreenAddAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnSearchGScreenRemoveAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnQuickMenuOpenAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnQuickMenuClosedAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnObjectDropAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnProductionItemAddedAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnProductionErrorAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnInventoryFullAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnCharacterInventoryFullAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("CharacterInventory", typeof(InventoryDefinition)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnOpenRareLootContainerAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnBackpackProductionStartAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnToolbarLoadUnloadAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnToolbarLoadUnloadParameter", typeof(StringId)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnToolbarLoadUnloadParameterOnValue", typeof(StringId)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnToolbarLoadUnloadParameterOffValue", typeof(StringId)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] rowDefinitions.Add(new RowDefinition(new GridLength(50.0, GridUnitType.Pixel)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] rowDefinitions.Add(new RowDefinition(new GridLength(1.0, GridUnitType.Star)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] columnDefinitions.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] columnDefinitions.Add(new ColumnDefinition(new GridLength(63.0, GridUnitType.Pixel)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] children.Add(grid6);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] columnDefinitions2.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] columnDefinitions2.Add(new ColumnDefinition(new GridLength(1.0, GridUnitType.Star)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] columnDefinitions2.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] columnDefinitions2.Add(new ColumnDefinition(new GridLength(8.0, GridUnitType.Pixel)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] columnDefinitions2.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] columnDefinitions2.Add(new ColumnDefinition(new GridLength(8.0, GridUnitType.Pixel)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] columnDefinitions2.Add(new ColumnDefinition(new GridLength(0.0, GridUnitType.Auto)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] children2.Add(carousel);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] carousel4.Classes.Add("SubTitle");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] children3.Add(textBox);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] textBox4.Classes.Add("SearchBox");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] children4.Add(button);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] button5.Classes.Add("SmallButton");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] button5.Classes.Add("ShowHideEmptyButton");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] children5.Add(button6);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] button9.Classes.Add("SmallButton");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] button9.Classes.Add("ShowAllInventoriesButton");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] children6.Add(beveledBorder);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] beveledBorder2.Classes.Add("PrimaryPanel");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] children7.Add(beveledBorder3);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] beveledBorder6.Classes.Add("PrimaryBorder");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] itemsControl4.Classes.Add("InventoryListBox");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] _inventoryContainers.Add(inventory);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] set.Add(item.RootEntity);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] primaryFilters.Add(new InventoryPrimaryFilterViewModel(type, displayName, entity));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] _entityToContainer.Add(tuple.Item2, result);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] pooledSet.Add(val.Guid);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations] builder.Add(new MigrationInfo(new Version(2, 0, 1, 5822), Migrate_2_0_1_5822));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations] Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("AccessedCombinedNameFormat", typeof(UnknownType))).Add(new MemberData("DefaultInventoryName", typeof(LocKey))).Add(new MemberData("CombinedNameFormat", typeof(LocKey)))
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations] .Add(new MemberData("DefaultEntityName", typeof(LocKey)))
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations] .Add(new MemberData("DefaultDropDistance", typeof(float)));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations] builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations] builder.Add(new VersionLayoutDelta(new Version(2, 0, 1, 5822), Version_2_0_1_5822_Delta));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferData_Migrations] Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("Item", typeof(ItemDefinition))).Add(new MemberData("TransferredAmount", typeof(FixedPoint))).Add(new MemberData("TotalAmount", typeof(FixedPoint)));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferData_Migrations] builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferEvent_Migrations] Version_0_0_0_0_Delta = TypeStructureDelta.Static.Add(new MemberData("Inventory", typeof(InventoryDefinition))).Add(new MemberData("Item", typeof(ItemTransferData?))).Add(new MemberData("Result", typeof(ItemTransferResult)));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferEvent_Migrations] builder.Add(new VersionLayoutDelta(VersionExtensions.MinVersion, Version_0_0_0_0_Delta));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] public void Add(Entity entity)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] _inventoryData.Add(entity, inventoryData);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] _replicables.Add(inventoryFullnessModelServer, _replication?.RegisterObservable(inventoryFullnessModelServer));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] return _rootAttachments.GetOrAdd(model);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] _rootAttachments.Add(model, root);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] ((InventoryFullnessModelServer)model).Add(entity);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] items.Add(new InventoryItemModelImpl

### Reset
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] if (e == null || e.Action == NotifyCollectionChangedAction.Reset)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public void ResetStackableItems()
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] if (e.Action == NotifyCollectionChangedAction.Reset)

### Refresh
  <none>

### Rebuild
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] RebuildPrimaryFiltersList();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private void RebuildPrimaryFiltersList()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] using (Profiler.Begin("Terminal.Inventory.RebuildPrimaryFilters", Profiler.Color.Null, 264, "C:\\BuildAgent\\work\\22d44cc391f3755\\KeenSWH\\Stable_VS2.4\\Game2\\Sources\\Game2.Client\\UI\\TerminalScreen\\Inventory\\InventoryListViewModel.cs"))

### Update
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private readonly SemaphoreSlim _updateInventoryLock = new SemaphoreSlim(1, 1);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private bool _updateInventoriesRequested;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] UpdateInventoriesDebouncedAsync().SkipWait();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] UpdateInventoriesDebouncedAsync().SkipWait();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private async Task UpdateInventoriesDebouncedAsync()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] _updateInventoriesRequested = true;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] if (!(await _updateInventoryLock.WaitAsync(0)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] while (_updateInventoriesRequested)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] _updateInventoriesRequested = false;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] await UpdateInventoriesAsync();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] _updateInventoryLock.Release();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private async Task UpdateInventoriesAsync()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] UpdateContent();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] UpdateContent();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] UpdateContent();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] UpdateContent();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] private void UpdateContent()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] UpdateShowConnectedInventoriesTooltip();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] UpdateShowEmptyInventoriesTooltip();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] UpdateShowEmptyInventoriesTooltip();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] UpdateShowConnectedInventoriesTooltip();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private void UpdateShowEmptyInventoriesTooltip()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private void UpdateShowConnectedInventoriesTooltip()
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] /// Server-only class that updates inventory content when <see cref="T:Keen.Game2.Simulation.WorldObjects.Items.InventoryComponent.InventoryData" /> changes
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] private class UpdateInventory : JobGroup
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] string documentation = "Server-only class that updates inventory content when <see cref=\"Keen.Game2.Simulation.WorldObjects.Items.InventoryComponent.InventoryData\"/> changes";
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] typeof(InventoryModelImpl).GetMethod("Update", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] public void Update()
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] [UpdateInventory]
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] inventory.Update();
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] ModelWithDataUpdate.AttachNewToEntity((InventoryModelImpl)inventory2, entity.Data);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] for (; arraySegmentEnumerator.MoveNext(); inventoryModelImpl = new InventoryModelImpl(inventory, _configuration, isConnected, isAccessed), inventoryModelImpl.Update(), container.Inventories.Add(inventoryModelImpl))
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] ModelWithDataUpdate.DetachFromEntity((InventoryModelImpl)inventory, value.Data);

### InventoryItemModel
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] private BehaviorSubject<Func<InventoryItemModel, bool>> _itemFilter = new BehaviorSubject<Func<InventoryItemModel, bool>>((InventoryItemModel x) => true);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] _itemFilter.OnNext((InventoryItemModel _) => true);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] Func<InventoryItemModel, bool> value = _itemFilter.Value;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] _itemFilter.OnNext((InventoryItemModel _) => true);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] _itemFilter.OnNext((InventoryItemModel x) => string.IsNullOrWhiteSpace(_searchQuery) || x.Name.ToString().Contains(_searchQuery, StringComparison.OrdinalIgnoreCase));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] bool flag2 = inventory.InventoryItems.Any((InventoryItemModel item) => item.Name.ToString().Contains(_searchQuery, StringComparison.OrdinalIgnoreCase));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] enumerable = _containers.Where((InventoryContainerModel c) => filters.Aggregate(seed: true, (bool current, string filter) => current && c.DisplayName.EvaluateText().Contains(filter, StringComparison.InvariantCultureIgnoreCase)) || c.Inventories.Any((InventoryModel inv) => inv.Items.Any((InventoryItemModel item) => filters.Aggregate(seed: true, (bool current, string filter) => current && item.Name.EvaluateText().Contains(filter, StringComparison.InvariantCultureIgnoreCase)))));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] foreach (InventoryItemModel inventoryItem in _inventory.InventoryItems)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] object obj = e.Data.Get("InventoryItemModel");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] InventoryItemModel inventoryItemModel = (e.Source as IDataContextProvider)?.DataContext as InventoryItemModel;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] if (obj is VRageDataObject.ExternalData && ((VRageDataObject.ExternalData)obj).InternalValue is InventoryItemModel inventoryItemModel2 && base.DataContext is InventoryViewModel inventoryViewModel && inventoryItemModel2 != inventoryItemModel)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] if (inventoryItemModel != null)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] int num = inventoryViewModel.Model.Items.IndexOf(inventoryItemModel);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] await terminalScreenViewModel.TransferItemAsync(inventoryViewModel.Model, inventoryItemModel2, targetSlot);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] InventoryItemModel datapad = (e.Source as IDataContextProvider)?.DataContext as InventoryItemModel;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] public static readonly StyledProperty<InventoryItemModel?> ItemProperty = AvaloniaProperty.Register<InventoryItem, InventoryItemModel>("Item");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] public InventoryItemModel? Item
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] InventoryItemModel item = inventoryItem.Item;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] vRageDataObject.SetInternal("InventoryItemModel", Item);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] InventoryItemModel item = Item;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] object obj = e.Data.Get("InventoryItemModel");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] if (obj is VRageDataObject.ExternalData && ((VRageDataObject.ExternalData)obj).InternalValue is InventoryItemModel inventoryItemModel)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] bool flag = !(base.DataContext is InventoryItemModel inventoryItemModel2) || inventoryItemModel2.Definition == inventoryItemModel.Definition;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItemEventArgs] public InventoryItemModel Item { get; }
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItemEventArgs] public InventoryItemEventArgs(InventoryItemModel item, EventType type)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private ReadOnlyObservableCollection<InventoryItemModel> _items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private SourceList<InventoryItemModel> _itemsCache = new SourceList<InventoryItemModel>();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public ReadOnlyObservableCollection<InventoryItemModel> InventoryItems => _items;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public InventoryViewModel(Session session, InventoryModel model, BehaviorSubject<Func<InventoryItemModel, bool>> itemFilter, InventoryContainerViewModel? parentContainer)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _itemsCache.Edit(delegate(IExtendedList<InventoryItemModel> list)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _itemsCache.AddRange(e.NewItems.Cast<InventoryItemModel>());
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _itemsCache.RemoveMany(e.OldItems.Cast<InventoryItemModel>());
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public void HighlightStackableItems(InventoryItemModel item)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] foreach (InventoryItemModel item2 in Model.Items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] foreach (InventoryItemModel item in Model.Items)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ITerminalInventory] Task<(ItemTransferResult Reason, FixedPoint Amount, FixedPoint Total)> TransferAsync(InventoryItemModel item, InventoryModel target, InteractionInfo interactionInfo, FixedPoint? amount, int? targetSlot = null);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ITerminalInventory] Task<bool> DropItemAsync(InventoryItemModel item, InteractionInfo interactionInfo);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] public class InventoryItemModel : ObservableObject, IAccessible
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("Definition", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("Name", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("IsNameVisible", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("Description", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("Icon", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetField("_amount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("Amount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetField("_price", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("Price", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetField("_dragAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("DragAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("HasError", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("TotalMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetField("_metaData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("MetaData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetField("_stackable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("Stackable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetField("_disabled", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("Disabled", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("DisableReason", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetField("_new", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetMethod("Disable", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[1] { typeof(LocKey) }, null),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] typeof(InventoryItemModel).GetProperty("New", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] Value = new AccessibleTypeInfo(typeof(InventoryItemModel), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, ItemDefinition>("Definition", "Definition", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Definition", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ItemDefinition), () => ItemDefinition.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.Definition, delegate(InventoryItemModel instance, in ItemDefinition value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, LocalizableText>("Name", "Name", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Name", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocalizableText), () => LocalizableText.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.Name, null, null);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, bool>("IsNameVisible", "IsNameVisible", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("IsNameVisible", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.IsNameVisible, null, null);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, LocKey>("Description", "Description", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Description", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.Description, null, null);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, ResourceHandle<PngAsset>>("Icon", "Icon", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Icon", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ResourceHandle<PngAsset>), null, (InventoryItemModel instance) => instance.Icon, null, null);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, FixedPoint>("_amount", "_amount", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_amount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryItemModel instance) => instance._amount, delegate(InventoryItemModel instance, in FixedPoint value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] }, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._amount));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, FixedPoint>("Amount", "Amount", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Amount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.Amount, delegate(InventoryItemModel instance, in FixedPoint value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, float>("_price", "_price", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_price", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(float), null, (InventoryItemModel instance) => instance._price, delegate(InventoryItemModel instance, in float value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] }, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._price));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, float>("Price", "Price", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Price", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(float), null, (InventoryItemModel instance) => instance.Price, delegate(InventoryItemModel instance, in float value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, FixedPoint?>("_dragAmount", "_dragAmount", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_dragAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(FixedPoint)), (InventoryItemModel instance) => instance._dragAmount, delegate(InventoryItemModel instance, in FixedPoint? value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] }, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._dragAmount));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, FixedPoint?>("DragAmount", "DragAmount", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("DragAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(FixedPoint)), (InventoryItemModel instance) => instance.DragAmount, delegate(InventoryItemModel instance, in FixedPoint? value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, bool>("HasError", "HasError", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("HasError", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.HasError, null, null);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, FixedPoint>("TotalMass", "TotalMass", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("TotalMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(FixedPoint), () => FixedPoint.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.TotalMass, null, null);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, object>("_metaData", "_metaData", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_metaData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(object), null, (InventoryItemModel instance) => instance._metaData, delegate(InventoryItemModel instance, in object? value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] }, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._metaData));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, object>("MetaData", "MetaData", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("MetaData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(object), null, (InventoryItemModel instance) => instance.MetaData, delegate(InventoryItemModel instance, in object? value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, bool>("_stackable", "_stackable", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_stackable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance._stackable, delegate(InventoryItemModel instance, in bool value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] }, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._stackable));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, bool>("Stackable", "Stackable", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Stackable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.Stackable, delegate(InventoryItemModel instance, in bool value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, bool>("_disabled", "_disabled", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_disabled", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance._disabled, delegate(InventoryItemModel instance, in bool value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] }, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._disabled));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, bool>("Disabled", "Disabled", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("Disabled", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.Disabled, delegate(InventoryItemModel instance, in bool value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, LocKey>("DisableReason", "DisableReason", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("DisableReason", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(LocKey), () => LocKey.TypeInfoHolder.Value, (InventoryItemModel instance) => instance.DisableReason, delegate(InventoryItemModel instance, in LocKey value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, bool>("_new", "_new", SerializerFormatSet.None, typeof(InventoryItemModel).GetField("_new", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance._new, delegate(InventoryItemModel instance, in bool value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] }, (InventoryItemModel instance) => ref Unsafe.AsRef(in instance._new));
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] return new ClassMemberAccessor<InventoryItemModel, bool>("New", "New", SerializerFormatSet.None, typeof(InventoryItemModel).GetProperty("New", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(bool), null, (InventoryItemModel instance) => instance.New, delegate(InventoryItemModel instance, in bool value)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] return new ClassMemberAccessor<InventoryModel, ObservableList<InventoryItemModel>>("Items", "Items", SerializerFormatSet.None, typeof(InventoryModel).GetProperty("Items", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(ObservableList<InventoryItemModel>), null, (InventoryModel instance) => instance.Items, null, null);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] public FixedPoint Mass => Items.Sum((InventoryItemModel x) => x.Amount * x.Definition.MassPerUnit);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] public ObservableList<InventoryItemModel> Items { get; } = new ObservableList<InventoryItemModel>();
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] foreach (InventoryItemModel oldItem in e.OldItems)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] foreach (InventoryItemModel newItem in e.NewItems)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] foreach (InventoryItemModel item2 in Items)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] foreach (InventoryItemModel item2 in Items)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] foreach (InventoryItemModel item in Items)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] public class InventoryItemModelImpl : InventoryItemModel
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] ObservableList<InventoryItemModel> items = base.Items;
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] items.Add(new InventoryItemModelImpl
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] public Task<(ItemTransferResult, FixedPoint, FixedPoint)> TransferAsync(InventoryItemModel item, InventoryModel target, InteractionInfo interactionInfo, FixedPoint? amount, int? targetSlot)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] public Task<bool> DropItemAsync(InventoryItemModel item, InteractionInfo interactionInfo)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] private async NetworkStory<bool> RequestDropItem(InventoryItemModel item, InteractionInfo interactionInfo, Vector3 spawnOffset = default(Vector3))
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] InventoryItemModelImpl inventoryItemModelImpl = (InventoryItemModelImpl)item;
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] InventoryComponent from = ((InventoryModelImpl)inventoryItemModelImpl.Inventory).Component;
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] int itemIndex = inventoryItemModelImpl.Inventory.Items.IndexOf(item);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] private async NetworkStory<(ItemTransferResult, FixedPoint, FixedPoint)> RequestItemTransfer(SkipOnReplicationFail<InventoryItemModel> itemModel, SkipOnReplicationFail<InventoryModel> targetModel, SkipOnReplicationFail<InteractionInfo> interactionInfo, FixedPoint? amount, int? targetSlot)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] InventoryItemModel item = itemModel.Value;
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] InventoryItemModelImpl inventoryItemModelImpl = (InventoryItemModelImpl)item;
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] int itemIndex = inventoryItemModelImpl.Inventory.Items.IndexOf(item);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] InventoryComponent from = ((InventoryModelImpl)inventoryItemModelImpl.Inventory).Component;

### InventoryContainer
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private ObservableList<InventoryContainerModel>? _interactedInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private ObservableList<InventoryContainerModel>? _interactorInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private ObservableList<InventoryContainerModel>? InteractedInventoryContainers
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] return _interactedInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] SetInventoryContainer(ref _interactedInventoryContainers, value);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private ObservableList<InventoryContainerModel>? InteractorInventoryContainers
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] return _interactorInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] SetInventoryContainer(ref _interactorInventoryContainers, value);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] InteractorInventoryContainers = interaction.InteractorInventoryView?.InventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] InteractedInventoryContainers = interaction.InteractedInventoryView?.InventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] ObservableList<InventoryContainerModel>? interactorInventoryContainers = InteractorInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] if (interactorInventoryContainers == null || interactorInventoryContainers.Count <= 0)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] ObservableList<InventoryContainerModel>? interactedInventoryContainers = InteractedInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] if (interactedInventoryContainers == null || interactedInventoryContainers.Count <= 0)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] InteractedInventoryContainers = null;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] InteractorInventoryContainers = null;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] foreach (InventoryContainerViewModel inventoryContainer in vm.InventoryContainers)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] foreach (InventoryViewModel inventory in inventoryContainer.Inventories)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private void SetInventoryContainer(ref ObservableList<InventoryContainerModel>? field, ObservableList<InventoryContainerModel>? value)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] field.CollectionChanged -= InventoryContainersChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] field.CollectionChanged += InventoryContainersChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] InteractorInventoryContainers = Interaction.InteractorInventoryView?.InventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] InteractedInventoryContainers = Interaction.InteractedInventoryView?.InventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private void InventoryContainersChanged(object? sender, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] using PooledList<Task<InventoryContainerViewModel?>> tasks = new PooledList<Task<InventoryContainerViewModel>>();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] if (InteractorInventoryContainers != null)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] foreach (InventoryContainerModel interactorInventoryContainer in InteractorInventoryContainers)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] tasks.Add(CreateInventoryContainerViewModel(interactorInventoryContainer));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] if (InteractedInventoryContainers != null)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] foreach (InventoryContainerModel interactedInventoryContainer in InteractedInventoryContainers)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] tasks.Add(CreateInventoryContainerViewModel(interactedInventoryContainer));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] using PooledList<InventoryContainerViewModel> allInventories = new PooledList<InventoryContainerViewModel>();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] PooledList<InventoryContainerViewModel> pooledList = allInventories;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] LeftInventory.SetInventories(CopyVMs(allInventories.Where(delegate(InventoryContainerViewModel inv)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] RightInventory.SetInventories(CopyVMs(allInventories.Where((InventoryContainerViewModel inv) => !inv.IsTrader && !inv.IsCharacter)));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] allInventories.ForEach(delegate(InventoryContainerViewModel inv)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] RightInventory.SetInventories(Array.Empty<InventoryContainerViewModel>());
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private IEnumerable<InventoryContainerViewModel> CopyVMs(IEnumerable<InventoryContainerViewModel> source)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] foreach (InventoryContainerViewModel item in source)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] yield return new InventoryContainerViewModel(item.Entity, item.Model, _factory, item.IsTrader);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private async Task<InventoryContainerViewModel?> CreateInventoryContainerViewModel(InventoryContainerModel model)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] return new InventoryContainerViewModel(entity, model, _factory, trader);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private IComparable InventoriesSortMethod(InventoryContainerViewModel x)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] /// Control for <see cref="T:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel" />
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] public class InventoryContainer : UserControl
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer> context = new CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer>(P_0, new object[1] { !AvaloniaResources.NamespaceInfo:/UI/TerminalScreen/Inventory/InventoryContainer.axaml.Singleton }, "avares://Game2.Client/UI/TerminalScreen/Inventory/InventoryContainer.axaml");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] context.RootObject = (InventoryContainer)service;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer> context = new CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer>(P_0, new object[1] { !AvaloniaResources.NamespaceInfo:/UI/TerminalScreen/Inventory/InventoryContainer.axaml.Singleton }, "avares://Game2.Client/UI/TerminalScreen/Inventory/InventoryContainer.axaml");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] context.RootObject = (InventoryContainer)service;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] public InventoryContainer()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] static void !XamlIlPopulate(IServiceProvider P_0, InventoryContainer P_1)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer> context = new CompiledAvaloniaXaml.XamlIlContext.Context<InventoryContainer>(P_0, new object[1] { !AvaloniaResources.NamespaceInfo:/UI/TerminalScreen/Inventory/InventoryContainer.axaml.Singleton }, "avares://Game2.Client/UI/TerminalScreen/Inventory/InventoryContainer.axaml");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] CompiledBindingExtension compiledBindingExtension = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel,Game2.Client.ToolTipText!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] CompiledBindingExtension compiledBindingExtension3 = new CompiledBindingExtension(new CompiledBindingPathBuilder().Property(CompiledAvaloniaXaml.XamlIlHelpers.Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel,Game2.Client.Inventories!Property(), PropertyInfoAccessorFactory.CreateInpcPropertyAccessor).Build());
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainer] private static void !XamlIlPopulateTrampoline(InventoryContainer P_0)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] public class InventoryContainerViewModel : AttachedViewModel
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] public InventoryContainerModel Model { get; }
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] public InventoryContainerViewModel(Entity entity, InventoryContainerModel model, IViewModelFactory factory, bool trader)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] public class InventoryContainers : TemplatedControl
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] public static readonly DirectProperty<InventoryContainers, ObservableList<InventoryContainerModel>?> ContainersProperty = AvaloniaProperty.RegisterDirect("Containers", (InventoryContainers o) => o.Containers, delegate(InventoryContainers o, ObservableList<InventoryContainerModel>? v)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] public static readonly DirectProperty<InventoryContainers, bool> FilterEnabledProperty = AvaloniaProperty.RegisterDirect("FilterEnabled", (InventoryContainers o) => o.FilterEnabled, delegate(InventoryContainers o, bool v)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] public static readonly StyledProperty<InventoryContainerModel?> FocusedContainerProperty = AvaloniaProperty.Register<InventoryContainers, InventoryContainerModel>("FocusedContainer");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] public static readonly StyledProperty<string> SearchQueryProperty = AvaloniaProperty.Register<InventoryContainers, string>("SearchQuery", string.Empty);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] private ObservableList<InventoryContainerModel>? _containers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] private ObservableList<InventoryContainerModel> _sortedContainers = new ObservableList<InventoryContainerModel>();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] private ObservableList<InventoryContainerModel>? Containers
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] private InventoryContainerModel? FocusedContainer
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] using (PooledList<InventoryContainerModel> pooledList = new PooledList<InventoryContainerModel>(_containers.Count))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] IEnumerable<InventoryContainerModel> enumerable;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] IEnumerable<InventoryContainerModel> containers = _containers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] enumerable = _containers.Where((InventoryContainerModel c) => filters.Aggregate(seed: true, (bool current, string filter) => current && c.DisplayName.EvaluateText().Contains(filter, StringComparison.InvariantCultureIgnoreCase)) || c.Inventories.Any((InventoryModel inv) => inv.Items.Any((InventoryItemModel item) => filters.Aggregate(seed: true, (bool current, string filter) => current && item.Name.EvaluateText().Contains(filter, StringComparison.InvariantCultureIgnoreCase)))));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] IEnumerable<InventoryContainerModel> items = enumerable;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] int ContainersComparator(InventoryContainerModel a, InventoryContainerModel b)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] context.IntermediateRoot = new InventoryContainer();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] InventoryContainer inventoryContainer = (InventoryContainer)intermediateRoot;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] context.PushParent(inventoryContainer);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] DynamicSetters_1230.DynamicSetter_1(inventoryContainer, binding);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] ReflectionBindingExtension reflectionBindingExtension12 = new ReflectionBindingExtension("InventoryContainers");
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] /// Primary filter to narrow down <see cref="F:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel._filteredInventoryContainers" /> to selected source (character, grid, etc)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private Subject<Func<InventoryContainerViewModel, bool>> _primaryFilter = new Subject<Func<InventoryContainerViewModel, bool>>();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] /// Filter to narrow down <see cref="F:Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel._filteredInventoryContainers" /> using input search query and show-empty-only flag
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private Subject<Func<InventoryContainerViewModel, bool>> _secondaryFilters = new Subject<Func<InventoryContainerViewModel, bool>>();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private ReadOnlyObservableCollection<InventoryContainerViewModel> _filteredInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private SourceList<InventoryContainerViewModel> _inventoryContainers = new SourceList<InventoryContainerViewModel>();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private IDisposable _inventoryContainersSubscription;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] public ReadOnlyObservableCollection<InventoryContainerViewModel> InventoryContainers => _filteredInventoryContainers;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] foreach (InventoryContainerViewModel item in _inventoryContainers.Items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] public InventoryListViewModel(Func<InventoryContainerViewModel, IComparable> invSortMethod, Func<InventoryPrimaryFilterViewModel, IComparable> primaryFilterSortMethod, IViewModelFactory factory)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] _inventoryContainersSubscription = _inventoryContainers.Connect().Filter(_primaryFilter).Filter(_secondaryFilters)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] .Sort(SortExpressionComparer<InventoryContainerViewModel>.Ascending(invSortMethod), SortOptions.None, _primaryFilter.Select((Func<InventoryContainerViewModel, bool> _) => default(Unit)).Merge(_secondaryFilters.Select((Func<InventoryContainerViewModel, bool> _) => default(Unit))))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] .Bind(out _filteredInventoryContainers)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] _secondaryFilters.OnNext(delegate(InventoryContainerViewModel inventory)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] private bool PassPrimaryFilter(InventoryContainerViewModel inventory)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] _inventoryContainersSubscription.Dispose();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] foreach (InventoryContainerViewModel item in _inventoryContainers.Items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] _inventoryContainers.Clear();
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] public void SetInventories(IEnumerable<InventoryContainerViewModel> inventories)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] foreach (InventoryContainerViewModel inventory in inventories)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] _inventoryContainers.Add(inventory);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] if (_inventoryContainers.Count > 0)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryListViewModel] foreach (InventoryContainerViewModel item in _inventoryContainers.Items)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private InventoryContainerViewModel? _parentContainer;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] public InventoryViewModel(Session session, InventoryModel model, BehaviorSubject<Func<InventoryItemModel, bool>> itemFilter, InventoryContainerViewModel? parentContainer)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ITerminalInventory] /// Creates <see cref="T:Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel" /> for the given <see cref="T:Keen.VRage.Multiplayer.SecureIds.EntityId" />, fills it with data, and starts replicating it.
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ITerminalInventory] Task<InventoryContainerModel> Attach(EntityId entity, InteractionInfo? interactionInfo = null);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ITerminalInventory] /// Stops replication of the given <see cref="T:Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel" />.
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ITerminalInventory] void Detach(InventoryContainerModel container, InventoryListModelStreamed list);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] public class InventoryContainerModel : ObservableObject, IAccessible
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetProperty("EntityId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetField("_displayName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetField("DebugName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetProperty("Mass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetProperty("MaxMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetProperty("Inventories", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetProperty("ShownInventories", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetProperty("LeakedId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetMethod("OnPropertiesChanged", 0, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[2]
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] typeof(InventoryContainerModel).GetProperty("DisplayName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] Value = new AccessibleTypeInfo(typeof(InventoryContainerModel), documentation, RawAccessors, builder3.ToImmutable(), builder.ToImmutable(), builder2.ToImmutable());
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] return new ClassMemberAccessor<InventoryContainerModel, EntityId>("EntityId", "EntityId", SerializerFormatSet.None, typeof(InventoryContainerModel).GetProperty("EntityId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(EntityId), null, (InventoryContainerModel instance) => instance.EntityId, delegate(InventoryContainerModel instance, in EntityId value)

### Virtual
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] public virtual AccessibleTypeInfo GetTypeInfo()
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryFullnessModel] public virtual AccessibleTypeInfo GetTypeInfo()
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryItemModel] public virtual AccessibleTypeInfo GetTypeInfo()
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModelStreamed] public virtual AccessibleTypeInfo GetTypeInfo()
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] public virtual bool ShowInStats { get; protected set; }
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] public virtual InventoryDefinition Definition { get; protected set; }
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] public virtual AccessibleTypeInfo GetTypeInfo()
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferData] public virtual void SerializeMembers(ref JsonSerializationContext destination, object value, SerializerFlags flags = SerializerFlags.None)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferData] public virtual void DeserializeMembers(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferEvent] public virtual void SerializeMembers(ref JsonSerializationContext destination, object value, SerializerFlags flags = SerializerFlags.None)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.ItemTransferEvent] public virtual void DeserializeMembers(ref JsonDeserializationContext source, ref object? value, SerializerFlags flags = SerializerFlags.None)

### WrapPanel
  <none>

### ListBox
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryList] itemsControl4.Classes.Add("InventoryListBox");

### INotifyCollectionChanged
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] ((INotifyCollectionChanged)InventoryItems).CollectionChanged += FilteredItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] ((INotifyCollectionChanged)InventoryItems).CollectionChanged -= FilteredItemsChanged;

### Replace
  <none>

### Remove
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventory] RemoveHandler(InventoryItem.ActionEventProperty, OnActionHappen);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] void IInSceneListener.OnBeforeRemovedFromScene()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] _configuration.OnRemoveToolbarTileAudioEvent?.Play(_audio);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] "OnTerminalScreenToggleAudio", "TerminalScreenToggleParameter", "TerminalScreenToggleParameterOffValue", "OnObjectClickAudio", "OnChangeToolbarAudio", "OnToolbarTileSelectedAudio", "OnToolbarTileActivatedAudio", "OnToolbarTileDeselectedAudio", "OnChangeToolbarTileAudio", "OnRemoveToolbarTileAudio",
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] "OnSelectGScreenTileAudio", "OnSearchGScreenAddAudio", "OnSearchGScreenRemoveAudio", "OnQuickMenuOpenAudio", "OnQuickMenuClosedAudio", "OnObjectDropAudio", "OnProductionItemAddedAudio", "OnProductionErrorAudio", "OnInventoryFullAudio", "OnCharacterInventoryFullAudio",
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] ("OnRemoveToolbarTileAudio", OnRemoveToolbarTileAudioAccessor()),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] ("OnSearchGScreenRemoveAudio", OnSearchGScreenRemoveAudioAccessor()),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] ("OnRemoveToolbarTileAudioEvent", OnRemoveToolbarTileAudioEventAccessor()),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] ("OnSearchGScreenRemoveAudioEvent", OnSearchGScreenRemoveAudioEventAccessor()),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnRemoveToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenRemoveAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnRemoveToolbarTileAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenRemoveAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] "Audio event to play when toolbar a toolbar tile is removed One-shot sound"
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] "Audio event to play when a character is removed from the GScreen search query One-shot sound"
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] private static IMemberAccessor OnRemoveToolbarTileAudioAccessor()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnRemoveToolbarTileAudio", "OnRemoveToolbarTileAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnRemoveToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnRemoveToolbarTileAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] instance.OnRemoveToolbarTileAudio = value;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] private static IMemberAccessor OnSearchGScreenRemoveAudioAccessor()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, StringId?>("OnSearchGScreenRemoveAudio", "OnSearchGScreenRemoveAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenRemoveAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnSearchGScreenRemoveAudio, delegate(InventoryEffectsSessionComponentConfiguration instance, in StringId? value)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] instance.OnSearchGScreenRemoveAudio = value;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] private static IMemberAccessor OnRemoveToolbarTileAudioEventAccessor()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnRemoveToolbarTileAudioEvent", "OnRemoveToolbarTileAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnRemoveToolbarTileAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnRemoveToolbarTileAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] instance.OnRemoveToolbarTileAudioEvent = value;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] private static IMemberAccessor OnSearchGScreenRemoveAudioEventAccessor()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] return new ClassMemberAccessor<InventoryEffectsSessionComponentConfiguration, AudioEvent?>("OnSearchGScreenRemoveAudioEvent", "OnSearchGScreenRemoveAudioEvent", SerializerFormatSet.None, typeof(InventoryEffectsSessionComponentConfiguration).GetProperty("OnSearchGScreenRemoveAudioEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(AudioEvent?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(AudioEvent)), (InventoryEffectsSessionComponentConfiguration instance) => instance.OnSearchGScreenRemoveAudioEvent, delegate(InventoryEffectsSessionComponentConfiguration instance, in AudioEvent? value)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] instance.OnSearchGScreenRemoveAudioEvent = value;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] /// Audio event to play when toolbar a toolbar tile is removed
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] public StringId? OnRemoveToolbarTileAudio { get; private set; }
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] /// Audio event to play when a character is removed from the GScreen search query
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] public StringId? OnSearchGScreenRemoveAudio { get; private set; }
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] public AudioEvent? OnRemoveToolbarTileAudioEvent { get; private set; }
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] public AudioEvent? OnSearchGScreenRemoveAudioEvent { get; private set; }
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] onTerminalScreenToggleAudio = OnRemoveToolbarTileAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] OnRemoveToolbarTileAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] onTerminalScreenToggleAudio = OnSearchGScreenRemoveAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] OnSearchGScreenRemoveAudioEvent = AudioEvent.FromString(onTerminalScreenToggleAudio.HasValue ? ((string)onTerminalScreenToggleAudio.GetValueOrDefault()) : null);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] OnRemoveToolbarTileAudio = builder.OnRemoveToolbarTileAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] OnSearchGScreenRemoveAudio = builder.OnSearchGScreenRemoveAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] OnRemoveToolbarTileAudio = instance.OnRemoveToolbarTileAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfiguration] OnSearchGScreenRemoveAudio = instance.OnSearchGScreenRemoveAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] if ("OnRemoveToolbarTileAudio"u8.SequenceEqual(property))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags21);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] if ("OnSearchGScreenRemoveAudio"u8.SequenceEqual(property))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags14);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] destination.Writer.WritePropertyName("OnRemoveToolbarTileAudio"u8);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags10);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] destination.Writer.WritePropertyName("OnSearchGScreenRemoveAudio"u8);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags13);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] case "OnRemoveToolbarTileAudio":
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags23);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] case "OnSearchGScreenRemoveAudio":
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeIntoSlow(ref source, ref value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags20);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags10);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags13);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags10);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.Serialize(ref destination, in value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags13);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] case "OnRemoveToolbarTileAudio":
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnRemoveToolbarTileAudio, SerializerFlags.None | serializerFlags23);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] case "OnSearchGScreenRemoveAudio":
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ImmutableSingleton<NullableSerializer<StringId>>.Instance.DeserializeInto(ref source, ref value.OnSearchGScreenRemoveAudio, SerializerFlags.None | serializerFlags20);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ("OnRemoveToolbarTileAudio", OnRemoveToolbarTileAudioAccessor()),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] ("OnSearchGScreenRemoveAudio", OnSearchGScreenRemoveAudioAccessor()),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnRemoveToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnSearchGScreenRemoveAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic),
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] "Audio event to play when toolbar a toolbar tile is removed One-shot sound"
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] "Audio event to play when a character is removed from the GScreen search query One-shot sound"
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] private static IMemberAccessor OnRemoveToolbarTileAudioAccessor()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnRemoveToolbarTileAudio", "OnRemoveToolbarTileAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnRemoveToolbarTileAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnRemoveToolbarTileAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] instance.OnRemoveToolbarTileAudio = value;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] }, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnRemoveToolbarTileAudio));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] private static IMemberAccessor OnSearchGScreenRemoveAudioAccessor()
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] return new ClassMemberAccessor<InventoryEffectsSessionComponentConfigurationObjectBuilder, StringId?>("OnSearchGScreenRemoveAudio", "OnSearchGScreenRemoveAudio", SerializerFormatSet.Binary | SerializerFormatSet.Json, typeof(InventoryEffectsSessionComponentConfigurationObjectBuilder).GetField("OnSearchGScreenRemoveAudio", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic), typeof(StringId?), () => MetadataIndexerBase<AccessibleTypeIndexer>.Instance.GetAccessibleTypeInfoOrDefault(typeof(StringId)), (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => instance.OnSearchGScreenRemoveAudio, delegate(InventoryEffectsSessionComponentConfigurationObjectBuilder instance, in StringId? value)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] instance.OnSearchGScreenRemoveAudio = value;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] }, (InventoryEffectsSessionComponentConfigurationObjectBuilder instance) => ref Unsafe.AsRef(in instance.OnSearchGScreenRemoveAudio));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] /// Audio event to play when toolbar a toolbar tile is removed
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] public StringId? OnRemoveToolbarTileAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] /// Audio event to play when a character is removed from the GScreen search query
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] public StringId? OnSearchGScreenRemoveAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] OnRemoveToolbarTileAudio = null;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] OnSearchGScreenRemoveAudio = null;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] OnRemoveToolbarTileAudio = instance.OnRemoveToolbarTileAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder] OnSearchGScreenRemoveAudio = instance.OnSearchGScreenRemoveAudio;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnRemoveToolbarTileAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponentConfigurationObjectBuilder_Migrations] .Add(new MemberData("OnSearchGScreenRemoveAudio", typeof(StringId?)))
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] remove
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] RemoveHandler(ActionEventProperty, value);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] RemoveHandler(DragDrop.DragEnterEvent, OnDragEnter);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryItem] RemoveHandler(DragDrop.DragLeaveEvent, OnDragLeave);
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] model.OnItemTransferError = (Action)Delegate.Remove(model.OnItemTransferError, new Action(OnTransferError));
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] else if (e.Action == NotifyCollectionChangedAction.Remove)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] _itemsCache.RemoveMany(e.OldItems.Cast<InventoryItemModel>());
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] "TODO SE2-11345 Remove"
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] /// TODO SE2-11345 Remove
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] case NotifyCollectionChangedAction.Remove:
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] _entityToContainer.Remove(oldItem);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder] [RemoveMigration("2.0.1.5822", null, SerializerFlags.None)]
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations] Version_2_0_1_5822_Delta = TypeStructureDelta.Static.Remove("AccessedCombinedNameFormat");
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryStreamedUIConfigurationObjectBuilder_Migrations] instance.Remove("AccessedCombinedNameFormat");
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] public void Remove(Entity entity)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] if (_inventoryData.Remove(entity, out var value))
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] _grids.TryAttachCollecting(grid, inventoryFullnessModelServer, OnEntityRemoved, replicationEventContext);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] private void OnEntityRemoved(Entity entity, InventoryFullnessModel model)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] if (!_replicables.Remove(model, out IDisposable value))
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] _detachableCallbackCollection.RemoveDetachable(model);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] public void RemoveRootEntity(Entity root, InventoryFullnessModel model, ReplicationEventContext? context = null)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] _rootAttachments.Remove(model, root, removeKeyIfEmpty: true);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] public void RemoveEntity(Entity entity, Entity? parent, InventoryFullnessModel model, ReplicationEventContext? context = null)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventoryFullnessSessionComponent] ((InventoryFullnessModelServer)model).Remove(entity);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] items.RemoveRange(i, items.Count - i);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] _grids.TryAttachCollecting(root, model, OnEntityRemoved, context);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] _characters.TryAttach(root, model, OnEntityRemoved, context);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] _floatingContainer.TryAttach(root, model, OnEntityRemoved, context);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] public void RemoveRootEntity(Entity root, InventoryListModelStreamed model, ReplicationEventContext? context = null)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] _rootAttachments.Remove(model, root, removeKeyIfEmpty: true);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] public void RemoveEntity(Entity entity, Entity? parent, InventoryListModelStreamed model, ReplicationEventContext? context = null)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] model.Entities.Remove(item);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] private void OnEntityRemoved(Entity entity, InventoryListModelStreamed model)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] OnEntityRemoved(item, model);
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.StreamedInventorySessionComponent] ItemStack? itemStack = from.RemoveItemByIndex(itemIndex);

### Insert
  <none>

### SetItems
  <none>

### NotifyCollectionChanged
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.GridInventoryViewModel] private void InventoryContainersChanged(object? sender, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainerViewModel] private void InventoriesChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryContainers] private void ContainersOnPropertyChanged(object? sender, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] private void OnToolbarTilesCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryEffectsSessionComponent] private void OnToolbarTilesChanged(object? sender, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged += InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] ((INotifyCollectionChanged)_inventory.InventoryItems).CollectionChanged -= InventoryItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryGrid] private void InventoryItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] ((INotifyCollectionChanged)InventoryItems).CollectionChanged += FilteredItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] ((INotifyCollectionChanged)InventoryItems).CollectionChanged -= FilteredItemsChanged;
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private void ItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] if (e == null || e.Action == NotifyCollectionChangedAction.Reset)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] else if (e.Action == NotifyCollectionChangedAction.Add)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] else if (e.Action == NotifyCollectionChangedAction.Remove)
  [Keen.Game2.Client.UI.TerminalScreen.Inventory.InventoryViewModel] private void FilteredItemsChanged(object? sender, NotifyCollectionChangedEventArgs? e)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] Inventories.CollectionChanged += delegate(object? _, NotifyCollectionChangedEventArgs e)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryContainerModel] if (e.Action == NotifyCollectionChangedAction.Reset)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] private void OnEntitiesCollectionChanged(object? collection, NotifyCollectionChangedEventArgs args)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] case NotifyCollectionChangedAction.Add:
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryListModel] case NotifyCollectionChangedAction.Remove:
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] typeof(NotifyCollectionChangedEventArgs)
  [Keen.Game2.Simulation.StreamedUI.Terminal.Inventories.InventoryModel] private void OnItemsCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)

====================================================================================================
MAPPER COMPLETED ALL TARGET TYPES
====================================================================================================
