Decompiled source of Empress Spawn BrowserYAPYAP v1.0.2

com.Omniscye.EmpressSpawnBrowser.dll

Decompiled 6 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using Mirror;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;
using YAPYAP;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("com.Omniscye.EmpressSpawnBrowser")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("com.Omniscye.EmpressSpawnBrowser")]
[assembly: AssemblyTitle("EmpressSpawnBrowser")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace BepInEx
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class BepInAutoPluginAttribute : Attribute
	{
		public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace BepInEx.Preloader.Core.Patching
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class PatcherAutoPluginAttribute : Attribute
	{
		public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace Empress.SpawnBrowser.YapYap
{
	[BepInPlugin("com.empress.spawnbrowseryapyap", "EMpressSpawnBrowserYapYap", "1.0.2")]
	public class EMpressSpawnBrowserYapYap : BaseUnityPlugin
	{
		[CompilerGenerated]
		private sealed class <InitializeCanvasDelayed>d__25 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public EMpressSpawnBrowserYapYap <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <InitializeCanvasDelayed>d__25(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Expected O, but got Unknown
				int num = <>1__state;
				EMpressSpawnBrowserYapYap eMpressSpawnBrowserYapYap = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitForSeconds(0.5f);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					eMpressSpawnBrowserYapYap._cachedFont = ((IEnumerable<TMP_FontAsset>)Resources.FindObjectsOfTypeAll<TMP_FontAsset>()).FirstOrDefault((Func<TMP_FontAsset, bool>)((TMP_FontAsset f) => ((Object)f).name.Contains("Arial") || ((Object)f).name.Contains("Liberation")));
					if ((Object)(object)eMpressSpawnBrowserYapYap._cachedFont == (Object)null)
					{
						eMpressSpawnBrowserYapYap._cachedFont = Resources.FindObjectsOfTypeAll<TMP_FontAsset>().FirstOrDefault();
					}
					eMpressSpawnBrowserYapYap.BuildCanvas();
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private static bool _uiVisible;

		private int _tabIndex;

		private string _searchEnemies = "";

		private string _searchValuables = "";

		private string _searchItems = "";

		private readonly List<string> _enemyNames = new List<string>();

		private readonly List<string> _valuableNames = new List<string>();

		private readonly List<string> _itemNames = new List<string>();

		private readonly Dictionary<string, NetworkIdentity> _enemyByKey = new Dictionary<string, NetworkIdentity>(StringComparer.OrdinalIgnoreCase);

		private readonly Dictionary<string, NetworkIdentity> _valuableByKey = new Dictionary<string, NetworkIdentity>(StringComparer.OrdinalIgnoreCase);

		private readonly Dictionary<string, NetworkIdentity> _itemByKey = new Dictionary<string, NetworkIdentity>(StringComparer.OrdinalIgnoreCase);

		private bool _discovered;

		private ConfigEntry<KeyCode> _toggleKey;

		private ConfigEntry<float> _scrollSpeed;

		private ConfigEntry<float> _uiScale;

		private ConfigEntry<Vector2> _uiPosition;

		private GameObject _canvasRoot;

		private Canvas _canvas;

		private GameObject _panelRoot;

		private ScrollRect _scrollRect;

		private Transform _contentContainer;

		private TextMeshProUGUI _titleText;

		private TextMeshProUGUI _statusText;

		private TextMeshProUGUI _countText;

		private Button _refreshButton;

		private Button[] _tabButtons = (Button[])(object)new Button[4];

		private GameObject _itemRowPrefab;

		private TMP_InputField _searchInput;

		private TMP_FontAsset _cachedFont;

		private Color _bg = new Color(0.02f, 0.02f, 0.02f, 0.95f);

		private Color _bg2 = new Color(0.04f, 0.01f, 0.01f, 0.98f);

		private Color _fg = new Color(0.9f, 0.9f, 0.9f, 1f);

		private Color _mutedCol = new Color(0.6f, 0.6f, 0.65f, 0.8f);

		private Color _accentBase = new Color(0.9f, 0f, 0f, 1f);

		private Color _accentHover = new Color(1f, 0.3f, 0.3f, 1f);

		private Color _accentDisabled = new Color(0.4f, 0.1f, 0.1f, 0.7f);

		internal static EMpressSpawnBrowserYapYap Instance { get; private set; }

		internal static ManualLogSource Logger => Instance._logger;

		private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;

		private void Awake()
		{
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			Instance = this;
			((Component)this).gameObject.transform.parent = null;
			((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
			Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
			_toggleKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Input", "ToggleKey", (KeyCode)277, "Key to toggle the Spawn Browser UI.");
			_scrollSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("UI", "ScrollSpeed", 35f, "Mouse wheel scroll sensitivity.");
			_uiScale = ((BaseUnityPlugin)this).Config.Bind<float>("UI", "UIScale", 1f, "Scale of the UI panel (0.5 to 2.0).");
			_uiPosition = ((BaseUnityPlugin)this).Config.Bind<Vector2>("UI", "UIPosition", new Vector2(0f, 0f), "Custom offset position.");
			Logger.LogInfo((object)"EMpressSpawnBrowserYapYap loaded. Press Insert to open/close.");
			((MonoBehaviour)this).StartCoroutine(InitializeCanvasDelayed());
		}

		[IteratorStateMachine(typeof(<InitializeCanvasDelayed>d__25))]
		private IEnumerator InitializeCanvasDelayed()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <InitializeCanvasDelayed>d__25(0)
			{
				<>4__this = this
			};
		}

		private void OnDestroy()
		{
			if (_uiVisible)
			{
				HideCanvas();
			}
			if (Object.op_Implicit((Object)(object)_canvasRoot))
			{
				Object.Destroy((Object)(object)_canvasRoot);
			}
		}

		private void Update()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			if (Input.GetKeyDown(_toggleKey.Value))
			{
				_uiVisible = !_uiVisible;
				if (_uiVisible)
				{
					if (!_discovered)
					{
						DiscoverPrefabs();
					}
					ShowCanvas();
					TakeCursor();
				}
				else
				{
					HideCanvas();
					RestoreCursor();
				}
			}
			if (_uiVisible)
			{
				KeepCursorFree();
				if (Input.GetKeyDown((KeyCode)27))
				{
					_uiVisible = false;
					HideCanvas();
					RestoreCursor();
				}
			}
			if ((Object)(object)_scrollRect != (Object)null && _scrollRect.scrollSensitivity != _scrollSpeed.Value)
			{
				_scrollRect.scrollSensitivity = _scrollSpeed.Value;
			}
			if ((Object)(object)_panelRoot != (Object)null)
			{
				RectTransform component = _panelRoot.GetComponent<RectTransform>();
				((Transform)component).localScale = new Vector3(_uiScale.Value, _uiScale.Value, 1f);
				component.anchoredPosition = _uiPosition.Value;
			}
		}

		private void TakeCursor()
		{
			if ((Object)(object)InputManager.Instance != (Object)null)
			{
				InputManager.Instance.AddToInputFocusStack((object)this);
			}
			Cursor.lockState = (CursorLockMode)0;
			Cursor.visible = true;
		}

		private void KeepCursorFree()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			if ((int)Cursor.lockState != 0)
			{
				Cursor.lockState = (CursorLockMode)0;
			}
			if (!Cursor.visible)
			{
				Cursor.visible = true;
			}
		}

		private void RestoreCursor()
		{
			if ((Object)(object)InputManager.Instance != (Object)null)
			{
				InputManager.Instance.RemoveFromInputFocusStack((object)this);
			}
		}

		private void ShowCanvas()
		{
			if (Object.op_Implicit((Object)(object)_canvasRoot))
			{
				_canvasRoot.SetActive(true);
			}
			UpdateTabVisuals();
			RefreshCurrentTab();
		}

		private void HideCanvas()
		{
			if (Object.op_Implicit((Object)(object)_canvasRoot))
			{
				_canvasRoot.SetActive(false);
			}
		}

		private void DiscoverPrefabs()
		{
			_enemyNames.Clear();
			_valuableNames.Clear();
			_itemNames.Clear();
			_enemyByKey.Clear();
			_valuableByKey.Clear();
			_itemByKey.Clear();
			if ((Object)(object)NetworkManager.singleton == (Object)null)
			{
				Logger.LogWarning((object)"NetworkManager.singleton is null - cannot discover prefabs.");
				return;
			}
			foreach (GameObject spawnPrefab in NetworkManager.singleton.spawnPrefabs)
			{
				if ((Object)(object)spawnPrefab == (Object)null)
				{
					continue;
				}
				NetworkIdentity component = spawnPrefab.GetComponent<NetworkIdentity>();
				if ((Object)(object)component == (Object)null)
				{
					continue;
				}
				string name = ((Object)spawnPrefab).name;
				string key = name.ToLowerInvariant();
				if (name.ToLower().Contains("enemy") || name.ToLower().Contains("monster") || name.ToLower().Contains("creature"))
				{
					if (!_enemyByKey.ContainsKey(key))
					{
						_enemyByKey[key] = component;
						_enemyNames.Add(name);
					}
				}
				else if (name.ToLower().Contains("valuable") || name.ToLower().Contains("treasure") || name.ToLower().Contains("loot"))
				{
					if (!_valuableByKey.ContainsKey(key))
					{
						_valuableByKey[key] = component;
						_valuableNames.Add(name);
					}
				}
				else if (!_itemByKey.ContainsKey(key))
				{
					_itemByKey[key] = component;
					_itemNames.Add(name);
				}
			}
			_enemyNames.Sort();
			_valuableNames.Sort();
			_itemNames.Sort();
			_discovered = true;
			Logger.LogInfo((object)$"Discovered {_enemyNames.Count} enemies, {_valuableNames.Count} valuables, {_itemNames.Count} items.");
		}

		private void SpawnObject(string displayName)
		{
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkClient.active)
			{
				Logger.LogWarning((object)"Not connected to a server - cannot spawn.");
				return;
			}
			string key = displayName.ToLowerInvariant();
			NetworkIdentity value = null;
			if (_tabIndex == 0)
			{
				_enemyByKey.TryGetValue(key, out value);
			}
			else if (_tabIndex == 1)
			{
				_valuableByKey.TryGetValue(key, out value);
			}
			else
			{
				_itemByKey.TryGetValue(key, out value);
			}
			if ((Object)(object)value == (Object)null)
			{
				Logger.LogWarning((object)("Could not find prefab for " + displayName));
				return;
			}
			Vector3 val = Vector3.zero;
			Quaternion val2 = Quaternion.identity;
			if ((Object)(object)Pawn.LocalInstance != (Object)null)
			{
				Transform transform = ((Component)Pawn.LocalInstance).transform;
				val = transform.position + transform.forward * 2f + Vector3.up * 1f;
				val2 = transform.rotation;
			}
			if ((Object)(object)GameManager.Instance != (Object)null)
			{
				GameManager.Instance.CmdRequestSpawnNetworkPrefab(value.assetId, val, val2);
				Logger.LogInfo((object)$"Spawned {displayName} at {val}");
			}
		}

		private void SwitchTab(int index)
		{
			_tabIndex = index;
			UpdateTabVisuals();
			_searchInput.text = GetCurrentSearch();
			RefreshCurrentTab();
		}

		private void UpdateTabVisuals()
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < 3; i++)
			{
				if ((Object)(object)_tabButtons[i] != (Object)null)
				{
					Image component = ((Component)_tabButtons[i]).GetComponent<Image>();
					if (Object.op_Implicit((Object)(object)component))
					{
						((Graphic)component).color = ((i == _tabIndex) ? _accentBase : _bg2);
					}
				}
			}
		}

		private string GetCurrentSearch()
		{
			if (_tabIndex != 0)
			{
				if (_tabIndex != 1)
				{
					return _searchItems;
				}
				return _searchValuables;
			}
			return _searchEnemies;
		}

		private void OnSearchChanged(string val)
		{
			if (_tabIndex == 0)
			{
				_searchEnemies = val;
			}
			else if (_tabIndex == 1)
			{
				_searchValuables = val;
			}
			else
			{
				_searchItems = val;
			}
			RefreshCurrentTab();
		}

		private void RefreshCurrentTab()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Expected O, but got Unknown
			foreach (Transform item in _contentContainer)
			{
				Object.Destroy((Object)(object)((Component)item).gameObject);
			}
			List<string> source = ((_tabIndex == 0) ? _enemyNames : ((_tabIndex == 1) ? _valuableNames : _itemNames));
			string search = GetCurrentSearch();
			List<string> list = source.Where((string s) => string.IsNullOrEmpty(search) || s.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0).ToList();
			foreach (string item2 in list)
			{
				GameObject obj = Object.Instantiate<GameObject>(_itemRowPrefab, _contentContainer);
				obj.SetActive(true);
				((TMP_Text)obj.GetComponentInChildren<TextMeshProUGUI>()).text = item2;
				string capturedName = item2;
				((UnityEvent)obj.GetComponentInChildren<Button>().onClick).AddListener((UnityAction)delegate
				{
					SpawnObject(capturedName);
				});
			}
			((TMP_Text)_statusText).text = ((list.Count > 0) ? "" : "No items found.");
			((TMP_Text)_countText).text = $"{list.Count} items";
		}

		private void BuildCanvas()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0216: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Expected O, but got Unknown
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_0341: Expected O, but got Unknown
			//IL_0383: Unknown result type (might be due to invalid IL or missing references)
			//IL_0398: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Expected O, but got Unknown
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0493: Unknown result type (might be due to invalid IL or missing references)
			//IL_049d: Expected O, but got Unknown
			//IL_04f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0505: Unknown result type (might be due to invalid IL or missing references)
			//IL_051a: Unknown result type (might be due to invalid IL or missing references)
			//IL_052f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0543: Unknown result type (might be due to invalid IL or missing references)
			//IL_0554: Unknown result type (might be due to invalid IL or missing references)
			//IL_0581: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0635: Unknown result type (might be due to invalid IL or missing references)
			//IL_0640: Unknown result type (might be due to invalid IL or missing references)
			//IL_0655: Unknown result type (might be due to invalid IL or missing references)
			//IL_0669: Unknown result type (might be due to invalid IL or missing references)
			//IL_0692: Unknown result type (might be due to invalid IL or missing references)
			//IL_069e: Unknown result type (might be due to invalid IL or missing references)
			//IL_06aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0724: Unknown result type (might be due to invalid IL or missing references)
			//IL_073a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0750: Unknown result type (might be due to invalid IL or missing references)
			//IL_0766: Unknown result type (might be due to invalid IL or missing references)
			//IL_080f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0824: Unknown result type (might be due to invalid IL or missing references)
			//IL_0839: Unknown result type (might be due to invalid IL or missing references)
			//IL_084e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0862: Unknown result type (might be due to invalid IL or missing references)
			//IL_0884: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_08fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0930: Unknown result type (might be due to invalid IL or missing references)
			//IL_0945: Unknown result type (might be due to invalid IL or missing references)
			//IL_094f: Unknown result type (might be due to invalid IL or missing references)
			_canvasRoot = new GameObject("SpawnBrowserCanvas_EMPRESS");
			Object.DontDestroyOnLoad((Object)(object)_canvasRoot);
			_canvasRoot.layer = LayerMask.NameToLayer("UI");
			_canvas = _canvasRoot.AddComponent<Canvas>();
			_canvas.renderMode = (RenderMode)0;
			_canvas.sortingOrder = 32767;
			_canvas.overrideSorting = true;
			CanvasScaler obj = _canvasRoot.AddComponent<CanvasScaler>();
			obj.uiScaleMode = (ScaleMode)1;
			obj.referenceResolution = new Vector2(1920f, 1080f);
			obj.matchWidthOrHeight = 1f;
			_canvasRoot.AddComponent<GraphicRaycaster>();
			if ((Object)(object)EventSystem.current == (Object)null)
			{
				GameObject val = new GameObject("EventSystem_EMPRESS");
				Object.DontDestroyOnLoad((Object)val);
				val.AddComponent<EventSystem>();
				val.AddComponent<StandaloneInputModule>();
			}
			_panelRoot = CreateUIElement("Panel", _canvasRoot.transform);
			RectTransform component = _panelRoot.GetComponent<RectTransform>();
			component.anchorMin = new Vector2(0.5f, 0.5f);
			component.anchorMax = new Vector2(0.5f, 0.5f);
			component.pivot = new Vector2(0.5f, 0.5f);
			component.sizeDelta = new Vector2(600f, 700f);
			component.anchoredPosition = _uiPosition.Value;
			((Graphic)_panelRoot.AddComponent<Image>()).color = _bg;
			Outline obj2 = _panelRoot.AddComponent<Outline>();
			((Shadow)obj2).effectColor = new Color(0.5f, 0.1f, 0.1f, 0.5f);
			((Shadow)obj2).effectDistance = new Vector2(2f, -2f);
			GameObject val2 = CreateUIElement("Header", _panelRoot.transform);
			RectTransform component2 = val2.GetComponent<RectTransform>();
			component2.anchorMin = new Vector2(0f, 1f);
			component2.anchorMax = new Vector2(1f, 1f);
			component2.pivot = new Vector2(0.5f, 1f);
			component2.sizeDelta = new Vector2(-28f, 60f);
			component2.anchoredPosition = new Vector2(0f, -14f);
			HorizontalLayoutGroup obj3 = val2.AddComponent<HorizontalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj3).childControlWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj3).childControlHeight = true;
			((HorizontalOrVerticalLayoutGroup)obj3).childForceExpandWidth = false;
			((HorizontalOrVerticalLayoutGroup)obj3).childForceExpandHeight = false;
			((HorizontalOrVerticalLayoutGroup)obj3).spacing = 10f;
			_titleText = CreateTextMeshPro("Title", val2.transform, "Empress Spawn Browser - YAPYAP", 16f, _fg);
			((TMP_Text)_titleText).fontStyle = (FontStyles)1;
			((TMP_Text)_titleText).alignment = (TextAlignmentOptions)4097;
			((Component)_titleText).gameObject.AddComponent<LayoutElement>().flexibleWidth = 1f;
			Button obj4 = CreateButton("CloseButton", val2.transform, "X");
			((UnityEvent)obj4.onClick).AddListener((UnityAction)delegate
			{
				_uiVisible = false;
				HideCanvas();
				RestoreCursor();
			});
			LayoutElement obj5 = ((Component)obj4).gameObject.AddComponent<LayoutElement>();
			obj5.preferredWidth = 36f;
			obj5.preferredHeight = 36f;
			_refreshButton = CreateButton("RefreshButton", val2.transform, "REFRESH");
			((UnityEvent)_refreshButton.onClick).AddListener((UnityAction)delegate
			{
				DiscoverPrefabs();
				RefreshCurrentTab();
			});
			((Component)_refreshButton).gameObject.AddComponent<LayoutElement>().preferredWidth = 90f;
			GameObject val3 = CreateUIElement("TabBar", _panelRoot.transform);
			RectTransform component3 = val3.GetComponent<RectTransform>();
			component3.anchorMin = new Vector2(0f, 1f);
			component3.anchorMax = new Vector2(1f, 1f);
			component3.pivot = new Vector2(0.5f, 1f);
			component3.sizeDelta = new Vector2(-28f, 40f);
			component3.anchoredPosition = new Vector2(0f, -80f);
			HorizontalLayoutGroup obj6 = val3.AddComponent<HorizontalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj6).childControlWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj6).childControlHeight = true;
			((HorizontalOrVerticalLayoutGroup)obj6).childForceExpandWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj6).childForceExpandHeight = false;
			((HorizontalOrVerticalLayoutGroup)obj6).spacing = 10f;
			string[] array = new string[4] { "ENEMIES", "VALUABLES", "ITEMS", "" };
			for (int i = 0; i < 3; i++)
			{
				int idx = i;
				_tabButtons[i] = CreateButton($"Tab{i}", val3.transform, array[i]);
				((UnityEvent)_tabButtons[i].onClick).AddListener((UnityAction)delegate
				{
					SwitchTab(idx);
				});
				((Component)_tabButtons[i]).gameObject.AddComponent<LayoutElement>().preferredHeight = 26f;
			}
			GameObject val4 = CreateUIElement("Search", _panelRoot.transform);
			RectTransform component4 = val4.GetComponent<RectTransform>();
			component4.anchorMin = new Vector2(0f, 1f);
			component4.anchorMax = new Vector2(1f, 1f);
			component4.pivot = new Vector2(0.5f, 1f);
			component4.sizeDelta = new Vector2(-28f, 40f);
			component4.anchoredPosition = new Vector2(0f, -130f);
			((Graphic)val4.AddComponent<Image>()).color = _bg2;
			_searchInput = val4.AddComponent<TMP_InputField>();
			TextMeshProUGUI val5 = CreateTextMeshPro("Text", val4.transform, "", 14f, _fg);
			((TMP_Text)val5).alignment = (TextAlignmentOptions)4097;
			RectTransform component5 = ((Component)val5).GetComponent<RectTransform>();
			component5.anchorMin = Vector2.zero;
			component5.anchorMax = Vector2.one;
			component5.offsetMin = new Vector2(10f, 0f);
			component5.offsetMax = new Vector2(-10f, 0f);
			_searchInput.textComponent = (TMP_Text)(object)val5;
			((UnityEvent<string>)(object)_searchInput.onValueChanged).AddListener((UnityAction<string>)OnSearchChanged);
			GameObject val6 = CreateUIElement("Scroll", _panelRoot.transform);
			_scrollRect = val6.AddComponent<ScrollRect>();
			RectTransform component6 = val6.GetComponent<RectTransform>();
			component6.anchorMin = Vector2.zero;
			component6.anchorMax = Vector2.one;
			component6.offsetMin = new Vector2(14f, 60f);
			component6.offsetMax = new Vector2(-14f, -180f);
			GameObject val7 = CreateUIElement("Viewport", val6.transform);
			RectTransform component7 = val7.GetComponent<RectTransform>();
			component7.anchorMin = Vector2.zero;
			component7.anchorMax = Vector2.one;
			component7.sizeDelta = Vector2.zero;
			val7.AddComponent<RectMask2D>();
			((Graphic)val7.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0f);
			_scrollRect.viewport = component7;
			GameObject val8 = CreateUIElement("Content", val7.transform);
			_contentContainer = val8.transform;
			RectTransform component8 = val8.GetComponent<RectTransform>();
			component8.anchorMin = new Vector2(0f, 1f);
			component8.anchorMax = new Vector2(1f, 1f);
			component8.pivot = new Vector2(0.5f, 1f);
			component8.sizeDelta = new Vector2(0f, 0f);
			VerticalLayoutGroup obj7 = val8.AddComponent<VerticalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj7).childControlWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj7).childControlHeight = true;
			((HorizontalOrVerticalLayoutGroup)obj7).childForceExpandWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj7).childForceExpandHeight = false;
			((HorizontalOrVerticalLayoutGroup)obj7).spacing = 2f;
			val8.AddComponent<ContentSizeFitter>().verticalFit = (FitMode)2;
			_scrollRect.content = component8;
			_scrollRect.horizontal = false;
			_scrollRect.vertical = true;
			_scrollRect.scrollSensitivity = _scrollSpeed.Value;
			GameObject val9 = CreateUIElement("Footer", _panelRoot.transform);
			RectTransform component9 = val9.GetComponent<RectTransform>();
			component9.anchorMin = new Vector2(0f, 0f);
			component9.anchorMax = new Vector2(1f, 0f);
			component9.pivot = new Vector2(0.5f, 0f);
			component9.sizeDelta = new Vector2(-28f, 46f);
			component9.anchoredPosition = new Vector2(0f, 14f);
			_statusText = CreateTextMeshPro("Status", val9.transform, "", 12f, Color.yellow);
			((TMP_Text)_statusText).alignment = (TextAlignmentOptions)1025;
			RectTransform component10 = ((Component)_statusText).GetComponent<RectTransform>();
			component10.anchorMin = new Vector2(0f, 0f);
			component10.anchorMax = new Vector2(0.5f, 1f);
			component10.sizeDelta = Vector2.zero;
			_countText = CreateTextMeshPro("Count", val9.transform, "", 12f, _mutedCol);
			((TMP_Text)_countText).alignment = (TextAlignmentOptions)1028;
			RectTransform component11 = ((Component)_countText).GetComponent<RectTransform>();
			component11.anchorMin = new Vector2(0.5f, 0f);
			component11.anchorMax = new Vector2(1f, 1f);
			component11.sizeDelta = Vector2.zero;
			CreateItemRowPrefab();
			_canvasRoot.SetActive(false);
		}

		private void CreateItemRowPrefab()
		{
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			_itemRowPrefab = CreateUIElement("RowPrefab", _panelRoot.transform);
			_itemRowPrefab.SetActive(false);
			_itemRowPrefab.AddComponent<LayoutElement>().preferredHeight = 30f;
			HorizontalLayoutGroup obj = _itemRowPrefab.AddComponent<HorizontalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj).childControlWidth = true;
			((HorizontalOrVerticalLayoutGroup)obj).childControlHeight = true;
			((HorizontalOrVerticalLayoutGroup)obj).spacing = 10f;
			GameObject obj2 = CreateUIElement("Label", _itemRowPrefab.transform);
			obj2.GetComponent<RectTransform>().sizeDelta = new Vector2(300f, 30f);
			TextMeshProUGUI val = obj2.AddComponent<TextMeshProUGUI>();
			((TMP_Text)val).text = "Item";
			((TMP_Text)val).fontSize = 14f;
			((Graphic)val).color = _fg;
			((TMP_Text)val).alignment = (TextAlignmentOptions)4097;
			((Graphic)val).raycastTarget = false;
			if ((Object)(object)_cachedFont != (Object)null)
			{
				((TMP_Text)val).font = _cachedFont;
			}
			obj2.AddComponent<LayoutElement>().flexibleWidth = 1f;
			GameObject val2 = CreateUIElement("Spawn", _itemRowPrefab.transform);
			val2.GetComponent<RectTransform>().sizeDelta = new Vector2(80f, 26f);
			((Graphic)val2.AddComponent<Image>()).color = _accentBase;
			Button obj3 = val2.AddComponent<Button>();
			((Selectable)obj3).transition = (Transition)1;
			ColorBlock colors = default(ColorBlock);
			((ColorBlock)(ref colors)).normalColor = Color.white;
			((ColorBlock)(ref colors)).highlightedColor = _accentHover;
			((ColorBlock)(ref colors)).pressedColor = _bg2;
			((ColorBlock)(ref colors)).selectedColor = _accentHover;
			((ColorBlock)(ref colors)).disabledColor = _accentDisabled;
			((ColorBlock)(ref colors)).colorMultiplier = 1f;
			((ColorBlock)(ref colors)).fadeDuration = 0.1f;
			((Selectable)obj3).colors = colors;
			GameObject val3 = new GameObject("Text");
			val3.transform.SetParent(val2.transform, false);
			RectTransform obj4 = val3.AddComponent<RectTransform>();
			obj4.anchorMin = Vector2.zero;
			obj4.anchorMax = Vector2.one;
			obj4.sizeDelta = Vector2.zero;
			TextMeshProUGUI val4 = val3.AddComponent<TextMeshProUGUI>();
			((TMP_Text)val4).text = "SPAWN";
			((TMP_Text)val4).fontSize = 12f;
			((Graphic)val4).color = _fg;
			((TMP_Text)val4).alignment = (TextAlignmentOptions)514;
			((TMP_Text)val4).fontStyle = (FontStyles)1;
			((Graphic)val4).raycastTarget = false;
			if ((Object)(object)_cachedFont != (Object)null)
			{
				((TMP_Text)val4).font = _cachedFont;
			}
			val2.AddComponent<LayoutElement>().preferredWidth = 80f;
		}

		private GameObject CreateUIElement(string name, Transform parent)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			GameObject val = new GameObject(name);
			val.transform.SetParent(parent, false);
			val.AddComponent<RectTransform>();
			return val;
		}

		private Button CreateButton(string name, Transform parent, string label)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = CreateUIElement(name, parent);
			((Graphic)val.AddComponent<Image>()).color = _bg2;
			Button obj = val.AddComponent<Button>();
			((Selectable)obj).transition = (Transition)1;
			ColorBlock colors = default(ColorBlock);
			((ColorBlock)(ref colors)).normalColor = Color.white;
			((ColorBlock)(ref colors)).highlightedColor = _accentHover;
			((ColorBlock)(ref colors)).pressedColor = _accentBase;
			((ColorBlock)(ref colors)).selectedColor = _accentBase;
			((ColorBlock)(ref colors)).disabledColor = _accentDisabled;
			((ColorBlock)(ref colors)).colorMultiplier = 1f;
			((ColorBlock)(ref colors)).fadeDuration = 0.1f;
			((Selectable)obj).colors = colors;
			TextMeshProUGUI obj2 = CreateTextMeshPro("Text", val.transform, label, 12f, _fg);
			((TMP_Text)obj2).alignment = (TextAlignmentOptions)514;
			((Component)obj2).GetComponent<RectTransform>().anchorMin = Vector2.zero;
			((Component)obj2).GetComponent<RectTransform>().anchorMax = Vector2.one;
			val.AddComponent<LayoutElement>();
			return obj;
		}

		private TextMeshProUGUI CreateTextMeshPro(string name, Transform parent, string text, float size, Color color)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = CreateUIElement(name, parent);
			RectTransform component = obj.GetComponent<RectTransform>();
			component.anchorMin = Vector2.zero;
			component.anchorMax = Vector2.one;
			component.sizeDelta = Vector2.zero;
			TextMeshProUGUI val = obj.AddComponent<TextMeshProUGUI>();
			((TMP_Text)val).text = text;
			((TMP_Text)val).fontSize = size;
			((Graphic)val).color = color;
			((TMP_Text)val).alignment = (TextAlignmentOptions)514;
			((Graphic)val).raycastTarget = false;
			if ((Object)(object)_cachedFont != (Object)null)
			{
				((TMP_Text)val).font = _cachedFont;
			}
			return val;
		}
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ConstantExpectedAttribute : Attribute
	{
		public object? Min { get; set; }

		public object? Max { get; set; }
	}
	[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ExperimentalAttribute : Attribute
	{
		public string DiagnosticId { get; }

		public string? UrlFormat { get; set; }

		public ExperimentalAttribute(string diagnosticId)
		{
			DiagnosticId = diagnosticId;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	internal sealed class MemberNotNullAttribute : Attribute
	{
		public string[] Members { get; }

		public MemberNotNullAttribute(string member)
		{
			Members = new string[1] { member };
		}

		public MemberNotNullAttribute(params string[] members)
		{
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	internal sealed class MemberNotNullWhenAttribute : Attribute
	{
		public bool ReturnValue { get; }

		public string[] Members { get; }

		public MemberNotNullWhenAttribute(bool returnValue, string member)
		{
			ReturnValue = returnValue;
			Members = new string[1] { member };
		}

		public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
		{
			ReturnValue = returnValue;
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class SetsRequiredMembersAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class StringSyntaxAttribute : Attribute
	{
		public const string CompositeFormat = "CompositeFormat";

		public const string DateOnlyFormat = "DateOnlyFormat";

		public const string DateTimeFormat = "DateTimeFormat";

		public const string EnumFormat = "EnumFormat";

		public const string GuidFormat = "GuidFormat";

		public const string Json = "Json";

		public const string NumericFormat = "NumericFormat";

		public const string Regex = "Regex";

		public const string TimeOnlyFormat = "TimeOnlyFormat";

		public const string TimeSpanFormat = "TimeSpanFormat";

		public const string Uri = "Uri";

		public const string Xml = "Xml";

		public string Syntax { get; }

		public object?[] Arguments { get; }

		public StringSyntaxAttribute(string syntax)
		{
			Syntax = syntax;
			Arguments = new object[0];
		}

		public StringSyntaxAttribute(string syntax, params object?[] arguments)
		{
			Syntax = syntax;
			Arguments = arguments;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class UnscopedRefAttribute : Attribute
	{
	}
}
namespace System.Runtime.Versioning
{
	[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class RequiresPreviewFeaturesAttribute : Attribute
	{
		public string? Message { get; }

		public string? Url { get; set; }

		public RequiresPreviewFeaturesAttribute()
		{
		}

		public RequiresPreviewFeaturesAttribute(string? message)
		{
			Message = message;
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class CallerArgumentExpressionAttribute : Attribute
	{
		public string ParameterName { get; }

		public CallerArgumentExpressionAttribute(string parameterName)
		{
			ParameterName = parameterName;
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class CollectionBuilderAttribute : Attribute
	{
		public Type BuilderType { get; }

		public string MethodName { get; }

		public CollectionBuilderAttribute(Type builderType, string methodName)
		{
			BuilderType = builderType;
			MethodName = methodName;
		}
	}
	[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class CompilerFeatureRequiredAttribute : Attribute
	{
		public const string RefStructs = "RefStructs";

		public const string RequiredMembers = "RequiredMembers";

		public string FeatureName { get; }

		public bool IsOptional { get; set; }

		public CompilerFeatureRequiredAttribute(string featureName)
		{
			FeatureName = featureName;
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class InterpolatedStringHandlerArgumentAttribute : Attribute
	{
		public string[] Arguments { get; }

		public InterpolatedStringHandlerArgumentAttribute(string argument)
		{
			Arguments = new string[1] { argument };
		}

		public InterpolatedStringHandlerArgumentAttribute(params string[] arguments)
		{
			Arguments = arguments;
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class InterpolatedStringHandlerAttribute : Attribute
	{
	}
	[EditorBrowsable(EditorBrowsableState.Never)]
	[ExcludeFromCodeCoverage]
	internal static class IsExternalInit
	{
	}
	[AttributeUsage(AttributeTargets.Method, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ModuleInitializerAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class OverloadResolutionPriorityAttribute : Attribute
	{
		public int Priority { get; }

		public OverloadResolutionPriorityAttribute(int priority)
		{
			Priority = priority;
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ParamCollectionAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class RequiredMemberAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	[EditorBrowsable(EditorBrowsableState.Never)]
	[ExcludeFromCodeCoverage]
	internal sealed class RequiresLocationAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class SkipLocalsInitAttribute : Attribute
	{
	}
}