Decompiled source of EnemySkinRegistryTestBranch v1.3.0

plugins/EnemySkinRegistry/EnemySkinRegistry.dll

Decompiled 2 years ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.RegularExpressions;
using AntlerShed.SkinRegistry.Events;
using AntlerShed.SkinRegistry.View;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalConfig;
using LethalConfig.ConfigItems;
using LethalConfig.ConfigItems.Options;
using LethalLevelLoader;
using NUnit.Framework;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using TMPro;
using Unity.Collections;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[3099]
		{
			0, 0, 0, 1, 0, 0, 0, 49, 92, 65,
			115, 115, 101, 116, 115, 92, 69, 110, 101, 109,
			121, 83, 107, 105, 110, 82, 101, 103, 105, 115,
			116, 114, 121, 92, 83, 99, 114, 105, 112, 116,
			115, 92, 68, 117, 109, 109, 121, 83, 107, 105,
			110, 110, 101, 114, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 52, 92, 65, 115, 115, 101,
			116, 115, 92, 69, 110, 101, 109, 121, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			92, 83, 99, 114, 105, 112, 116, 115, 92, 69,
			110, 101, 109, 121, 82, 101, 112, 111, 115, 105,
			116, 111, 114, 121, 46, 99, 115, 0, 0, 0,
			8, 0, 0, 0, 54, 92, 65, 115, 115, 101,
			116, 115, 92, 69, 110, 101, 109, 121, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			92, 83, 99, 114, 105, 112, 116, 115, 92, 69,
			110, 101, 109, 121, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 66, 92, 65, 115,
			115, 101, 116, 115, 92, 69, 110, 101, 109, 121,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 92, 83, 99, 114, 105, 112, 116, 115,
			92, 69, 118, 101, 110, 116, 115, 92, 69, 118,
			101, 110, 116, 72, 97, 110, 100, 108, 101, 114,
			82, 101, 112, 111, 115, 105, 116, 111, 114, 121,
			46, 99, 115, 0, 0, 0, 21, 0, 0, 0,
			57, 92, 65, 115, 115, 101, 116, 115, 92, 69,
			110, 101, 109, 121, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 92, 83, 99, 114,
			105, 112, 116, 115, 92, 69, 118, 101, 110, 116,
			115, 92, 69, 118, 101, 110, 116, 72, 97, 110,
			100, 108, 101, 114, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 67, 92, 65, 115, 115,
			101, 116, 115, 92, 69, 110, 101, 109, 121, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 92, 83, 99, 114, 105, 112, 116, 115, 92,
			76, 101, 116, 104, 97, 108, 76, 101, 118, 101,
			108, 76, 111, 97, 100, 101, 114, 67, 111, 109,
			112, 97, 116, 105, 98, 105, 108, 105, 116, 121,
			46, 99, 115, 0, 0, 0, 3, 0, 0, 0,
			51, 92, 65, 115, 115, 101, 116, 115, 92, 69,
			110, 101, 109, 121, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 92, 83, 99, 114,
			105, 112, 116, 115, 92, 77, 111, 111, 110, 82,
			101, 112, 111, 115, 105, 116, 111, 114, 121, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 68,
			92, 65, 115, 115, 101, 116, 115, 92, 69, 110,
			101, 109, 121, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 92, 83, 99, 114, 105,
			112, 116, 115, 92, 80, 97, 116, 99, 104, 101,
			115, 92, 69, 110, 101, 109, 105, 101, 115, 92,
			66, 97, 98, 111, 111, 110, 72, 97, 119, 107,
			80, 97, 116, 99, 104, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 64, 92, 65, 115, 115,
			101, 116, 115, 92, 69, 110, 101, 109, 121, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 92, 83, 99, 114, 105, 112, 116, 115, 92,
			80, 97, 116, 99, 104, 101, 115, 92, 69, 110,
			101, 109, 105, 101, 115, 92, 66, 97, 114, 98,
			101, 114, 80, 97, 116, 99, 104, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 65, 92, 65,
			115, 115, 101, 116, 115, 92, 69, 110, 101, 109,
			121, 83, 107, 105, 110, 82, 101, 103, 105, 115,
			116, 114, 121, 92, 83, 99, 114, 105, 112, 116,
			115, 92, 80, 97, 116, 99, 104, 101, 115, 92,
			69, 110, 101, 109, 105, 101, 115, 92, 66, 114,
			97, 99, 107, 101, 110, 80, 97, 116, 99, 104,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			70, 92, 65, 115, 115, 101, 116, 115, 92, 69,
			110, 101, 109, 121, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 92, 83, 99, 114,
			105, 112, 116, 115, 92, 80, 97, 116, 99, 104,
			101, 115, 92, 69, 110, 101, 109, 105, 101, 115,
			92, 66, 117, 110, 107, 101, 114, 83, 112, 105,
			100, 101, 114, 80, 97, 116, 99, 104, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 64, 92,
			65, 115, 115, 101, 116, 115, 92, 69, 110, 101,
			109, 121, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 92, 83, 99, 114, 105, 112,
			116, 115, 92, 80, 97, 116, 99, 104, 101, 115,
			92, 69, 110, 101, 109, 105, 101, 115, 92, 66,
			117, 116, 108, 101, 114, 80, 97, 116, 99, 104,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			66, 92, 65, 115, 115, 101, 116, 115, 92, 69,
			110, 101, 109, 121, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 92, 83, 99, 114,
			105, 112, 116, 115, 92, 80, 97, 116, 99, 104,
			101, 115, 92, 69, 110, 101, 109, 105, 101, 115,
			92, 67, 111, 105, 108, 104, 101, 97, 100, 80,
			97, 116, 99, 104, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 72, 92, 65, 115, 115, 101,
			116, 115, 92, 69, 110, 101, 109, 121, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			92, 83, 99, 114, 105, 112, 116, 115, 92, 80,
			97, 116, 99, 104, 101, 115, 92, 69, 110, 101,
			109, 105, 101, 115, 92, 69, 97, 114, 116, 104,
			76, 101, 118, 105, 97, 116, 104, 97, 110, 80,
			97, 116, 99, 104, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 63, 92, 65, 115, 115, 101,
			116, 115, 92, 69, 110, 101, 109, 121, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			92, 83, 99, 114, 105, 112, 116, 115, 92, 80,
			97, 116, 99, 104, 101, 115, 92, 69, 110, 101,
			109, 105, 101, 115, 92, 69, 110, 101, 109, 121,
			80, 97, 116, 99, 104, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 68, 92, 65, 115, 115,
			101, 116, 115, 92, 69, 110, 101, 109, 121, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 92, 83, 99, 114, 105, 112, 116, 115, 92,
			80, 97, 116, 99, 104, 101, 115, 92, 69, 110,
			101, 109, 105, 101, 115, 92, 69, 121, 101, 108,
			101, 115, 115, 68, 111, 103, 80, 97, 116, 99,
			104, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 70, 92, 65, 115, 115, 101, 116, 115, 92,
			69, 110, 101, 109, 121, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 92, 83, 99,
			114, 105, 112, 116, 115, 92, 80, 97, 116, 99,
			104, 101, 115, 92, 69, 110, 101, 109, 105, 101,
			115, 92, 70, 111, 114, 101, 115, 116, 75, 101,
			101, 112, 101, 114, 80, 97, 116, 99, 104, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 67,
			92, 65, 115, 115, 101, 116, 115, 92, 69, 110,
			101, 109, 121, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 92, 83, 99, 114, 105,
			112, 116, 115, 92, 80, 97, 116, 99, 104, 101,
			115, 92, 69, 110, 101, 109, 105, 101, 115, 92,
			71, 104, 111, 115, 116, 71, 105, 114, 108, 80,
			97, 116, 99, 104, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 68, 92, 65, 115, 115, 101,
			116, 115, 92, 69, 110, 101, 109, 121, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			92, 83, 99, 114, 105, 112, 116, 115, 92, 80,
			97, 116, 99, 104, 101, 115, 92, 69, 110, 101,
			109, 105, 101, 115, 92, 72, 111, 97, 114, 100,
			101, 114, 66, 117, 103, 80, 97, 116, 99, 104,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			67, 92, 65, 115, 115, 101, 116, 115, 92, 69,
			110, 101, 109, 121, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 92, 83, 99, 114,
			105, 112, 116, 115, 92, 80, 97, 116, 99, 104,
			101, 115, 92, 69, 110, 101, 109, 105, 101, 115,
			92, 72, 121, 103, 114, 111, 100, 101, 114, 101,
			80, 97, 116, 99, 104, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 64, 92, 65, 115, 115,
			101, 116, 115, 92, 69, 110, 101, 109, 121, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 92, 83, 99, 114, 105, 112, 116, 115, 92,
			80, 97, 116, 99, 104, 101, 115, 92, 69, 110,
			101, 109, 105, 101, 115, 92, 74, 101, 115, 116,
			101, 114, 80, 97, 116, 99, 104, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 70, 92, 65,
			115, 115, 101, 116, 115, 92, 69, 110, 101, 109,
			121, 83, 107, 105, 110, 82, 101, 103, 105, 115,
			116, 114, 121, 92, 83, 99, 114, 105, 112, 116,
			115, 92, 80, 97, 116, 99, 104, 101, 115, 92,
			69, 110, 101, 109, 105, 101, 115, 92, 75, 105,
			100, 110, 97, 112, 112, 101, 114, 70, 111, 120,
			80, 97, 116, 99, 104, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 64, 92, 65, 115, 115,
			101, 116, 115, 92, 69, 110, 101, 109, 121, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 92, 83, 99, 114, 105, 112, 116, 115, 92,
			80, 97, 116, 99, 104, 101, 115, 92, 69, 110,
			101, 109, 105, 101, 115, 92, 78, 101, 115, 116,
			84, 114, 97, 99, 107, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 68, 92, 65,
			115, 115, 101, 116, 115, 92, 69, 110, 101, 109,
			121, 83, 107, 105, 110, 82, 101, 103, 105, 115,
			116, 114, 121, 92, 83, 99, 114, 105, 112, 116,
			115, 92, 80, 97, 116, 99, 104, 101, 115, 92,
			69, 110, 101, 109, 105, 101, 115, 92, 78, 117,
			116, 99, 114, 97, 99, 107, 101, 114, 80, 97,
			116, 99, 104, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 65, 92, 65, 115, 115, 101, 116,
			115, 92, 69, 110, 101, 109, 121, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 92,
			83, 99, 114, 105, 112, 116, 115, 92, 80, 97,
			116, 99, 104, 101, 115, 92, 69, 110, 101, 109,
			105, 101, 115, 92, 79, 108, 100, 66, 105, 114,
			100, 80, 97, 116, 99, 104, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 67, 92, 65, 115,
			115, 101, 116, 115, 92, 69, 110, 101, 109, 121,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 92, 83, 99, 114, 105, 112, 116, 115,
			92, 80, 97, 116, 99, 104, 101, 115, 92, 69,
			110, 101, 109, 105, 101, 115, 92, 83, 110, 97,
			114, 101, 70, 108, 101, 97, 80, 97, 116, 99,
			104, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 69, 92, 65, 115, 115, 101, 116, 115, 92,
			69, 110, 101, 109, 121, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 92, 83, 99,
			114, 105, 112, 116, 115, 92, 80, 97, 116, 99,
			104, 101, 115, 92, 69, 110, 101, 109, 105, 101,
			115, 92, 83, 112, 111, 114, 101, 76, 105, 122,
			97, 114, 100, 80, 97, 116, 99, 104, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 65, 92,
			65, 115, 115, 101, 116, 115, 92, 69, 110, 101,
			109, 121, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 92, 83, 99, 114, 105, 112,
			116, 115, 92, 80, 97, 116, 99, 104, 101, 115,
			92, 69, 110, 101, 109, 105, 101, 115, 92, 84,
			104, 117, 109, 112, 101, 114, 80, 97, 116, 99,
			104, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 68, 92, 65, 115, 115, 101, 116, 115, 92,
			69, 110, 101, 109, 121, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 92, 83, 99,
			114, 105, 112, 116, 115, 92, 80, 97, 116, 99,
			104, 101, 115, 92, 69, 110, 101, 109, 105, 101,
			115, 92, 84, 117, 108, 105, 112, 83, 110, 97,
			107, 101, 80, 97, 116, 99, 104, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 64, 92, 65,
			115, 115, 101, 116, 115, 92, 69, 110, 101, 109,
			121, 83, 107, 105, 110, 82, 101, 103, 105, 115,
			116, 114, 121, 92, 83, 99, 114, 105, 112, 116,
			115, 92, 80, 97, 116, 99, 104, 101, 115, 92,
			73, 110, 105, 116, 105, 97, 108, 105, 122, 97,
			116, 105, 111, 110, 80, 97, 116, 99, 104, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 49,
			92, 65, 115, 115, 101, 116, 115, 92, 69, 110,
			101, 109, 121, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 92, 83, 99, 114, 105,
			112, 116, 115, 92, 83, 101, 115, 115, 105, 111,
			110, 83, 116, 97, 116, 101, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 41, 92, 65, 115,
			115, 101, 116, 115, 92, 69, 110, 101, 109, 121,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 92, 83, 99, 114, 105, 112, 116, 115,
			92, 83, 107, 105, 110, 46, 99, 115, 0, 0,
			0, 14, 0, 0, 0, 47, 92, 65, 115, 115,
			101, 116, 115, 92, 69, 110, 101, 109, 121, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 92, 83, 99, 114, 105, 112, 116, 115, 92,
			83, 107, 105, 110, 67, 111, 110, 102, 105, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			44, 92, 65, 115, 115, 101, 116, 115, 92, 69,
			110, 101, 109, 121, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 92, 83, 99, 114,
			105, 112, 116, 115, 92, 83, 107, 105, 110, 110,
			101, 114, 46, 99, 115, 0, 0, 0, 4, 0,
			0, 0, 51, 92, 65, 115, 115, 101, 116, 115,
			92, 69, 110, 101, 109, 121, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 92, 83,
			99, 114, 105, 112, 116, 115, 92, 83, 107, 105,
			110, 82, 101, 112, 111, 115, 105, 116, 111, 114,
			121, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 53, 92, 65, 115, 115, 101, 116, 115, 92,
			69, 110, 101, 109, 121, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 92, 83, 99,
			114, 105, 112, 116, 115, 92, 83, 107, 105, 110,
			83, 121, 110, 99, 104, 114, 111, 110, 105, 122,
			101, 114, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 41, 92, 65, 115, 115, 101, 116, 115,
			92, 69, 110, 101, 109, 121, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 92, 83,
			99, 114, 105, 112, 116, 115, 92, 84, 101, 115,
			116, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 59, 92, 65, 115, 115, 101, 116, 115, 92,
			69, 110, 101, 109, 121, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 92, 83, 99,
			114, 105, 112, 116, 115, 92, 86, 105, 101, 119,
			92, 65, 118, 97, 105, 108, 97, 98, 108, 101,
			83, 107, 105, 110, 86, 105, 101, 119, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 64, 92,
			65, 115, 115, 101, 116, 115, 92, 69, 110, 101,
			109, 121, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 92, 83, 99, 114, 105, 112,
			116, 115, 92, 86, 105, 101, 119, 92, 67, 111,
			110, 102, 105, 103, 117, 114, 97, 116, 105, 111,
			110, 86, 105, 101, 119, 77, 111, 100, 101, 108,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			68, 92, 65, 115, 115, 101, 116, 115, 92, 69,
			110, 101, 109, 121, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 92, 83, 99, 114,
			105, 112, 116, 115, 92, 86, 105, 101, 119, 92,
			69, 110, 101, 109, 121, 83, 107, 105, 110, 67,
			111, 110, 102, 105, 103, 117, 114, 97, 116, 105,
			111, 110, 77, 101, 110, 117, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 62, 92, 65, 115,
			115, 101, 116, 115, 92, 69, 110, 101, 109, 121,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 92, 83, 99, 114, 105, 112, 116, 115,
			92, 86, 105, 101, 119, 92, 77, 97, 112, 67,
			111, 110, 102, 105, 103, 117, 114, 97, 116, 105,
			111, 110, 86, 105, 101, 119, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 60, 92, 65, 115,
			115, 101, 116, 115, 92, 69, 110, 101, 109, 121,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 92, 83, 99, 114, 105, 112, 116, 115,
			92, 86, 105, 101, 119, 92, 83, 97, 118, 101,
			80, 114, 111, 102, 105, 108, 101, 80, 111, 112,
			111, 118, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 53, 92, 65, 115, 115, 101,
			116, 115, 92, 69, 110, 101, 109, 121, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			92, 83, 99, 114, 105, 112, 116, 115, 92, 86,
			105, 101, 119, 92, 83, 101, 108, 102, 68, 101,
			115, 116, 114, 111, 121, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 59, 92, 65, 115, 115,
			101, 116, 115, 92, 69, 110, 101, 109, 121, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 92, 83, 99, 114, 105, 112, 116, 115, 92,
			86, 105, 101, 119, 92, 83, 107, 105, 110, 70,
			114, 101, 113, 117, 101, 110, 99, 121, 86, 105,
			101, 119, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 56, 92, 65, 115, 115, 101, 116, 115,
			92, 69, 110, 101, 109, 121, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 92, 83,
			99, 114, 105, 112, 116, 115, 92, 86, 105, 101,
			119, 92, 84, 101, 115, 116, 67, 111, 110, 102,
			105, 103, 77, 101, 110, 117, 46, 99, 115
		};
		result.TypesData = new byte[5340]
		{
			0, 0, 0, 0, 36, 65, 110, 116, 108, 101,
			114, 83, 104, 101, 100, 46, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 124, 68,
			117, 109, 109, 121, 83, 107, 105, 110, 110, 101,
			114, 0, 0, 0, 0, 39, 65, 110, 116, 108,
			101, 114, 83, 104, 101, 100, 46, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 124,
			69, 110, 101, 109, 121, 82, 101, 112, 111, 115,
			105, 116, 111, 114, 121, 0, 0, 0, 0, 47,
			65, 110, 116, 108, 101, 114, 83, 104, 101, 100,
			46, 83, 107, 105, 110, 82, 101, 103, 105, 115,
			116, 114, 121, 124, 68, 117, 112, 108, 105, 99,
			97, 116, 101, 69, 110, 101, 109, 121, 69, 120,
			99, 101, 112, 116, 105, 111, 110, 0, 0, 0,
			0, 49, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 73, 110, 118, 97,
			108, 105, 100, 69, 110, 101, 109, 121, 84, 121,
			112, 101, 69, 120, 99, 101, 112, 116, 105, 111,
			110, 0, 0, 0, 0, 41, 65, 110, 116, 108,
			101, 114, 83, 104, 101, 100, 46, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 124,
			69, 110, 101, 109, 121, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 0, 0, 0,
			0, 45, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 68, 101, 102, 97,
			117, 108, 116, 83, 107, 105, 110, 67, 111, 110,
			102, 105, 103, 68, 97, 116, 97, 0, 0, 0,
			0, 44, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 80, 114, 111, 102,
			105, 108, 101, 78, 97, 109, 101, 69, 120, 99,
			101, 112, 116, 105, 111, 110, 0, 0, 0, 0,
			33, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 69, 110, 101, 109, 121,
			73, 110, 102, 111, 0, 0, 0, 0, 32, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 124, 77, 111, 111, 110, 73, 110, 102,
			111, 0, 0, 0, 0, 40, 65, 110, 116, 108,
			101, 114, 83, 104, 101, 100, 46, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 124,
			83, 107, 105, 110, 68, 105, 115, 116, 114, 105,
			98, 117, 116, 105, 111, 110, 0, 0, 0, 0,
			37, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 83, 107, 105, 110, 84,
			104, 114, 101, 115, 104, 111, 108, 100, 0, 0,
			0, 0, 31, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 124, 77, 111, 100,
			68, 105, 102, 102, 0, 0, 0, 0, 57, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 46, 69, 118, 101, 110, 116, 115, 124,
			69, 110, 101, 109, 121, 69, 118, 101, 110, 116,
			72, 97, 110, 100, 108, 101, 114, 67, 111, 110,
			116, 97, 105, 110, 101, 114, 0, 0, 0, 0,
			48, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 46, 69, 118, 101, 110, 116,
			115, 124, 69, 110, 101, 109, 121, 69, 118, 101,
			110, 116, 72, 97, 110, 100, 108, 101, 114, 0,
			0, 0, 0, 50, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 46, 69, 118,
			101, 110, 116, 115, 124, 66, 114, 97, 99, 107,
			101, 110, 69, 118, 101, 110, 116, 72, 97, 110,
			100, 108, 101, 114, 0, 0, 0, 0, 53, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 46, 69, 118, 101, 110, 116, 115, 124,
			66, 97, 98, 111, 111, 110, 72, 97, 119, 107,
			69, 118, 101, 110, 116, 72, 97, 110, 100, 108,
			101, 114, 0, 0, 0, 0, 55, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 69, 118, 101, 110, 116, 115, 124, 66, 117,
			110, 107, 101, 114, 83, 112, 105, 100, 101, 114,
			69, 118, 101, 110, 116, 72, 97, 110, 100, 108,
			101, 114, 0, 0, 0, 0, 51, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 69, 118, 101, 110, 116, 115, 124, 67, 111,
			105, 108, 104, 101, 97, 100, 69, 118, 101, 110,
			116, 72, 97, 110, 100, 108, 101, 114, 0, 0,
			0, 0, 57, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 46, 69, 118, 101,
			110, 116, 115, 124, 69, 97, 114, 116, 104, 76,
			101, 118, 105, 97, 116, 104, 97, 110, 69, 118,
			101, 110, 116, 72, 97, 110, 100, 108, 101, 114,
			0, 0, 0, 0, 53, 65, 110, 116, 108, 101,
			114, 83, 104, 101, 100, 46, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 46, 69,
			118, 101, 110, 116, 115, 124, 69, 121, 101, 108,
			101, 115, 115, 68, 111, 103, 69, 118, 101, 110,
			116, 72, 97, 110, 100, 108, 101, 114, 0, 0,
			0, 0, 55, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 46, 69, 118, 101,
			110, 116, 115, 124, 70, 111, 114, 101, 115, 116,
			75, 101, 101, 112, 101, 114, 69, 118, 101, 110,
			116, 72, 97, 110, 100, 108, 101, 114, 0, 0,
			0, 0, 52, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 46, 69, 118, 101,
			110, 116, 115, 124, 71, 104, 111, 115, 116, 71,
			105, 114, 108, 69, 118, 101, 110, 116, 72, 97,
			110, 100, 108, 101, 114, 0, 0, 0, 0, 53,
			65, 110, 116, 108, 101, 114, 83, 104, 101, 100,
			46, 83, 107, 105, 110, 82, 101, 103, 105, 115,
			116, 114, 121, 46, 69, 118, 101, 110, 116, 115,
			124, 72, 111, 97, 114, 100, 101, 114, 66, 117,
			103, 69, 118, 101, 110, 116, 72, 97, 110, 100,
			108, 101, 114, 0, 0, 0, 0, 52, 65, 110,
			116, 108, 101, 114, 83, 104, 101, 100, 46, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 46, 69, 118, 101, 110, 116, 115, 124, 72,
			121, 103, 114, 111, 100, 101, 114, 101, 69, 118,
			101, 110, 116, 72, 97, 110, 100, 108, 101, 114,
			0, 0, 0, 0, 49, 65, 110, 116, 108, 101,
			114, 83, 104, 101, 100, 46, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 46, 69,
			118, 101, 110, 116, 115, 124, 74, 101, 115, 116,
			101, 114, 69, 118, 101, 110, 116, 72, 97, 110,
			100, 108, 101, 114, 0, 0, 0, 0, 53, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 46, 69, 118, 101, 110, 116, 115, 124,
			78, 117, 116, 99, 114, 97, 99, 107, 101, 114,
			69, 118, 101, 110, 116, 72, 97, 110, 100, 108,
			101, 114, 0, 0, 0, 0, 52, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 69, 118, 101, 110, 116, 115, 124, 83, 110,
			97, 114, 101, 70, 108, 101, 97, 69, 118, 101,
			110, 116, 72, 97, 110, 100, 108, 101, 114, 0,
			0, 0, 0, 54, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 46, 69, 118,
			101, 110, 116, 115, 124, 83, 112, 111, 114, 101,
			76, 105, 122, 97, 114, 100, 69, 118, 101, 110,
			116, 72, 97, 110, 100, 108, 101, 114, 0, 0,
			0, 0, 50, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 46, 69, 118, 101,
			110, 116, 115, 124, 84, 104, 117, 109, 112, 101,
			114, 69, 118, 101, 110, 116, 72, 97, 110, 100,
			108, 101, 114, 0, 0, 0, 0, 49, 65, 110,
			116, 108, 101, 114, 83, 104, 101, 100, 46, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 46, 69, 118, 101, 110, 116, 115, 124, 66,
			117, 116, 108, 101, 114, 69, 118, 101, 110, 116,
			72, 97, 110, 100, 108, 101, 114, 0, 0, 0,
			0, 50, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 46, 69, 118, 101, 110,
			116, 115, 124, 79, 108, 100, 66, 105, 114, 100,
			69, 118, 101, 110, 116, 72, 97, 110, 100, 108,
			101, 114, 0, 0, 0, 0, 49, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 69, 118, 101, 110, 116, 115, 124, 66, 97,
			114, 98, 101, 114, 69, 118, 101, 110, 116, 72,
			97, 110, 100, 108, 101, 114, 0, 0, 0, 0,
			55, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 46, 69, 118, 101, 110, 116,
			115, 124, 75, 105, 100, 110, 97, 112, 112, 101,
			114, 70, 111, 120, 69, 118, 101, 110, 116, 72,
			97, 110, 100, 108, 101, 114, 0, 0, 0, 0,
			53, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 46, 69, 118, 101, 110, 116,
			115, 124, 84, 117, 108, 105, 112, 83, 110, 97,
			107, 101, 69, 118, 101, 110, 116, 72, 97, 110,
			100, 108, 101, 114, 0, 0, 0, 0, 54, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 124, 76, 101, 116, 104, 97, 108, 76,
			101, 118, 101, 108, 76, 111, 97, 100, 101, 114,
			67, 111, 109, 112, 97, 116, 105, 98, 105, 108,
			105, 116, 121, 0, 0, 0, 0, 38, 65, 110,
			116, 108, 101, 114, 83, 104, 101, 100, 46, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 124, 77, 111, 111, 110, 82, 101, 112, 111,
			115, 105, 116, 111, 114, 121, 0, 0, 0, 0,
			46, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 68, 117, 112, 108, 105,
			99, 97, 116, 101, 77, 111, 111, 110, 69, 120,
			99, 101, 112, 116, 105, 111, 110, 0, 0, 0,
			0, 46, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 73, 110, 118, 97,
			108, 105, 100, 77, 111, 111, 110, 73, 100, 69,
			120, 99, 101, 112, 116, 105, 111, 110, 0, 0,
			0, 0, 39, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 124, 66, 97, 98,
			111, 111, 110, 72, 97, 119, 107, 80, 97, 116,
			99, 104, 0, 0, 0, 0, 59, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 66, 97, 98, 111, 111, 110, 72, 97, 119,
			107, 80, 97, 116, 99, 104, 124, 66, 97, 98,
			111, 111, 110, 72, 97, 119, 107, 86, 105, 101,
			119, 83, 116, 97, 116, 101, 0, 0, 0, 0,
			35, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 66, 97, 114, 98, 101,
			114, 80, 97, 116, 99, 104, 0, 0, 0, 0,
			51, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 46, 66, 97, 114, 98, 101,
			114, 80, 97, 116, 99, 104, 124, 66, 97, 114,
			98, 101, 114, 86, 105, 101, 119, 83, 116, 97,
			116, 101, 0, 0, 0, 0, 36, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			124, 66, 114, 97, 99, 107, 101, 110, 80, 97,
			116, 99, 104, 0, 0, 0, 0, 53, 65, 110,
			116, 108, 101, 114, 83, 104, 101, 100, 46, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 46, 66, 114, 97, 99, 107, 101, 110, 80,
			97, 116, 99, 104, 124, 66, 114, 97, 99, 107,
			101, 110, 86, 105, 101, 119, 83, 116, 97, 116,
			101, 0, 0, 0, 0, 41, 65, 110, 116, 108,
			101, 114, 83, 104, 101, 100, 46, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 124,
			66, 117, 110, 107, 101, 114, 83, 112, 105, 100,
			101, 114, 80, 97, 116, 99, 104, 0, 0, 0,
			0, 35, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 66, 117, 116, 108,
			101, 114, 80, 97, 116, 99, 104, 0, 0, 0,
			0, 37, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 67, 111, 105, 108,
			104, 101, 97, 100, 80, 97, 116, 99, 104, 0,
			0, 0, 0, 43, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 124, 69, 97,
			114, 116, 104, 76, 101, 118, 105, 97, 116, 104,
			97, 110, 80, 97, 116, 99, 104, 0, 0, 0,
			0, 47, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 69, 97, 114, 116,
			104, 76, 101, 118, 105, 97, 116, 104, 97, 110,
			86, 105, 101, 119, 83, 116, 97, 116, 101, 0,
			0, 0, 0, 34, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 124, 69, 110,
			101, 109, 121, 80, 97, 116, 99, 104, 0, 0,
			0, 0, 49, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 46, 69, 110, 101,
			109, 121, 80, 97, 116, 99, 104, 124, 69, 110,
			101, 109, 121, 86, 105, 101, 119, 83, 116, 97,
			116, 101, 0, 0, 0, 0, 39, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			124, 69, 121, 101, 108, 101, 115, 115, 68, 111,
			103, 80, 97, 116, 99, 104, 0, 0, 0, 0,
			59, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 46, 69, 121, 101, 108, 101,
			115, 115, 68, 111, 103, 80, 97, 116, 99, 104,
			124, 69, 121, 101, 108, 101, 115, 115, 68, 111,
			103, 86, 105, 101, 119, 83, 116, 97, 116, 101,
			0, 0, 0, 0, 41, 65, 110, 116, 108, 101,
			114, 83, 104, 101, 100, 46, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 124, 70,
			111, 114, 101, 115, 116, 75, 101, 101, 112, 101,
			114, 80, 97, 116, 99, 104, 0, 0, 0, 0,
			38, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 71, 104, 111, 115, 116,
			71, 105, 114, 108, 80, 97, 116, 99, 104, 0,
			0, 0, 0, 39, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 124, 72, 111,
			97, 114, 100, 101, 114, 66, 117, 103, 80, 97,
			116, 99, 104, 0, 0, 0, 0, 52, 65, 110,
			116, 108, 101, 114, 83, 104, 101, 100, 46, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 46, 72, 111, 97, 114, 100, 101, 114, 66,
			117, 103, 80, 97, 116, 99, 104, 124, 66, 117,
			103, 86, 105, 101, 119, 83, 116, 97, 116, 101,
			0, 0, 0, 0, 38, 65, 110, 116, 108, 101,
			114, 83, 104, 101, 100, 46, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 124, 72,
			121, 103, 114, 111, 100, 101, 114, 101, 80, 97,
			116, 99, 104, 0, 0, 0, 0, 35, 65, 110,
			116, 108, 101, 114, 83, 104, 101, 100, 46, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 124, 74, 101, 115, 116, 101, 114, 80, 97,
			116, 99, 104, 0, 0, 0, 0, 41, 65, 110,
			116, 108, 101, 114, 83, 104, 101, 100, 46, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 124, 75, 105, 100, 110, 97, 112, 112, 101,
			114, 70, 111, 120, 80, 97, 116, 99, 104, 0,
			0, 0, 0, 54, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 46, 75, 105,
			100, 110, 97, 112, 112, 101, 114, 70, 111, 120,
			80, 97, 116, 99, 104, 124, 70, 111, 120, 86,
			105, 101, 119, 83, 116, 97, 116, 101, 0, 0,
			0, 0, 35, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 124, 78, 101, 115,
			116, 84, 114, 97, 99, 107, 101, 114, 0, 0,
			0, 0, 39, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 124, 78, 117, 116,
			99, 114, 97, 99, 107, 101, 114, 80, 97, 116,
			99, 104, 0, 0, 0, 0, 36, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			124, 79, 108, 100, 66, 105, 114, 100, 80, 97,
			116, 99, 104, 0, 0, 0, 0, 53, 65, 110,
			116, 108, 101, 114, 83, 104, 101, 100, 46, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 46, 79, 108, 100, 66, 105, 114, 100, 80,
			97, 116, 99, 104, 124, 79, 108, 100, 66, 105,
			114, 100, 86, 105, 101, 119, 83, 116, 97, 116,
			101, 0, 0, 0, 0, 38, 65, 110, 116, 108,
			101, 114, 83, 104, 101, 100, 46, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 124,
			83, 110, 97, 114, 101, 70, 108, 101, 97, 80,
			97, 116, 99, 104, 0, 0, 0, 0, 57, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 46, 83, 110, 97, 114, 101, 70, 108,
			101, 97, 80, 97, 116, 99, 104, 124, 83, 110,
			97, 114, 101, 70, 108, 101, 97, 86, 105, 101,
			119, 83, 116, 97, 116, 101, 0, 0, 0, 0,
			40, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 83, 112, 111, 114, 101,
			76, 105, 122, 97, 114, 100, 80, 97, 116, 99,
			104, 0, 0, 0, 0, 36, 65, 110, 116, 108,
			101, 114, 83, 104, 101, 100, 46, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 124,
			84, 104, 117, 109, 112, 101, 114, 80, 97, 116,
			99, 104, 0, 0, 0, 0, 53, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 84, 104, 117, 109, 112, 101, 114, 80, 97,
			116, 99, 104, 124, 84, 104, 117, 109, 112, 101,
			114, 86, 105, 101, 119, 83, 116, 97, 116, 101,
			0, 0, 0, 0, 39, 65, 110, 116, 108, 101,
			114, 83, 104, 101, 100, 46, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 124, 84,
			117, 108, 105, 112, 83, 110, 97, 107, 101, 80,
			97, 116, 99, 104, 0, 0, 0, 0, 43, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 124, 73, 110, 105, 116, 105, 97, 108,
			105, 122, 97, 116, 105, 111, 110, 80, 97, 116,
			99, 104, 0, 0, 0, 0, 36, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			124, 83, 101, 115, 115, 105, 111, 110, 83, 116,
			97, 116, 101, 0, 0, 0, 0, 47, 65, 110,
			116, 108, 101, 114, 83, 104, 101, 100, 46, 83,
			107, 105, 110, 82, 101, 103, 105, 115, 116, 114,
			121, 46, 83, 101, 115, 115, 105, 111, 110, 83,
			116, 97, 116, 101, 124, 88, 79, 82, 83, 104,
			105, 102, 116, 51, 50, 0, 0, 0, 0, 36,
			65, 110, 116, 108, 101, 114, 83, 104, 101, 100,
			46, 83, 107, 105, 110, 82, 101, 103, 105, 115,
			116, 114, 121, 124, 83, 107, 105, 110, 73, 110,
			115, 116, 97, 110, 99, 101, 0, 0, 0, 0,
			28, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 83, 107, 105, 110, 0,
			0, 0, 0, 32, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 124, 78, 101,
			115, 116, 83, 107, 105, 110, 0, 0, 0, 0,
			34, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 83, 107, 105, 110, 67,
			111, 110, 102, 105, 103, 0, 0, 0, 0, 47,
			65, 110, 116, 108, 101, 114, 83, 104, 101, 100,
			46, 83, 107, 105, 110, 82, 101, 103, 105, 115,
			116, 114, 121, 124, 68, 101, 102, 97, 117, 108,
			116, 77, 97, 112, 67, 111, 110, 102, 105, 103,
			117, 114, 97, 116, 105, 111, 110, 0, 0, 0,
			0, 45, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 68, 101, 102, 97,
			117, 108, 116, 77, 97, 112, 67, 111, 110, 102,
			105, 103, 69, 110, 116, 114, 121, 0, 0, 0,
			0, 48, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 68, 101, 102, 97,
			117, 108, 116, 83, 107, 105, 110, 67, 111, 110,
			102, 105, 103, 117, 114, 97, 116, 105, 111, 110,
			0, 0, 0, 0, 46, 65, 110, 116, 108, 101,
			114, 83, 104, 101, 100, 46, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 124, 68,
			101, 102, 97, 117, 108, 116, 83, 107, 105, 110,
			67, 111, 110, 102, 105, 103, 69, 110, 116, 114,
			121, 0, 0, 0, 0, 30, 65, 110, 116, 108,
			101, 114, 83, 104, 101, 100, 46, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 124,
			67, 111, 110, 102, 105, 103, 0, 0, 0, 0,
			31, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 80, 114, 111, 102, 105,
			108, 101, 0, 0, 0, 0, 42, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			124, 69, 110, 101, 109, 121, 67, 111, 110, 102,
			105, 103, 117, 114, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 40, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 124, 77, 97,
			112, 67, 111, 110, 102, 105, 103, 117, 114, 97,
			116, 105, 111, 110, 0, 0, 0, 0, 39, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 124, 83, 107, 105, 110, 67, 111, 110,
			102, 105, 103, 69, 110, 116, 114, 121, 0, 0,
			0, 0, 39, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 124, 67, 111, 110,
			102, 105, 103, 67, 111, 110, 118, 101, 114, 116,
			101, 114, 0, 0, 0, 0, 40, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			124, 80, 114, 111, 102, 105, 108, 101, 67, 111,
			110, 118, 101, 114, 116, 101, 114, 0, 0, 0,
			0, 44, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 69, 110, 101, 109,
			121, 67, 111, 110, 102, 105, 103, 67, 111, 110,
			118, 101, 114, 116, 101, 114, 0, 0, 0, 0,
			47, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 67, 111, 110, 102, 105,
			103, 74, 115, 111, 110, 83, 101, 114, 105, 97,
			108, 105, 122, 97, 116, 105, 111, 110, 0, 0,
			0, 0, 31, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 124, 83, 107, 105,
			110, 110, 101, 114, 0, 0, 0, 0, 38, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 124, 83, 107, 105, 110, 82, 101, 112,
			111, 115, 105, 116, 111, 114, 121, 0, 0, 0,
			0, 44, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 77, 105, 115, 115,
			105, 110, 103, 83, 107, 105, 110, 69, 120, 99,
			101, 112, 116, 105, 111, 110, 0, 0, 0, 0,
			46, 65, 110, 116, 108, 101, 114, 83, 104, 101,
			100, 46, 83, 107, 105, 110, 82, 101, 103, 105,
			115, 116, 114, 121, 124, 68, 117, 112, 108, 105,
			99, 97, 116, 101, 83, 107, 105, 110, 69, 120,
			99, 101, 112, 116, 105, 111, 110, 0, 0, 0,
			0, 46, 65, 110, 116, 108, 101, 114, 83, 104,
			101, 100, 46, 83, 107, 105, 110, 82, 101, 103,
			105, 115, 116, 114, 121, 124, 73, 110, 118, 97,
			108, 105, 100, 83, 107, 105, 110, 73, 100, 69,
			120, 99, 101, 112, 116, 105, 111, 110, 0, 0,
			0, 0, 36, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 124, 67, 111, 110,
			102, 105, 103, 83, 101, 114, 118, 101, 114, 0,
			0, 0, 0, 36, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 124, 67, 111,
			110, 102, 105, 103, 67, 108, 105, 101, 110, 116,
			0, 0, 0, 0, 36, 65, 110, 116, 108, 101,
			114, 83, 104, 101, 100, 46, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 124, 80,
			114, 111, 102, 105, 108, 101, 84, 101, 115, 116,
			115, 0, 0, 0, 0, 45, 65, 110, 116, 108,
			101, 114, 83, 104, 101, 100, 46, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 46,
			80, 114, 111, 102, 105, 108, 101, 84, 101, 115,
			116, 115, 124, 70, 97, 107, 101, 83, 107, 105,
			110, 0, 0, 0, 0, 46, 65, 110, 116, 108,
			101, 114, 83, 104, 101, 100, 46, 83, 107, 105,
			110, 82, 101, 103, 105, 115, 116, 114, 121, 46,
			86, 105, 101, 119, 124, 65, 118, 97, 105, 108,
			97, 98, 108, 101, 83, 107, 105, 110, 86, 105,
			101, 119, 0, 0, 0, 0, 51, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 86, 105, 101, 119, 124, 67, 111, 110, 102,
			105, 103, 117, 114, 97, 116, 105, 111, 110, 86,
			105, 101, 119, 77, 111, 100, 101, 108, 0, 0,
			0, 0, 55, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 46, 86, 105, 101,
			119, 124, 69, 110, 101, 109, 121, 83, 107, 105,
			110, 67, 111, 110, 102, 105, 103, 117, 114, 97,
			116, 105, 111, 110, 77, 101, 110, 117, 0, 0,
			0, 0, 49, 65, 110, 116, 108, 101, 114, 83,
			104, 101, 100, 46, 83, 107, 105, 110, 82, 101,
			103, 105, 115, 116, 114, 121, 46, 86, 105, 101,
			119, 124, 77, 97, 112, 67, 111, 110, 102, 105,
			103, 117, 114, 97, 116, 105, 111, 110, 86, 105,
			101, 119, 0, 0, 0, 0, 47, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 86, 105, 101, 119, 124, 83, 97, 118, 101,
			80, 114, 111, 102, 105, 108, 101, 80, 111, 112,
			111, 118, 101, 114, 0, 0, 0, 0, 40, 65,
			110, 116, 108, 101, 114, 83, 104, 101, 100, 46,
			83, 107, 105, 110, 82, 101, 103, 105, 115, 116,
			114, 121, 46, 86, 105, 101, 119, 124, 83, 101,
			108, 102, 68, 101, 115, 116, 114, 111, 121, 0,
			0, 0, 0, 46, 65, 110, 116, 108, 101, 114,
			83, 104, 101, 100, 46, 83, 107, 105, 110, 82,
			101, 103, 105, 115, 116, 114, 121, 46, 86, 105,
			101, 119, 124, 83, 107, 105, 110, 70, 114, 101,
			113, 117, 101, 110, 99, 121, 86, 105, 101, 119,
			0, 0, 0, 0, 37, 65, 110, 116, 108, 101,
			114, 83, 104, 101, 100, 46, 83, 107, 105, 110,
			82, 101, 103, 105, 115, 116, 114, 121, 46, 86,
			105, 101, 119, 124, 84, 101, 115, 116, 83, 107,
			105, 110, 0, 0, 0, 0, 43, 65, 110, 116,
			108, 101, 114, 83, 104, 101, 100, 46, 83, 107,
			105, 110, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 86, 105, 101, 119, 124, 84, 101, 115, 116,
			67, 111, 110, 102, 105, 103, 77, 101, 110, 117
		};
		result.TotalFiles = 45;
		result.TotalTypes = 109;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace AntlerShed.SkinRegistry
{
	internal class DummySkinner : Skinner
	{
		public void Apply(GameObject enemy)
		{
		}

		public void Remove(GameObject enemy)
		{
		}
	}
	internal class EnemyRepository
	{
		private IDictionary<string, EnemyInfo> enemyRegistry = new Dictionary<string, EnemyInfo>();

		internal Dictionary<string, EnemyInfo> Enemies => new Dictionary<string, EnemyInfo>(enemyRegistry);

		internal void RegisterEnemy(string enemyType, string name, SpawnLocation location)
		{
			if (string.IsNullOrEmpty(enemyType))
			{
				throw new InvalidEnemyTypeException(enemyType);
			}
			if (enemyRegistry.ContainsKey(enemyType))
			{
				throw new DuplicateEnemyException(enemyType);
			}
			enemyRegistry.Add(enemyType, new EnemyInfo(name, enemyType, location));
		}
	}
	internal class DuplicateEnemyException : Exception
	{
		internal DuplicateEnemyException(string enemyType)
			: base("Enemy with type \"" + enemyType + "\" has already been registered.")
		{
		}
	}
	internal class InvalidEnemyTypeException : Exception
	{
		internal InvalidEnemyTypeException(string badType)
			: base("\"" + (badType ?? "null") + "\" is not a valid enemy type.")
		{
		}
	}
	[BepInPlugin("antlershed.lethalcompany.enemyskinregistry", "EnemySkinRegistry", "1.2.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class EnemySkinRegistry : BaseUnityPlugin
	{
		public const string modGUID = "antlershed.lethalcompany.enemyskinregistry";

		public const string modName = "EnemySkinRegistry";

		public const string modVersion = "1.2.0";

		public const string GHOST_GIRL_ID = "LethalCompany.GhostGirl";

		public const string THUMPER_ID = "LethalCompany.Thumper";

		public const string HOARDER_BUG_ID = "LethalCompany.HoarderBug";

		public const string NUTCRACKER_ID = "LethalCompany.Nutcracker";

		public const string JESTER_ID = "LethalCompany.Jester";

		public const string SPIDER_ID = "LethalCompany.BunkerSpider";

		public const string HYGRODERE_ID = "LethalCompany.Hygrodere";

		public const string COILHEAD_ID = "LethalCompany.Coilhead";

		public const string SNARE_FLEA_ID = "LethalCompany.SnareFlea";

		public const string SPORE_LIZARD_ID = "LethalCompany.SporeLizard";

		public const string BRACKEN_ID = "LethalCompany.Bracken";

		public const string EYELESS_DOG_ID = "LethalCompany.EyelessDog";

		public const string BABOON_HAWK_ID = "LethalCompany.BaboonHawk";

		public const string FOREST_KEEPER_ID = "LethalCompany.ForestKeeper";

		public const string EARTH_LEVIATHAN_ID = "LethalCompany.EarthLeviathan";

		public const string OLD_BIRD_ID = "LethalCompany.OldBird";

		public const string BUTLER_ID = "LethalCompany.Butler";

		public const string TULIP_SNAKE_ID = "LethalCompany.TulipSnake";

		public const string BARBER_ID = "LethalCompany.Barber";

		public const string KIDNAPPER_FOX_ID = "LethalCompany.KidnapperFox";

		public const string EXPERIMENTATION_ID = "41 Experimentation";

		public const string ASSURANCE_ID = "220 Assurance";

		public const string VOW_ID = "56 Vow";

		public const string MARCH_ID = "61 March";

		public const string REND_ID = "85 Rend";

		public const string DINE_ID = "7 Dine";

		public const string OFFENSE_ID = "21 Offense";

		public const string TITAN_ID = "8 Titan";

		public const string ARTIFICE_ID = "68 Artifice";

		public const string EMBRION_ID = "5 Embrion";

		public const string ADAMANCE_ID = "20 Adamance";

		private readonly Harmony harmony = new Harmony("antlershed.lethalcompany.enemyskinregistry");

		private static bool configInitialized = false;

		private static SkinRepository skins = new SkinRepository();

		private static EnemyRepository enemies = new EnemyRepository();

		private static MoonRepository moons = new MoonRepository();

		private static SessionState sessionState = new SessionState();

		private static SkinConfig skinConfig;

		private static ConfigServer configServer = new ConfigServer();

		private static ConfigClient configClient = new ConfigClient();

		private static EnemyEventHandlerContainer EventHandlers = new EnemyEventHandlerContainer();

		internal static ManualLogSource SkinLogger { get; private set; } = Logger.CreateLogSource("antlershed.lethalcompany.enemyskinregistry");


		internal static LogLevel LogLevelSetting => skinConfig?.LogLevelSetting?.Value ?? LogLevel.INFO;

		internal static bool AllowSyncSetting => (skinConfig?.AllowSyncSetting?.Value).GetValueOrDefault();

		internal static bool AttemptSyncSetting => (skinConfig?.AttemptSyncSetting?.Value).GetValueOrDefault();

		internal static bool AllowIndoorOutdoorConfig => skinConfig?.IndoorOutdoorSetting?.Value ?? true;

		private void Awake()
		{
			//IL_0410: Unknown result type (might be due to invalid IL or missing references)
			//IL_041a: Expected O, but got Unknown
			//IL_0415: Unknown result type (might be due to invalid IL or missing references)
			//IL_041f: Expected O, but got Unknown
			//IL_042a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0434: Expected O, but got Unknown
			//IL_043f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0449: Expected O, but got Unknown
			//IL_0454: Unknown result type (might be due to invalid IL or missing references)
			//IL_045e: Expected O, but got Unknown
			skinConfig = new SkinConfig(((BaseUnityPlugin)this).Config);
			harmony.PatchAll(typeof(BaboonHawkPatch));
			harmony.PatchAll(typeof(BrackenPatch));
			harmony.PatchAll(typeof(BunkerSpiderPatch));
			harmony.PatchAll(typeof(CoilheadPatch));
			harmony.PatchAll(typeof(EarthLeviathanPatch));
			harmony.PatchAll(typeof(EyelessDogPatch));
			harmony.PatchAll(typeof(ForestKeeperPatch));
			harmony.PatchAll(typeof(GhostGirlPatch));
			harmony.PatchAll(typeof(HoarderBugPatch));
			harmony.PatchAll(typeof(HygroderePatch));
			harmony.PatchAll(typeof(JesterPatch));
			harmony.PatchAll(typeof(NutcrackerPatch));
			harmony.PatchAll(typeof(SnareFleaPatch));
			harmony.PatchAll(typeof(SporeLizardPatch));
			harmony.PatchAll(typeof(ThumperPatch));
			harmony.PatchAll(typeof(EnemyPatch));
			harmony.PatchAll(typeof(InitializationPatch));
			harmony.PatchAll(typeof(ButlerPatch));
			harmony.PatchAll(typeof(OldBirdPatch));
			if (LogLevelSetting >= LogLevel.INFO)
			{
				SkinLogger.LogMessage((object)"Finished Patching Skin Events");
			}
			RegisterEnemy("LethalCompany.GhostGirl", "Ghost Girl", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.Thumper", "Thumper", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.HoarderBug", "Hoarder Bug", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.Nutcracker", "Nutcracker", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.Jester", "Jester", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.BunkerSpider", "Bunker Spider", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.Hygrodere", "Hygrodere", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.Coilhead", "Coilhead", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.SnareFlea", "Snare Flea", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.SporeLizard", "Spore Lizard", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.Bracken", "Bracken", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.EyelessDog", "Eyeless Dog", SpawnLocation.OUTDOOR);
			RegisterEnemy("LethalCompany.BaboonHawk", "Baboon Hawk", SpawnLocation.OUTDOOR);
			RegisterEnemy("LethalCompany.ForestKeeper", "Forest Keeper", SpawnLocation.OUTDOOR);
			RegisterEnemy("LethalCompany.EarthLeviathan", "Earth Leviathan", SpawnLocation.OUTDOOR);
			RegisterEnemy("LethalCompany.OldBird", "Old Bird", SpawnLocation.OUTDOOR);
			RegisterEnemy("LethalCompany.Butler", "Butler", SpawnLocation.INDOOR);
			RegisterEnemy("LethalCompany.TulipSnake", "Tulip Snake", SpawnLocation.OUTDOOR);
			RegisterEnemy("LethalCompany.KidnapperFox", "Kidnapper Fox", SpawnLocation.OUTDOOR);
			RegisterEnemy("LethalCompany.Barber", "Barber", SpawnLocation.INDOOR);
			if (LogLevelSetting >= LogLevel.INFO)
			{
				SkinLogger.LogMessage((object)"Registered Vanilla Enemies");
			}
			RegisterMoon("41 Experimentation", "Experimentation");
			RegisterMoon("220 Assurance", "Assurance");
			RegisterMoon("56 Vow", "Vow");
			RegisterMoon("21 Offense", "Offense");
			RegisterMoon("61 March", "March");
			RegisterMoon("85 Rend", "Rend");
			RegisterMoon("7 Dine", "Dine");
			RegisterMoon("8 Titan", "Titan");
			RegisterMoon("20 Adamance", "Adamance");
			RegisterMoon("68 Artifice", "Artifice");
			RegisterMoon("5 Embrion", "Embrion");
			if (LogLevelSetting >= LogLevel.INFO)
			{
				SkinLogger.LogMessage((object)"Registered Vanilla Moons");
			}
			string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
			AssetBundle bundle = AssetBundle.LoadFromFile(Path.Combine(directoryName, "AssetBundles/assets"));
			LethalConfigManager.AddConfigItem((BaseConfigItem)new GenericButtonConfigItem("Menu Access", "Enemy Skin Configuration Menu", "Nested configuration menu for editing skins", "Open", (GenericButtonHandler)delegate
			{
				GameObject obj = GameObject.Find("QuickMenu");
				Transform val = ((obj != null) ? obj.transform : null) ?? ((Component)Object.FindFirstObjectByType<MenuManager>()).transform.parent;
				if (configClient.Running && AttemptSyncSetting)
				{
					Object.Instantiate<GameObject>(bundle.LoadAsset<GameObject>("assets/enemyskinregistry/ui/configsyncactivepopover.prefab"), val);
				}
				else
				{
					Dictionary<string, Skin[]> dictionary = new Dictionary<string, Skin[]>();
					foreach (EnemyInfo enemy in enemies.Enemies.Values)
					{
						dictionary.Add(enemy.Id, skins.Skins.Values.Where((Skin skin) => skin.EnemyId.Equals(enemy.Id)).ToArray());
					}
					ConfigurationViewModel viewModel = new ConfigurationViewModel(moons.Moons.Values.ToArray(), enemies.Enemies, dictionary, skinConfig.GetProfiles(), skinConfig.GetWorkingProfile().Copy(), (from pair in skinConfig.DefaultSkinConfigs
						where skins.Skins.ContainsKey(pair.Key)
						select new KeyValuePair<string, string>(pair.Key, skins.Skins[pair.Key].Label)).ToDictionary((KeyValuePair<string, string> pair) => pair.Key, (KeyValuePair<string, string> pair) => pair.Value), (from pair in skinConfig.DefaultMoonConfigs
						where moons.Moons.ContainsKey(pair.Key)
						select new KeyValuePair<string, string>(pair.Key, moons.Moons[pair.Key].Name)).ToDictionary((KeyValuePair<string, string> pair) => pair.Key, (KeyValuePair<string, string> pair) => pair.Value));
					Object.Instantiate<GameObject>(bundle.LoadAsset<GameObject>("assets/enemyskinregistry/ui/skinconfigurationmenu.prefab"), val).GetComponent<EnemySkinConfigurationMenu>().Init(viewModel);
				}
			}));
			LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(skinConfig.AttemptSyncSetting, false));
			LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(skinConfig.AllowSyncSetting, false));
			LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(skinConfig.IndoorOutdoorSetting, false));
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)new EnumDropDownConfigItem<LogLevel>(skinConfig.LogLevelSetting, false));
		}

		internal static void InitConfig()
		{
			if (configInitialized)
			{
				return;
			}
			try
			{
				if (AppDomain.CurrentDomain.GetAssemblies().Any((Assembly a) => a.GetName().Name == "LethalLevelLoader"))
				{
					if (LogLevelSetting >= LogLevel.INFO)
					{
						SkinLogger.LogMessage((object)"Found lethal level loader plugin");
					}
					LethalLevelLoaderCompatibility.RegisterLLLMaps();
				}
			}
			catch
			{
			}
			if (LogLevelSetting >= LogLevel.INFO)
			{
				SkinLogger.LogMessage((object)"Initializing config");
			}
			skinConfig.InitConfigForAllSkins(enemies.Enemies.Values.ToArray(), skins.Skins.Values.ToArray(), moons.Moons.Values.Select((MoonInfo moon) => moon.Id).ToArray());
			configInitialized = true;
		}

		public static void RegisterSkin(Skin skin, DefaultSkinConfigData? defaultConfig = null)
		{
			try
			{
				skins.RegisterSkin(skin);
				if (defaultConfig.HasValue)
				{
					skinConfig.AddDefaultSkinConfig(new DefaultSkinConfiguration(skin.Id, defaultConfig.Value.defaultEntries, defaultConfig.Value.defaultOutdoorFrequency, defaultConfig.Value.vanillaFallbackOutdoorFrequency, defaultConfig.Value.defaultIndoorFrequency, defaultConfig.Value.vanillaFallbackIndoorFrequency));
				}
				if (LogLevelSetting >= LogLevel.INFO)
				{
					SkinLogger.LogInfo((object)("Registered skin \"" + skin.Label + "\""));
				}
			}
			catch (Exception ex)
			{
				if (ex is DuplicateSkinException || ex is InvalidSkinIdException)
				{
					if (LogLevelSetting >= LogLevel.ERROR)
					{
						SkinLogger.LogError((object)ex.Message);
					}
					return;
				}
				throw ex;
			}
		}

		public static void RegisterSkin(Skin skin)
		{
			RegisterSkin(skin, null);
		}

		public static void RegisterNestSkin(NestSkin nestSkin)
		{
			try
			{
				skins.RegisterNestSkin(nestSkin);
			}
			catch (Exception ex)
			{
				if (ex is DuplicateSkinException || ex is InvalidSkinIdException || ex is MissingSkinException)
				{
					if (LogLevelSetting >= LogLevel.ERROR)
					{
						SkinLogger.LogError((object)ex.Message);
					}
					return;
				}
				throw ex;
			}
		}

		public static void RegisterMoon(string planetName, string configLabel, DefaultMapConfigEntry[] defaultConfig)
		{
			try
			{
				moons.RegisterMoon(planetName, configLabel);
				if (defaultConfig != null && defaultConfig.Length != 0)
				{
					skinConfig.AddDefaultMoonConfig(new DefaultMapConfiguration(planetName, defaultConfig));
				}
				if (LogLevelSetting >= LogLevel.INFO)
				{
					SkinLogger.LogInfo((object)("Registered moon with id \"" + planetName + "\""));
				}
			}
			catch (Exception ex)
			{
				if (ex is DuplicateMoonException || ex is InvalidMoonIdException)
				{
					if (LogLevelSetting >= LogLevel.ERROR)
					{
						SkinLogger.LogError((object)ex.Message);
					}
					return;
				}
				throw ex;
			}
		}

		public static void RegisterMoon(string planetName, string configLabel)
		{
			RegisterMoon(planetName, configLabel, null);
		}

		public static Skin PickRandomSkin(string enemyType, SpawnLocation spawnLocation)
		{
			string skinAtValue = skinConfig.GetConfiguredDistribution(moons.GetMoon(sessionState.LevelId)?.Id ?? null, enemyType, spawnLocation).GetSkinAtValue(sessionState.GetRandom());
			return skins.GetSkin(skinAtValue);
		}

		[Obsolete("PickSkin is deprecated. Use PickRandomSkin instead.")]
		public static Skin PickSkin(string enemyType)
		{
			if ((enemyType == null || !enemies.Enemies.ContainsKey(enemyType)) && LogLevelSetting >= LogLevel.ERROR)
			{
				SkinLogger.LogError((object)("Tried to get a skin for unregistered enemy type \"" + enemyType + ".\" If you're using a custom enemy, you have to register it with the skin registry using EnemySkinRegistry.RegisterEnemy"));
			}
			return PickRandomSkin(enemyType, enemies.Enemies[enemyType].DefaultSpawnLocation);
		}

		public static Skin SelectSpawnSkin(GameObject enemy, string enemyType, SpawnLocation location)
		{
			if (sessionState.SpawnedFromNest(enemy))
			{
				string text = sessionState.RetrieveStagedSkin(enemy);
				if (text == null || !skins.Skins.ContainsKey(text))
				{
					return null;
				}
				return skins.Skins[text];
			}
			return PickRandomSkin(enemyType, location);
		}

		public static void ApplySkin(Skin skin, string enemyTypeId, GameObject enemy)
		{
			Skinner skinner = skin?.CreateSkinner() ?? new DummySkinner();
			sessionState.AddSkinner(enemy, skin?.Id, enemyTypeId, skinner);
			skinner.Apply(enemy);
			if (LogLevelSetting >= LogLevel.INFO && skin != null)
			{
				SkinLogger.LogInfo((object)("Applying skin with id \"" + skin.Id + "\" to enemy of type \"" + enemyTypeId + "\""));
			}
		}

		public static void ApplyNestSkin(string skinId, string enemyTypeId, EnemyAINestSpawnObject nest)
		{
			Skinner skinner = ((skinId != null && skins.NestSkins.ContainsKey(skinId)) ? skins.NestSkins[skinId] : null)?.CreateNestSkinner() ?? new DummySkinner();
			sessionState.AddSkinner(((Component)nest).gameObject, skinId, enemyTypeId, skinner);
			sessionState.AddSkinNest(nest, skinId);
			skinner.Apply(((Component)nest).gameObject);
			if (LogLevelSetting >= LogLevel.INFO && skinId != null && skins.NestSkins.ContainsKey(skinId))
			{
				SkinLogger.LogInfo((object)("Applying nest skin with id \"" + skinId + "\" to enemy nest of type \"" + enemyTypeId + "\""));
			}
		}

		public static void RemoveSkinner(GameObject enemy)
		{
			sessionState.RemoveInstance(enemy);
			if (LogLevelSetting >= LogLevel.INFO)
			{
				SkinLogger.LogInfo((object)"Removed skinner from enemy instance");
			}
		}

		internal static void UpdateRoundInfo(int seed, string level)
		{
			sessionState.SetCurrentLevel(level);
			sessionState.SetRandomNumberGenerator(seed);
		}

		public static void RegisterEnemy(string enemyId, string label, SpawnLocation spawnLocation)
		{
			try
			{
				enemies.RegisterEnemy(enemyId, label, spawnLocation);
				if (LogLevelSetting >= LogLevel.INFO)
				{
					SkinLogger.LogInfo((object)("Registered enemy with name \"" + label + "\""));
				}
			}
			catch (Exception ex)
			{
				if (ex is DuplicateEnemyException || ex is InvalidEnemyTypeException)
				{
					if (LogLevelSetting >= LogLevel.ERROR)
					{
						SkinLogger.LogError((object)ex.Message);
					}
					return;
				}
				throw ex;
			}
		}

		[Obsolete("The old signature for register enemy is deprecatecd. If you were previously using this method to register your enemy, call RegisterEnemy(string, string, Spawnlocation) instead to configure it's usual spawn location type. Ths method defaults to indoor.")]
		public static void RegisterEnemy(string enemyId, string label)
		{
			RegisterEnemy(enemyId, label, SpawnLocation.INDOOR);
		}

		internal static void UpdateConfiguration(Profile updatedProfile)
		{
			if (!configClient.Running || !AttemptSyncSetting)
			{
				skinConfig.UpdateConfiguration(updatedProfile.Copy());
			}
			if (configServer.Running)
			{
				configServer.BroadcastSyncMessage(skinConfig.GetWorkingProfile());
			}
			applyDeactivatedSkins();
		}

		private static void applyDeactivatedSkins()
		{
			foreach (GameObject item in sessionState.GetSkinnedObject())
			{
				string enemyType = sessionState.GetEnemyType(item);
				string skinId = sessionState.GetSkinId(item);
				Skinner skinner = sessionState.GetSkinner(item);
				if (enemyType != null && skinId != null && skinner != null && !(skinConfig.GetWorkingProfile().GetEnemyConfig(enemyType)?.ActiveSkins ?? new string[0]).Contains(skinId))
				{
					skinner.Remove(item);
					sessionState.ClearSkinner(item);
				}
			}
		}

		public static List<EnemyEventHandler> GetEnemyEventHandlers(EnemyAI enemy)
		{
			return EventHandlers.GetEventHandlers(enemy);
		}

		public static void RegisterEnemyEventHandler(EnemyAI enemy, EnemyEventHandler handler)
		{
			EventHandlers.RegisterEnemyEventHandler(enemy, handler);
			if (LogLevelSetting >= LogLevel.INFO)
			{
				SkinLogger.LogInfo((object)"Registered event handler for enemy.");
			}
		}

		public static void RemoveEnemyEventHandler(EnemyAI enemy, EnemyEventHandler handler)
		{
			EventHandlers.RemoveEnemyEventHandler(enemy, handler);
			if (LogLevelSetting >= LogLevel.INFO)
			{
				SkinLogger.LogInfo((object)"Removed event handler for enemy.");
			}
		}

		public static void StageSkin(GameObject spawnedEnemy, EnemyAINestSpawnObject spawner)
		{
			sessionState.StageSkinForSpawn(spawner, spawnedEnemy);
		}

		internal static string VanillaIdFromInstance(EnemyAI enemy)
		{
			if (!(enemy is FlowermanAI))
			{
				if (!(enemy is HoarderBugAI))
				{
					if (!(enemy is SandSpiderAI))
					{
						if (!(enemy is BaboonBirdAI))
						{
							if (!(enemy is SpringManAI))
							{
								if (!(enemy is SandWormAI))
								{
									if (!(enemy is MouthDogAI))
									{
										if (!(enemy is ForestGiantAI))
										{
											if (!(enemy is DressGirlAI))
											{
												if (!(enemy is BlobAI))
												{
													if (!(enemy is JesterAI))
													{
														if (!(enemy is NutcrackerEnemyAI))
														{
															if (!(enemy is CentipedeAI))
															{
																if (!(enemy is PufferAI))
																{
																	if (!(enemy is CrawlerAI))
																	{
																		if (!(enemy is ButlerEnemyAI))
																		{
																			if (!(enemy is RadMechAI))
																			{
																				if (!(enemy is FlowerSnakeEnemy))
																				{
																					if (!(enemy is ClaySurgeonAI))
																					{
																						if (enemy is BushWolfEnemy)
																						{
																							return "LethalCompany.KidnapperFox";
																						}
																						return null;
																					}
																					return "LethalCompany.Barber";
																				}
																				return "LethalCompany.TulipSnake";
																			}
																			return "LethalCompany.OldBird";
																		}
																		return "LethalCompany.Butler";
																	}
																	return "LethalCompany.Thumper";
																}
																return "LethalCompany.SporeLizard";
															}
															return "LethalCompany.SnareFlea";
														}
														return "LethalCompany.Nutcracker";
													}
													return "LethalCompany.Jester";
												}
												return "LethalCompany.Hygrodere";
											}
											return "LethalCompany.GhostGirl";
										}
										return "LethalCompany.ForestKeeper";
									}
									return "LethalCompany.EyelessDog";
								}
								return "LethalCompany.EarthLeviathan";
							}
							return "LethalCompany.Coilhead";
						}
						return "LethalCompany.BaboonHawk";
					}
					return "LethalCompany.BunkerSpider";
				}
				return "LethalCompany.HoarderBug";
			}
			return "LethalCompany.Bracken";
		}

		internal static void ApplyDefaultSkinConfiguration(string skinId, Profile config)
		{
			if (skinId != null && skins.Skins.ContainsKey(skinId))
			{
				skinConfig.ApplyDefaultSkinConfig(skinId, config, skins.Skins[skinId].Id, moons.Moons.Keys.ToArray());
			}
			else if (LogLevelSetting >= LogLevel.WARN)
			{
				SkinLogger.LogWarning((object)("Skipping default configuration for skin with id \"" + skinId + "\" because it is not installed."));
			}
		}

		internal static void ApplyDefaultMoonConfiguration(string moonId, Profile config)
		{
			if (moonId != null && moons.Moons.ContainsKey(moonId))
			{
				skinConfig.ApplyDefaultMoonConfig(moonId, config, skins.Skins.Keys.ToArray());
			}
			else if (LogLevelSetting >= LogLevel.WARN)
			{
				SkinLogger.LogWarning((object)("Skipping default configuration for moon with id \"" + moonId + "\" because it is not installed."));
			}
		}

		internal static Profile GetWorkingProfile()
		{
			return skinConfig.GetWorkingProfile();
		}

		internal static void SyncWithRemoteProfile(Profile cfg)
		{
			List<string> list2 = cfg.ConfigData.Select((EnemyConfiguration enemyConfig) => enemyConfig.EnemyId).ToHashSet().Except(enemies.Enemies.Keys.ToHashSet())
				.ToList();
			List<string> list3 = cfg.ConfigData.Select((EnemyConfiguration enemyConfig) => enemyConfig.ActiveSkins).Aggregate(new HashSet<string>(), (HashSet<string> list, string[] arr) => list.Union(arr).ToHashSet()).Except(skins.Skins.Keys.ToHashSet())
				.ToList();
			List<string> list4 = cfg.ConfigData.Select((EnemyConfiguration enemyConfig) => enemyConfig.MapConfigs).Aggregate(new HashSet<string>(), (HashSet<string> list, MapConfiguration[] moonCfgs) => list.Union(moonCfgs.Select((MapConfiguration moonCfg) => moonCfg.Id)).ToHashSet()).Except(moons.Moons.Keys.ToHashSet())
				.ToList();
			if (list2.Count > 0 && LogLevelSetting >= LogLevel.ERROR)
			{
				SkinLogger.LogError((object)("Could not sync with remote profile. This client is missing the following enemies: " + list2.Aggregate("", (string current, string enemy) => current + (string.IsNullOrEmpty(current) ? "" : ", ") + enemy)));
			}
			if (list3.Count > 0 && LogLevelSetting >= LogLevel.ERROR)
			{
				SkinLogger.LogError((object)("Could not sync with remote profile. This client is missing the following skins: " + list3.Aggregate("", (string current, string skin) => current + (string.IsNullOrEmpty(current) ? "" : ", ") + skin)));
			}
			if (list4.Count > 0 && LogLevelSetting >= LogLevel.ERROR)
			{
				SkinLogger.LogError((object)("Could not sync with remote profile. This client is missing the following moons: " + list4.Aggregate("", (string current, string moon) => current + (string.IsNullOrEmpty(current) ? "" : ", ") + moon)));
			}
			if (list4.Count == 0 && list3.Count == 0 && list2.Count == 0)
			{
				EnemyConfiguration[] configData = cfg.ConfigData;
				for (int i = 0; i < configData.Length; i++)
				{
					configData[i].RemoveInactiveSkins();
				}
				skinConfig.SyncConfiguration(cfg);
				applyDeactivatedSkins();
			}
		}

		internal static string[] GetStoredProfiles()
		{
			return skinConfig.GetProfiles();
		}

		internal static string StoreProfile(Profile tempProfile, string label)
		{
			string text = new Regex("[^a-zA-Z0-9_-]").Replace(label, "");
			if (string.IsNullOrEmpty(text))
			{
				throw new ProfileNameException();
			}
			skinConfig.StoreProfile(tempProfile, text);
			return text;
		}

		internal static string OverwriteProfile(Profile tempProfile, string label)
		{
			string text = new Regex("[^a-zA-Z0-9_-]").Replace(label, "");
			if (string.IsNullOrEmpty(text))
			{
				throw new ProfileNameException();
			}
			skinConfig.OverwriteProfile(tempProfile, text);
			return text;
		}

		internal static Profile GetProfile(string profile)
		{
			if (skinConfig.GetProfiles().Contains(profile))
			{
				return skinConfig.LoadProfile(profile);
			}
			throw new KeyNotFoundException();
		}

		internal static void StartConfigServer()
		{
			configServer.Start();
		}

		internal static void StopConfigServer()
		{
			configServer.Stop();
		}

		internal static void StartConfigClient()
		{
			configClient.Start();
			configClient.SendSyncRequestToServer();
		}

		internal static void StopConfigClient()
		{
			configClient.Stop();
			skinConfig.LoadLocalProfile();
		}
	}
	public enum LogLevel
	{
		NONE,
		ERROR,
		WARN,
		INFO
	}
	public struct DefaultSkinConfigData
	{
		internal DefaultSkinConfigEntry[] defaultEntries;

		internal float defaultIndoorFrequency;

		internal float vanillaFallbackIndoorFrequency;

		internal float defaultOutdoorFrequency;

		internal float vanillaFallbackOutdoorFrequency;

		public DefaultSkinConfigData(DefaultSkinConfigEntry[] entries, float defaultOutdoorFrequency, float vanillafallbackOutdoor, float defaultIndoorFrequency, float vanillafallbackIndoor)
		{
			defaultEntries = entries;
			this.defaultOutdoorFrequency = defaultOutdoorFrequency;
			this.defaultIndoorFrequency = defaultIndoorFrequency;
			vanillaFallbackOutdoorFrequency = vanillafallbackOutdoor;
			vanillaFallbackIndoorFrequency = vanillafallbackIndoor;
		}

		public DefaultSkinConfigData(DefaultSkinConfigEntry[] entries, float defaultFrequency = 1f, float vanillafallback = 0f)
		{
			defaultEntries = entries;
			defaultIndoorFrequency = defaultFrequency;
			defaultOutdoorFrequency = defaultFrequency;
			vanillaFallbackIndoorFrequency = vanillafallback;
			vanillaFallbackOutdoorFrequency = vanillafallback;
		}
	}
	internal class ProfileNameException : Exception
	{
		public ProfileNameException()
			: base("Skin names need at least one alphanumeric character, dash, or underscore")
		{
		}
	}
	public enum SpawnLocation
	{
		INDOOR,
		OUTDOOR
	}
	internal struct EnemyInfo
	{
		public string Name { get; }

		public string Id { get; }

		public SpawnLocation DefaultSpawnLocation { get; }

		public EnemyInfo(string name, string id, SpawnLocation spawnLocation)
		{
			Name = name;
			Id = id;
			DefaultSpawnLocation = spawnLocation;
		}
	}
	internal struct MoonInfo
	{
		public string Name { get; }

		public string Id { get; }

		internal MoonInfo(string name, string id)
		{
			Name = name;
			Id = id;
		}
	}
	internal class SkinDistribution
	{
		private SkinThreshold[] skins;

		internal SkinDistribution(SkinThreshold[] skins)
		{
			this.skins = skins;
		}

		internal SkinDistribution()
		{
			skins = new SkinThreshold[0];
		}

		internal string GetSkinAtValue(float value)
		{
			int i;
			for (i = 0; i < skins.Length && value > skins[i].Threshold; i++)
			{
			}
			if (i >= skins.Length)
			{
				return null;
			}
			return skins[i].SkinId;
		}
	}
	internal struct SkinThreshold
	{
		public float Threshold { get; }

		public string SkinId { get; }

		public SkinThreshold(string skinId, float threshold)
		{
			Threshold = threshold;
			SkinId = skinId;
		}
	}
	internal struct ModDiff
	{
		public string[] Skins { get; }

		public string[] Moons { get; }

		public string[] Enemies { get; }

		public ModDiff(string[] skins, string[] moons, string[] enemies)
		{
			Skins = skins;
			Moons = moons;
			Enemies = enemies;
		}
	}
	internal class LethalLevelLoaderCompatibility
	{
		internal static void RegisterLLLMaps()
		{
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"Registering LLL moons brought to you by IAmBatby.");
			}
			HashSet<string> hashSet = new HashSet<string>();
			foreach (ExtendedLevel extendedLevel in PatchedContent.ExtendedLevels)
			{
				if ((Object)(object)extendedLevel.SelectableLevel != (Object)null)
				{
					EnemySkinRegistry.RegisterMoon(extendedLevel.SelectableLevel.PlanetName, extendedLevel.NumberlessPlanetName);
					hashSet.Add(extendedLevel.SelectableLevel.PlanetName);
				}
			}
			foreach (ExtendedMod extendedMod in PatchedContent.ExtendedMods)
			{
				foreach (ExtendedLevel extendedLevel2 in extendedMod.ExtendedLevels)
				{
					if ((Object)(object)extendedLevel2.SelectableLevel != (Object)null && !hashSet.Contains(extendedLevel2.SelectableLevel.PlanetName))
					{
						EnemySkinRegistry.RegisterMoon(extendedLevel2.SelectableLevel.PlanetName, extendedLevel2.NumberlessPlanetName);
						hashSet.Add(extendedLevel2.SelectableLevel.PlanetName);
					}
				}
			}
		}
	}
	internal class MoonRepository
	{
		private IDictionary<string, MoonInfo> moonRegistry = new Dictionary<string, MoonInfo>();

		internal IDictionary<string, MoonInfo> Moons => new Dictionary<string, MoonInfo>(moonRegistry);

		internal void RegisterMoon(string key, string label)
		{
			if (string.IsNullOrEmpty(key))
			{
				throw new InvalidMoonIdException(key);
			}
			if (moonRegistry.ContainsKey(key))
			{
				throw new DuplicateMoonException(key);
			}
			moonRegistry.Add(key, new MoonInfo(label, key));
		}

		internal MoonInfo? GetMoon(string key)
		{
			if (key == null || !moonRegistry.ContainsKey(key))
			{
				return null;
			}
			return moonRegistry[key];
		}
	}
	internal class DuplicateMoonException : Exception
	{
		internal DuplicateMoonException(string moonId)
			: base("Moon with id \"" + moonId + "\" has already been registered.")
		{
		}
	}
	internal class InvalidMoonIdException : Exception
	{
		internal InvalidMoonIdException(string badId)
			: base("\"" + (badId ?? "null") + "\" is not a valid moon Id")
		{
		}
	}
	internal class BaboonHawkPatch
	{
		private class BaboonHawkViewState
		{
			public bool inKillAnimation;

			public int aggressionState;

			public bool sleeping;

			public bool sitting;
		}

		private const int NONE = 0;

		private const int INTIMIDATE = 1;

		private const int ATTACK = 2;

		private static Dictionary<BaboonBirdAI, BaboonHawkViewState> viewState = new Dictionary<BaboonBirdAI, BaboonHawkViewState>();

		[HarmonyPostfix]
		[HarmonyPatch(typeof(BaboonBirdAI), "Start")]
		private static void PostfixStart(BaboonBirdAI __instance, bool ___doingKillAnimation)
		{
			viewState[__instance] = new BaboonHawkViewState();
			viewState[__instance].inKillAnimation = ___doingKillAnimation;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(BaboonBirdAI), "OnCollideWithPlayer")]
		private static void PostfixOnCollideWithPlayer(BaboonBirdAI __instance, bool ___doingKillAnimation, float ___timeSinceHitting, Collider other)
		{
			if (___timeSinceHitting != 0f)
			{
				return;
			}
			PlayerControllerB controller = ((EnemyAI)__instance).MeetsStandardPlayerCollisionConditions(other, ((EnemyAI)__instance).inSpecialAnimation || ___doingKillAnimation, false);
			if ((Object)(object)controller != (Object)null)
			{
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BaboonHawkEventHandler)?.OnAttackPlayer(__instance, controller);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk Attack Player");
				}
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(BaboonBirdAI), "OnCollideWithEnemy")]
		private static void PostfixOnCollideWithEnemy(BaboonBirdAI __instance, float ___timeSinceHitting, EnemyAI enemyScript)
		{
			if (___timeSinceHitting == 0f)
			{
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BaboonHawkEventHandler)?.OnAttackEnemy(__instance, enemyScript);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk Attack Enemy");
				}
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(BaboonBirdAI), "killPlayerAnimation")]
		private static void PrefixKillAnimation(BaboonBirdAI __instance, int playerObject)
		{
			PlayerControllerB killedPlayer = StartOfRound.Instance.allPlayerScripts[playerObject];
			EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
			{
				(handler as BaboonHawkEventHandler)?.OnKillPlayer(__instance, killedPlayer);
			});
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk Start Kill Player");
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(BaboonBirdAI), "StopKillAnimation")]
		private static void PostfixStopKillAnimation(BaboonBirdAI __instance)
		{
			EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
			{
				(handler as BaboonHawkEventHandler)?.OnFinishKillPlayerAnimation(__instance);
			});
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk Cancel Kill Animation");
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(BaboonBirdAI), "EnemyEnterRestModeClientRpc")]
		private static void PostfixEnterRestMode(BaboonBirdAI __instance, bool sleep)
		{
			if (!viewState.ContainsKey(__instance))
			{
				return;
			}
			if (sleep && !viewState[__instance].sleeping)
			{
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BaboonHawkEventHandler)?.OnSleep(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk Sleep");
				}
			}
			else if (!sleep && !viewState[__instance].sitting)
			{
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BaboonHawkEventHandler)?.OnSit(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk Sit");
				}
			}
			viewState[__instance].sleeping = sleep;
			viewState[__instance].sitting = !sleep;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(BaboonBirdAI), "EnemyGetUpClientRpc")]
		private static void PostfixEnemyGetUp(BaboonBirdAI __instance)
		{
			if (viewState.ContainsKey(__instance) && (viewState[__instance].sitting || viewState[__instance].sleeping))
			{
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BaboonHawkEventHandler)?.OnGetUp(__instance);
				});
				viewState[__instance].sleeping = false;
				viewState[__instance].sitting = false;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(BaboonBirdAI), "GrabScrap")]
		private static void PostfixGrabScrap(BaboonBirdAI __instance)
		{
			EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
			{
				(handler as BaboonHawkEventHandler)?.OnPickUpScrap(__instance, __instance.heldScrap);
			});
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk pick up scrap");
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(BaboonBirdAI), "DropScrap")]
		private static void PostfixDropScrap(BaboonBirdAI __instance)
		{
			EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
			{
				(handler as BaboonHawkEventHandler)?.OnDropScrap(__instance);
			});
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk Drop Scrap");
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(BaboonBirdAI), "Update")]
		private static void PrefixUpdate(BaboonBirdAI __instance, int ___previousAggressiveMode, int ___aggressiveMode)
		{
			if (((EnemyAI)__instance).isEnemyDead || !viewState.ContainsKey(__instance) || viewState[__instance].aggressionState == ___aggressiveMode)
			{
				return;
			}
			viewState[__instance].aggressionState = ___aggressiveMode;
			switch (___aggressiveMode)
			{
			case 0:
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BaboonHawkEventHandler)?.OnCalmDown(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Calm Down");
				}
				break;
			case 1:
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BaboonHawkEventHandler)?.OnIntimidate(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk Intimidate");
				}
				break;
			case 2:
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BaboonHawkEventHandler)?.OnEnterAttackMode(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Attack State");
				}
				break;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(BaboonBirdAI), "Update")]
		private static void PostfixUpdate(BaboonBirdAI __instance, bool ___doingKillAnimation)
		{
			if (!viewState.ContainsKey(__instance) || viewState[__instance].inKillAnimation == ___doingKillAnimation)
			{
				return;
			}
			if (!___doingKillAnimation)
			{
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BaboonHawkEventHandler)?.OnFinishKillPlayerAnimation(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"BB Hawk End Kill");
				}
			}
			viewState[__instance].inKillAnimation = ___doingKillAnimation;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(EnemyAI), "OnDestroy")]
		private static void PostfixDestroyed(EnemyAI __instance)
		{
			if (__instance is BaboonBirdAI && (Object)(object)__instance != (Object)null && viewState.ContainsKey((BaboonBirdAI)(object)((__instance is BaboonBirdAI) ? __instance : null)))
			{
				RemoveViewState((BaboonBirdAI)(object)((__instance is BaboonBirdAI) ? __instance : null));
			}
		}

		internal static void RemoveViewState(BaboonBirdAI __instance)
		{
			viewState.Remove(__instance);
		}
	}
	internal class BarberPatch
	{
		private class BarberViewState
		{
			public bool wasJumping;
		}

		private static Dictionary<ClaySurgeonAI, BarberViewState> viewState = new Dictionary<ClaySurgeonAI, BarberViewState>();

		[HarmonyPostfix]
		[HarmonyPatch(typeof(ClaySurgeonAI), "Update")]
		private static void PostFixUpdate(ClaySurgeonAI __instance)
		{
			if (!viewState.ContainsKey(__instance))
			{
				return;
			}
			if (__instance.isJumping != viewState[__instance].wasJumping)
			{
				if (__instance.isJumping)
				{
					EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
					{
						(handler as BarberEventHandler)?.OnStartJump(__instance);
					});
					if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
					{
						EnemySkinRegistry.SkinLogger.LogInfo((object)"Barber started jump");
					}
				}
				else
				{
					EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
					{
						(handler as BarberEventHandler)?.OnStopJump(__instance);
					});
					if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
					{
						EnemySkinRegistry.SkinLogger.LogInfo((object)"Barber stopped jump");
					}
				}
			}
			viewState[__instance].wasJumping = __instance.isJumping;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(ClaySurgeonAI), "KillPlayerClientRpc")]
		private static void PostfixCollideWithPlayer(ClaySurgeonAI __instance)
		{
		}
	}
	internal class BrackenPatch
	{
		private class BrackenViewState
		{
			public bool carryingBody;
		}

		internal const int SNEAKING = 0;

		internal const int EVADING = 1;

		internal const int ENRAGED = 2;

		private static Dictionary<FlowermanAI, BrackenViewState> viewState = new Dictionary<FlowermanAI, BrackenViewState>();

		[HarmonyPrefix]
		[HarmonyPatch(typeof(EnemyAI), "SwitchToBehaviourStateOnLocalClient")]
		private static void PrefixSwitchBehavior(EnemyAI __instance, int stateIndex)
		{
			if (stateIndex == __instance.currentBehaviourStateIndex || !(__instance is FlowermanAI))
			{
				return;
			}
			switch (stateIndex)
			{
			case 0:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BrackenEventHandler)?.OnSneakStateEntered((FlowermanAI)(object)((__instance is FlowermanAI) ? __instance : null));
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Bracken Switch To Sneak");
				}
				break;
			case 1:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BrackenEventHandler)?.OnEvadeStateEntered((FlowermanAI)(object)((__instance is FlowermanAI) ? __instance : null));
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Bracken Switch To Evade");
				}
				break;
			case 2:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BrackenEventHandler)?.OnEnragedStateEntered((FlowermanAI)(object)((__instance is FlowermanAI) ? __instance : null));
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Bracken Switch To Enrage");
				}
				break;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(FlowermanAI), "killAnimation")]
		private static void PostFixKillPlayer(FlowermanAI __instance)
		{
			EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
			{
				(handler as BrackenEventHandler)?.OnSnapPlayerNeck(__instance, ((EnemyAI)__instance).inSpecialAnimationWithPlayer);
			});
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"Bracken Kill");
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(FlowermanAI), "Update")]
		private static void PostFixUpdate(FlowermanAI __instance)
		{
			if (!viewState.ContainsKey(__instance))
			{
				return;
			}
			if (__instance.carryingPlayerBody != viewState[__instance].carryingBody)
			{
				if (__instance.carryingPlayerBody)
				{
					EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
					{
						(handler as BrackenEventHandler)?.OnPickUpCorpse(__instance, __instance.bodyBeingCarried);
					});
					if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
					{
						EnemySkinRegistry.SkinLogger.LogInfo((object)"Bracken Pickup Corpse");
					}
				}
				else
				{
					EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
					{
						(handler as BrackenEventHandler)?.OnDropCorpse(__instance);
					});
					if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
					{
						EnemySkinRegistry.SkinLogger.LogInfo((object)"Bracken Drop Corpse");
					}
				}
			}
			viewState[__instance].carryingBody = __instance.carryingPlayerBody;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(EnemyAI), "OnDestroy")]
		private static void PostfixDestroyed(EnemyAI __instance)
		{
			if (__instance is FlowermanAI && (Object)(object)__instance != (Object)null && viewState.ContainsKey((FlowermanAI)(object)((__instance is FlowermanAI) ? __instance : null)))
			{
				viewState.Remove((FlowermanAI)(object)((__instance is FlowermanAI) ? __instance : null));
			}
		}
	}
	internal class BunkerSpiderPatch
	{
		internal const int WEB_PLACING = 0;

		internal const int WAITING = 1;

		internal const int CHASING = 2;

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SandSpiderAI), "turnBodyIntoWeb")]
		private static void PrefixSpoolBody(SandSpiderAI __instance, DeadBodyInfo ___currentlyHeldBody)
		{
			if ((Object)(object)___currentlyHeldBody != (Object)null)
			{
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BunkerSpiderEventHandler)?.OnWrapBody(__instance, ___currentlyHeldBody);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Spider Spooled Body");
				}
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SandSpiderAI), "CancelSpoolingBody")]
		private static void PrefixCancelSpoolBody(SandSpiderAI __instance, DeadBodyInfo ___currentlyHeldBody)
		{
			EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
			{
				(handler as BunkerSpiderEventHandler)?.OnCancelWrappingBody(__instance, ___currentlyHeldBody);
			});
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"Spider Spooling interrupted");
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SandSpiderAI), "HangBodyFromCeiling")]
		private static void PrefixHangBody(SandSpiderAI __instance, DeadBodyInfo ___currentlyHeldBody)
		{
			if ((Object)(object)___currentlyHeldBody != (Object)null)
			{
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BunkerSpiderEventHandler)?.OnHangBody(__instance, ___currentlyHeldBody);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Spider Hang Body");
				}
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(EnemyAI), "SwitchToBehaviourStateOnLocalClient")]
		private static void PrefixSwitchBehavior(EnemyAI __instance, int stateIndex)
		{
			if (stateIndex == __instance.currentBehaviourStateIndex || !(__instance is SandSpiderAI))
			{
				return;
			}
			switch (stateIndex)
			{
			case 0:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BunkerSpiderEventHandler)?.OnEnterWebbingState((SandSpiderAI)(object)((__instance is SandSpiderAI) ? __instance : null));
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Spider Enter Webbing State");
				}
				break;
			case 1:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BunkerSpiderEventHandler)?.OnEnterWaitingState((SandSpiderAI)(object)((__instance is SandSpiderAI) ? __instance : null));
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Spider entered waiting state");
				}
				break;
			case 2:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BunkerSpiderEventHandler)?.OnEnterChasingState((SandSpiderAI)(object)((__instance is SandSpiderAI) ? __instance : null));
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Spider entered chasing state");
				}
				break;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(SandSpiderAI), "OnCollideWithPlayer")]
		private static void PostfixOnCollideWithPlayer(SandSpiderAI __instance, float ___timeSinceHittingPlayer, bool ___spoolingPlayerBody, Collider other)
		{
			if (___timeSinceHittingPlayer == 0f)
			{
				PlayerControllerB playerControllerB = ((EnemyAI)__instance).MeetsStandardPlayerCollisionConditions(other, ___spoolingPlayerBody, false);
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as BunkerSpiderEventHandler)?.OnAttackPlayer(__instance, playerControllerB);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Spider hit player");
				}
			}
		}
	}
	internal class ButlerPatch
	{
		internal const int SWEEPING = 0;

		internal const int PREMEDITATING = 1;

		internal const int MURDERING = 2;

		[HarmonyPostfix]
		[HarmonyPatch(typeof(ButlerEnemyAI), "OnCollideWithPlayer")]
		private static void PostfixOnCollideWithPlayer(ButlerEnemyAI __instance, float ___timeSinceHittingPlayer, Collider other)
		{
			if (___timeSinceHittingPlayer == 0f)
			{
				PlayerControllerB playerControllerB = ((EnemyAI)__instance).MeetsStandardPlayerCollisionConditions(other, false, false);
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as ButlerEventHandler)?.OnStabPlayer(__instance, playerControllerB);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Butler stabbed player");
				}
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(EnemyAI), "SwitchToBehaviourStateOnLocalClient")]
		private static void PrefixSwitchBehavior(EnemyAI __instance, int stateIndex)
		{
			if (stateIndex == __instance.currentBehaviourStateIndex || !(__instance is ButlerEnemyAI))
			{
				return;
			}
			switch (stateIndex)
			{
			case 0:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as ButlerEventHandler)?.OnEnterSweepingState(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Butler entered sweeping state");
				}
				break;
			case 1:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as ButlerEventHandler)?.OnEnterPremeditatingState(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Butler entered premeditating state");
				}
				break;
			case 2:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as ButlerEventHandler)?.OnEnterMurderingState(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Butler entered murdering state");
				}
				break;
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(ButlerEnemyAI), "ButlerBlowUpAndPop")]
		private static void PrefixBlowUp(ButlerEnemyAI __instance)
		{
			((MonoBehaviour)__instance).StartCoroutine(ButlerPopTracker(__instance));
			EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
			{
				(handler as ButlerEventHandler)?.OnInflate(__instance);
			});
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"Butler started inflating (making it big and round)");
			}
		}

		private static IEnumerator ButlerPopTracker(ButlerEnemyAI __instance)
		{
			yield return (object)new WaitForSeconds(1.1f);
			EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
			{
				(handler as ButlerEventHandler)?.OnPop(__instance);
			});
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"Butler popped (it was only wafer thin)");
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(ButlerEnemyAI), "AnimationEventA")]
		private static void PostfixStep(ButlerEnemyAI __instance, float ___timeAtLastFootstep)
		{
			if (Mathf.Abs(Time.realtimeSinceStartup - ___timeAtLastFootstep) < 0.01f)
			{
				EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as ButlerEventHandler)?.OnStep(__instance);
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Butler step audio cue");
				}
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(ButlerEnemyAI), "AnimationEventB")]
		private static void PrefixSweep(ButlerEnemyAI __instance)
		{
			EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
			{
				(handler as ButlerEventHandler)?.OnSweep(__instance);
			});
			if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
			{
				EnemySkinRegistry.SkinLogger.LogInfo((object)"Butler sweep audio cue");
			}
		}
	}
	internal class CoilheadPatch
	{
		internal const int ROAMING = 0;

		internal const int CHASING = 1;

		[HarmonyPrefix]
		[HarmonyPatch(typeof(EnemyAI), "SwitchToBehaviourStateOnLocalClient")]
		private static void PrefixSwitchBehavior(EnemyAI __instance, int stateIndex)
		{
			if (stateIndex == __instance.currentBehaviourStateIndex || !(__instance is SpringManAI))
			{
				return;
			}
			switch (stateIndex)
			{
			case 0:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as CoilheadEventHandler)?.OnEnterRoamingState((SpringManAI)(object)((__instance is SpringManAI) ? __instance : null));
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Coilhead entered roaming state");
				}
				break;
			case 1:
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					(handler as CoilheadEventHandler)?.OnEnterChasingState((SpringManAI)(object)((__instance is SpringManAI) ? __instance : null));
				});
				if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
				{
					EnemySkinRegistry.SkinLogger.LogInfo((object)"Coilhead entered chasing state");
				}
				break;
			}
		}
	}
	internal class EarthLeviathanPatch
	{
		private static Dictionary<SandWormAI, EarthLeviathanViewState> viewState = new Dictionary<SandWormAI, EarthLeviathanViewState>();

		[HarmonyPostfix]
		[HarmonyPatch(typeof(SandWormAI), "Start")]
		private static void PostfixStart(SandWormAI __instance)
		{
			viewState.Add(__instance, default(EarthLeviathanViewState));
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(SandWormAI), "Update")]
		private static void PostfixUpdate(SandWormAI __instance)
		{
			if (!((Object)(object)__instance != (Object)null) || !viewState.ContainsKey(__instance))
			{
				return;
			}
			if (viewState[__instance].lastEmergedState != __instance.emerged)
			{
				if (__instance.emerged)
				{
					EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
					{
						(handler as EarthLeviathanEventHandler)?.OnEmergeFromGround(__instance);
					});
					if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
					{
						EnemySkinRegistry.SkinLogger.LogInfo((object)"Earth Leviathan emerged from underground");
					}
				}
				else
				{
					EnemySkinRegistry.GetEnemyEventHandlers((EnemyAI)(object)__instance).ForEach(delegate(EnemyEventHandler handler)
					{
						(handler as EarthLeviathanEventHandler)?.OnSubmergeIntoGround(__instance);
					});
					if (EnemySkinRegistry.LogLevelSetting >= LogLevel.INFO)
					{
						EnemySkinRegistry.SkinLogger.LogInfo((object)"Earth Leviathan went back underground");
					}
				}
			}
			EarthLeviathanViewState value = viewState[__instance];
			value.lastEmergedState = __instance.emerged;
			viewState[__instance] = value;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(EnemyAI), "OnDestroy")]
		private static void PostfixDestroyed(EnemyAI __instance)
		{
			if (__instance is SandWormAI && (Object)(object)__instance != (Object)null && viewState.ContainsKey((SandWormAI)(object)((__instance is SandWormAI) ? __instance : null)))
			{
				viewState.Remove((SandWormAI)(object)((__instance is SandWormAI) ? __instance : null));
			}
		}
	}
	internal struct EarthLeviathanViewState
	{
		public bool lastEmergedState;
	}
	[HarmonyPatch]
	internal class EnemyPatch
	{
		private class EnemyViewState
		{
			public bool ventAnimationFinished;
		}

		private const int SNEAKING = 0;

		private const int EVADING = 1;

		private const int ENRAGED = 2;

		private static Dictionary<EnemyAI, EnemyViewState> viewState = new Dictionary<EnemyAI, EnemyViewState>();

		[HarmonyPostfix]
		[HarmonyPatch(typeof(EnemyAI), "Start")]
		[HarmonyAfter(new string[] { "AudioKnight.StarlancerAIFix" })]
		private static void PostfixStart(EnemyAI __instance)
		{
			string text = EnemySkinRegistry.VanillaIdFromInstance(__instance);
			if (text != null)
			{
				viewState[__instance] = new EnemyViewState();
				viewState[__instance].ventAnimationFinished = __instance.ventAnimationFinished;
				EnemySkinRegistry.ApplySkin(EnemySkinRegistry.SelectSpawnSkin(((Component)__instance).gameObject, text, __instance.isOutside ? SpawnLocation.OUTDOOR : SpawnLocation.INDOOR), text, ((Component)__instance).gameObject);
				EnemySkinRegistry.GetEnemyEventHandlers(__instance).ForEach(delegate(EnemyEventHandler handler)
				{
					handler.OnSpawn(__instance);
				});
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(RoundManager), "SpawnNestObjectForOutsideEnemy")]
		private static void PrefixNestStart(RoundManager __instance, out int __state)
		{
			__state = __instance.enemyNestSpawnObjects.Count;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(RoundManager), "SpawnNestObjectForOutsideEnemy")]
		private static void PostfixNestStart(RoundManager __instance, int __state)
		{
			if (__state + 1 == __ins