Decompiled source of SIAK Imperium v3.0.2

SIAKImperium.dll

Decompiled 17 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;
using HarmonyLib;
using Il2CppFishNet;
using Il2CppFishNet.Managing;
using Il2CppFishNet.Managing.Object;
using Il2CppFishNet.Object;
using Il2CppInterop.Runtime;
using Il2CppInterop.Runtime.Attributes;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppScheduleOne;
using Il2CppScheduleOne.Combat;
using Il2CppScheduleOne.Core.Items.Framework;
using Il2CppScheduleOne.DevUtilities;
using Il2CppScheduleOne.Dragging;
using Il2CppScheduleOne.Economy;
using Il2CppScheduleOne.EntityFramework;
using Il2CppScheduleOne.Equipping;
using Il2CppScheduleOne.ItemFramework;
using Il2CppScheduleOne.Law;
using Il2CppScheduleOne.Management;
using Il2CppScheduleOne.Management.UI;
using Il2CppScheduleOne.Messaging;
using Il2CppScheduleOne.Money;
using Il2CppScheduleOne.NPCs;
using Il2CppScheduleOne.NPCs.Framework;
using Il2CppScheduleOne.NPCs.Relation;
using Il2CppScheduleOne.NPCs.Responses;
using Il2CppScheduleOne.ObjectScripts;
using Il2CppScheduleOne.PlayerScripts;
using Il2CppScheduleOne.Police;
using Il2CppScheduleOne.Product;
using Il2CppScheduleOne.Property;
using Il2CppScheduleOne.Storage;
using Il2CppScheduleOne.UI;
using Il2CppScheduleOne.UI.Management;
using Il2CppScheduleOne.UI.Phone;
using Il2CppScheduleOne.UI.Phone.Messages;
using Il2CppScheduleOne.Vehicles;
using Il2CppScheduleOne.Vision;
using Il2CppSteamworks;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using Il2CppSystem.Reflection;
using Il2CppTMPro;
using Jint;
using MelonLoader;
using MelonLoader.Preferences;
using MelonLoader.Utils;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;
using S1API.Console;
using S1API.Entities;
using S1API.GameTime;
using S1API.Input;
using S1API.Items;
using S1API.Law;
using S1API.Leveling;
using S1API.Lifecycle;
using S1API.Money;
using S1API.PhoneApp;
using S1API.Products;
using S1API.Property;
using S1API.Storage;
using S1API.Storages;
using S1API.UI;
using S1API.Utils;
using SIAKImperium;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine.Yoga;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(/*Could not decode attribute arguments.*/)]
[assembly: MelonInfo(typeof(SIAKImperiumMod), "[S.I.A.K] Imperium", "3.0.1", "Eternidox", null)]
[assembly: MelonColor(255, 255, 80, 80)]
[assembly: MelonAuthorColor(255, 80, 160, 255)]
[assembly: MelonGame("TVGS", "Schedule I")]
[assembly: AssemblyVersion("0.0.0.0")]
[module: RefSafetyRules(11)]
internal class <Module>
{
	static <Module>()
	{
		ImperiumEmbeddedDependencyLoader.InitializeModule();
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : System.Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(/*Could not decode attribute arguments.*/)]
	internal sealed class NullableAttribute : System.Attribute
	{
		public readonly byte[] NullableFlags;

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

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(/*Could not decode attribute arguments.*/)]
	internal sealed class NullableContextAttribute : System.Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(/*Could not decode attribute arguments.*/)]
	internal sealed class RefSafetyRulesAttribute : System.Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace SIAKImperium
{
	public sealed class ImperiumAntivirusApp : PhoneApp
	{
		private static ImperiumAntivirusApp? _instance;

		private static GameObject? _iconRoot;

		private static readonly Action OpenFromLauncherAction = new Action(OpenFromLauncher);

		protected override string AppName => "SIAKAntivirusApp";

		protected override string AppTitle => "Advanced Anti Virus";

		protected override string IconLabel => "Antivirus";

		protected override string IconFileName => string.Empty;

		protected override Sprite? IconSprite => ImperiumAssets.LoadAntivirusAppIconSprite();

		protected override EOrientation Orientation => (EOrientation)0;

		protected override void OnCreatedUI(GameObject container)
		{
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			_instance = this;
			if (ImperiumWebUiRuntime.Available)
			{
				GameObject val = UIFactory.Panel("AntivirusHtmlRoot", container.transform, Color.clear, (Vector2?)null, (Vector2?)null, true);
				ImperiumAntivirusWebController imperiumAntivirusWebController = val.AddComponent<ImperiumAntivirusWebController>();
				if (imperiumAntivirusWebController.Initialize(val, container))
				{
					RefreshAvailability(SIAKImperiumMod.Service.GetSnapshot().Antivirus);
					return;
				}
				val.SetActive(false);
				Object.Destroy((Object)(object)val);
			}
			GameObject val2 = UIFactory.Panel("AntivirusRoot", container.transform, new Color(0.035f, 0.06f, 0.05f), (Vector2?)null, (Vector2?)null, true);
			ImperiumAntivirusAppController imperiumAntivirusAppController = val2.AddComponent<ImperiumAntivirusAppController>();
			imperiumAntivirusAppController.Initialize(val2, container);
			RefreshAvailability(SIAKImperiumMod.Service.GetSnapshot().Antivirus);
		}

		internal static bool TryOpenInstalled()
		{
			ImperiumAntivirusStatus antivirus = SIAKImperiumMod.Service.GetSnapshot().Antivirus;
			if (_instance == null || !antivirus.Enabled || !antivirus.Installed)
			{
				return false;
			}
			((PhoneApp)_instance).OpenApp();
			return true;
		}

		internal static void RefreshAvailability(ImperiumAntivirusStatus antivirus)
		{
			if (_instance != null)
			{
				_iconRoot = ImperiumPhoneLauncherRecovery.Ensure(_iconRoot, "SIAKAntivirusApp", "Antivirus", ImperiumAssets.LoadAntivirusAppIconSprite(), OpenFromLauncherAction);
				if ((Object)(object)_iconRoot != (Object)null)
				{
					_iconRoot.SetActive(antivirus.Enabled && antivirus.Installed);
				}
			}
		}

		internal static void RefreshAvailabilityFromService()
		{
			ImperiumService service = SIAKImperiumMod.Service;
			if (service != null)
			{
				RefreshAvailability(service.GetSnapshot().Antivirus);
			}
		}

		private static void OpenFromLauncher()
		{
			TryOpenInstalled();
		}
	}
	internal sealed class ImperiumAntivirusAppController : MonoBehaviour
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Action <>9__37_0;

			public static Action <>9__37_1;

			internal void <Initialize>b__37_0()
			{
				SIAKImperiumMod.Service.SubscribeAntivirus("basic");
			}

			internal void <Initialize>b__37_1()
			{
				SIAKImperiumMod.Service.SubscribeAntivirus("premium");
			}
		}

		private static readonly Color Accent = new Color(0.32f, 0.86f, 0.57f);

		private static readonly Color Muted = new Color(0.65f, 0.75f, 0.7f);

		private static readonly Color Panel = new Color(0.06f, 0.12f, 0.1f);

		private GameObject? _loginRoot;

		private GameObject? _mainRoot;

		private RectTransform? _portraitContainer;

		private RectTransform? _portraitRoot;

		private Vector2 _lastPortraitContainerSize;

		private InputField? _playerNameInput;

		private Button? _fingerprintButton;

		private Image? _fingerprintScannerBackground;

		private Image? _fingerprintArtwork;

		private Text? _loginHint;

		private Text? _statusText;

		private Text? _planText;

		private Text? _scanText;

		private Text? _malwareText;

		private Text? _spywareText;

		private Text? _ransomwareText;

		private Button? _basicButton;

		private Text? _basicLabel;

		private Button? _premiumButton;

		private Text? _premiumLabel;

		private Button? _scanButton;

		private Text? _scanLabel;

		private Button? _resultsButton;

		private Text? _resultsLabel;

		private GameObject? _resultsButtonRoot;

		private Button? _unsubscribeButton;

		private Text? _unsubscribeLabel;

		private string _verifiedPlayerName = string.Empty;

		private int _lastStateVersion = -1;

		private float _fingerprintHeldSeconds;

		private float _scanAnimationStartedAt = -1f;

		private bool _wasScanning;

		private bool _resultsVisible;

		public ImperiumAntivirusAppController(System.IntPtr pointer)
			: base(pointer)
		{
		}

		public void Initialize(GameObject root, GameObject container)
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_0242: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0275: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_030c: Unknown result type (might be due to invalid IL or missing references)
			//IL_031b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0320: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Unknown result type (might be due to invalid IL or missing references)
			//IL_033c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03db: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0409: Unknown result type (might be due to invalid IL or missing references)
			//IL_0416: Unknown result type (might be due to invalid IL or missing references)
			//IL_042d: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_053d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0596: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0615: Unknown result type (might be due to invalid IL or missing references)
			//IL_062c: Unknown result type (might be due to invalid IL or missing references)
			//IL_066c: Unknown result type (might be due to invalid IL or missing references)
			//IL_068c: Unknown result type (might be due to invalid IL or missing references)
			//IL_069b: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_06bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0722: Unknown result type (might be due to invalid IL or missing references)
			//IL_0731: Unknown result type (might be due to invalid IL or missing references)
			//IL_0736: Unknown result type (might be due to invalid IL or missing references)
			//IL_073b: Unknown result type (might be due to invalid IL or missing references)
			//IL_076c: Unknown result type (might be due to invalid IL or missing references)
			//IL_078c: Unknown result type (might be due to invalid IL or missing references)
			//IL_079b: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0805: Unknown result type (might be due to invalid IL or missing references)
			//IL_080a: Unknown result type (might be due to invalid IL or missing references)
			//IL_080f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0835: Unknown result type (might be due to invalid IL or missing references)
			//IL_0867: Unknown result type (might be due to invalid IL or missing references)
			//IL_0876: Unknown result type (might be due to invalid IL or missing references)
			//IL_087b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0880: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0969: Unknown result type (might be due to invalid IL or missing references)
			//IL_097a: Unknown result type (might be due to invalid IL or missing references)
			//IL_097f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0984: Unknown result type (might be due to invalid IL or missing references)
			//IL_098c: Unknown result type (might be due to invalid IL or missing references)
			//IL_09bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_09cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a00: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a11: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a16: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a1b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a23: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a53: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a62: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a67: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a97: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aad: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ab2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aba: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0af9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0afe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b03: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b2e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b44: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b49: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b51: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b89: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b98: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b9d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ba2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bcd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bde: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bf0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c20: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c2f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c34: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c39: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c5a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c5f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c65: Expected O, but got Unknown
			//IL_0c9b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ca5: Expected O, but got Unknown
			//IL_0caf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cb9: Expected O, but got Unknown
			//IL_0cc7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cd1: Expected O, but got Unknown
			//IL_0c81: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c86: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c8c: Expected O, but got Unknown
			_portraitRoot = root.GetComponent<RectTransform>();
			_portraitContainer = container.GetComponent<RectTransform>();
			ApplyPortraitCanvasLayout(force: true);
			GameObject val = UIFactory.Panel("AntivirusBrandLogo", root.transform, Color.clear, (Vector2?)null, (Vector2?)null, false);
			Image component = val.GetComponent<Image>();
			component.sprite = ImperiumAssets.LoadAntivirusLogoSprite();
			((Graphic)component).color = Color.white;
			component.preserveAspect = true;
			((Graphic)component).raycastTarget = false;
			Stretch(val.GetComponent<RectTransform>(), new Vector2(0.38f, 0.918f), new Vector2(0.62f, 0.992f), Vector2.zero, Vector2.zero);
			Text val2 = UIFactory.Text("AntivirusHeader", "Advanced Anti Virus", root.transform, 30, (TextAnchor)4, (FontStyle)1);
			((Graphic)val2).color = Accent;
			Stretch(((Component)val2).GetComponent<RectTransform>(), new Vector2(0.08f, 0.865f), new Vector2(0.92f, 0.918f), Vector2.zero, Vector2.zero);
			Text val3 = UIFactory.Text("AntivirusSubheader", "Made by Imperium", root.transform, 18, (TextAnchor)4, (FontStyle)2);
			((Graphic)val3).color = Muted;
			Stretch(((Component)val3).GetComponent<RectTransform>(), new Vector2(0.08f, 0.822f), new Vector2(0.92f, 0.865f), Vector2.zero, Vector2.zero);
			_loginRoot = UIFactory.Panel("AntivirusLogin", root.transform, Color.clear, (Vector2?)null, (Vector2?)null, true);
			GameObject val4 = UIFactory.Panel("AntivirusLoginPanel", _loginRoot.transform, Panel, (Vector2?)null, (Vector2?)null, false);
			Stretch(val4.GetComponent<RectTransform>(), new Vector2(0.08f, 0.11f), new Vector2(0.92f, 0.8f), Vector2.zero, Vector2.zero);
			Text val5 = UIFactory.Text("AntivirusLoginTitle", "Secure User Verification", val4.transform, 24, (TextAnchor)4, (FontStyle)1);
			((Graphic)val5).color = Color.white;
			Stretch(((Component)val5).GetComponent<RectTransform>(), new Vector2(0.08f, 0.83f), new Vector2(0.92f, 0.94f), Vector2.zero, Vector2.zero);
			Text val6 = UIFactory.Text("AntivirusLoginBody", "Enter your current Imperium player name, then hold the fingerprint scanner until it turns green.", val4.transform, 18, (TextAnchor)1, (FontStyle)0);
			((Graphic)val6).color = Muted;
			val6.horizontalOverflow = (HorizontalWrapMode)0;
			Stretch(((Component)val6).GetComponent<RectTransform>(), new Vector2(0.08f, 0.65f), new Vector2(0.92f, 0.81f), Vector2.zero, Vector2.zero);
			_playerNameInput = CreateInputField("AntivirusPlayerName", val4.transform, "Your Imperium player name", 20);
			_playerNameInput.lineType = (LineType)0;
			_playerNameInput.characterLimit = 48;
			Stretch(((Component)_playerNameInput).GetComponent<RectTransform>(), new Vector2(0.1f, 0.5f), new Vector2(0.9f, 0.6f), Vector2.zero, Vector2.zero);
			GameObject val7 = UIFactory.Panel("AntivirusFingerprintRing", val4.transform, Color.white, (Vector2?)null, (Vector2?)null, false);
			Image component2 = val7.GetComponent<Image>();
			component2.sprite = ImperiumAntivirusUiSprites.Ring;
			component2.type = (Type)0;
			component2.preserveAspect = true;
			((Graphic)component2).raycastTarget = false;
			((Graphic)component2).color = new Color(0.2f, 0.78f, 0.54f, 0.95f);
			RectTransform component3 = val7.GetComponent<RectTransform>();
			component3.anchorMin = new Vector2(0.5f, 0.31f);
			component3.anchorMax = new Vector2(0.5f, 0.31f);
			component3.pivot = new Vector2(0.5f, 0.5f);
			component3.sizeDelta = new Vector2(170f, 170f);
			component3.anchoredPosition = Vector2.zero;
			GameObject val8 = UIFactory.Panel("AntivirusFingerprintScanner", val7.transform, Color.white, (Vector2?)null, (Vector2?)null, false);
			_fingerprintScannerBackground = val8.GetComponent<Image>();
			_fingerprintScannerBackground.sprite = ImperiumAntivirusUiSprites.Disc;
			_fingerprintScannerBackground.type = (Type)0;
			_fingerprintScannerBackground.preserveAspect = true;
			((Graphic)_fingerprintScannerBackground).raycastTarget = true;
			RectTransform component4 = val8.GetComponent<RectTransform>();
			component4.anchorMin = new Vector2(0.5f, 0.5f);
			component4.anchorMax = new Vector2(0.5f, 0.5f);
			component4.pivot = new Vector2(0.5f, 0.5f);
			component4.sizeDelta = new Vector2(144f, 144f);
			component4.anchoredPosition = Vector2.zero;
			_fingerprintButton = val8.AddComponent<Button>();
			((Selectable)_fingerprintButton).targetGraphic = (Graphic)(object)_fingerprintScannerBackground;
			((Selectable)_fingerprintButton).transition = (Transition)0;
			GameObject val9 = UIFactory.Panel("AntivirusFingerprint", val8.transform, Color.clear, (Vector2?)null, (Vector2?)null, false);
			_fingerprintArtwork = val9.GetComponent<Image>();
			_fingerprintArtwork.sprite = ImperiumAssets.LoadFingerprintSprite();
			((Graphic)_fingerprintArtwork).color = new Color(0.58f, 0.69f, 0.64f, 1f);
			_fingerprintArtwork.preserveAspect = true;
			((Graphic)_fingerprintArtwork).raycastTarget = false;
			RectTransform component5 = val9.GetComponent<RectTransform>();
			component5.anchorMin = new Vector2(0.5f, 0.5f);
			component5.anchorMax = new Vector2(0.5f, 0.5f);
			component5.pivot = new Vector2(0.5f, 0.5f);
			component5.sizeDelta = new Vector2(132f, 132f);
			component5.anchoredPosition = new Vector2(0f, -1f);
			_loginHint = UIFactory.Text("AntivirusLoginHint", string.Empty, val4.transform, 17, (TextAnchor)4, (FontStyle)2);
			((Graphic)_loginHint).color = new Color(0.9f, 0.7f, 0.35f);
			Stretch(((Component)_loginHint).GetComponent<RectTransform>(), new Vector2(0.08f, 0.08f), new Vector2(0.92f, 0.16f), Vector2.zero, Vector2.zero);
			_mainRoot = UIFactory.Panel("AntivirusMain", root.transform, Color.clear, (Vector2?)null, (Vector2?)null, true);
			GameObject val10 = UIFactory.Panel("AntivirusMainPanel", _mainRoot.transform, Panel, (Vector2?)null, (Vector2?)null, false);
			Stretch(val10.GetComponent<RectTransform>(), new Vector2(0.05f, 0.07f), new Vector2(0.95f, 0.82f), Vector2.zero, Vector2.zero);
			_statusText = UIFactory.Text("AntivirusStatus", string.Empty, val10.transform, 20, (TextAnchor)0, (FontStyle)1);
			((Graphic)_statusText).color = Color.white;
			Stretch(((Component)_statusText).GetComponent<RectTransform>(), new Vector2(0.06f, 0.78f), new Vector2(0.94f, 0.95f), Vector2.zero, Vector2.zero);
			_planText = UIFactory.Text("AntivirusPlan", string.Empty, val10.transform, 18, (TextAnchor)0, (FontStyle)0);
			((Graphic)_planText).color = Muted;
			Stretch(((Component)_planText).GetComponent<RectTransform>(), new Vector2(0.06f, 0.63f), new Vector2(0.94f, 0.77f), Vector2.zero, Vector2.zero);
			GameObject val11 = UIFactory.Panel("AntivirusScanTerminal", val10.transform, new Color(0.008f, 0.012f, 0.016f), (Vector2?)null, (Vector2?)null, false);
			Stretch(val11.GetComponent<RectTransform>(), new Vector2(0.06f, 0.23f), new Vector2(0.94f, 0.61f), Vector2.zero, Vector2.zero);
			_scanText = UIFactory.Text("AntivirusScan", string.Empty, val11.transform, 18, (TextAnchor)0, (FontStyle)0);
			((Graphic)_scanText).color = Muted;
			Stretch(((Component)_scanText).GetComponent<RectTransform>(), new Vector2(0.07f, 0.58f), new Vector2(0.93f, 0.93f), Vector2.zero, Vector2.zero);
			_malwareText = CreateInfectionText("Malware", val11.transform, 0.37f);
			_spywareText = CreateInfectionText("Spyware", val11.transform, 0.22f);
			_ransomwareText = CreateInfectionText("Ransomware", val11.transform, 0.07f);
			ValueTuple<GameObject, Button, Text> val12 = UIFactory.RoundedButtonWithLabel("AntivirusBasic", "Antivirus Basic", val10.transform, new Color(0.16f, 0.34f, 0.24f), 240f, 42f, 18, Color.white);
			GameObject item = val12.Item1;
			Button item2 = val12.Item2;
			Text item3 = val12.Item3;
			_basicButton = item2;
			_basicLabel = item3;
			Stretch(item.GetComponent<RectTransform>(), new Vector2(0.06f, 0.14f), new Vector2(0.48f, 0.21f), Vector2.zero, Vector2.zero);
			ValueTuple<GameObject, Button, Text> val13 = UIFactory.RoundedButtonWithLabel("AntivirusPremium", "Antivirus Premium", val10.transform, new Color(0.17f, 0.24f, 0.42f), 240f, 42f, 18, Color.white);
			GameObject item4 = val13.Item1;
			Button item5 = val13.Item2;
			Text item6 = val13.Item3;
			_premiumButton = item5;
			_premiumLabel = item6;
			Stretch(item4.GetComponent<RectTransform>(), new Vector2(0.52f, 0.14f), new Vector2(0.94f, 0.21f), Vector2.zero, Vector2.zero);
			ValueTuple<GameObject, Button, Text> val14 = UIFactory.RoundedButtonWithLabel("AntivirusScanButton", "Scan Device", val10.transform, new Color(0.2f, 0.45f, 0.32f), 220f, 42f, 18, Color.white);
			GameObject item7 = val14.Item1;
			Button item8 = val14.Item2;
			Text item9 = val14.Item3;
			_scanButton = item8;
			_scanLabel = item9;
			Stretch(item7.GetComponent<RectTransform>(), new Vector2(0.06f, 0.055f), new Vector2(0.34f, 0.12f), Vector2.zero, Vector2.zero);
			ValueTuple<GameObject, Button, Text> val15 = UIFactory.RoundedButtonWithLabel("AntivirusResultsButton", "Scanned Results", val10.transform, new Color(0.18f, 0.31f, 0.47f), 220f, 42f, 16, Color.white);
			GameObject item10 = val15.Item1;
			Button item11 = val15.Item2;
			Text item12 = val15.Item3;
			_resultsButton = item11;
			_resultsLabel = item12;
			_resultsButtonRoot = item10;
			Stretch(item10.GetComponent<RectTransform>(), new Vector2(0.37f, 0.055f), new Vector2(0.65f, 0.12f), Vector2.zero, Vector2.zero);
			ValueTuple<GameObject, Button, Text> val16 = UIFactory.RoundedButtonWithLabel("AntivirusUnsubscribe", "Unsubscribe", val10.transform, new Color(0.42f, 0.2f, 0.18f), 220f, 42f, 18, Color.white);
			GameObject item13 = val16.Item1;
			Button item14 = val16.Item2;
			Text item15 = val16.Item3;
			_unsubscribeButton = item14;
			_unsubscribeLabel = item15;
			Stretch(item13.GetComponent<RectTransform>(), new Vector2(0.68f, 0.055f), new Vector2(0.94f, 0.12f), Vector2.zero, Vector2.zero);
			object obj = <>c.<>9__37_0;
			if (obj == null)
			{
				Action val17 = delegate
				{
					SIAKImperiumMod.Service.SubscribeAntivirus("basic");
				};
				<>c.<>9__37_0 = val17;
				obj = (object)val17;
			}
			ButtonUtils.AddListener(item2, (Action)obj);
			object obj2 = <>c.<>9__37_1;
			if (obj2 == null)
			{
				Action val18 = delegate
				{
					SIAKImperiumMod.Service.SubscribeAntivirus("premium");
				};
				<>c.<>9__37_1 = val18;
				obj2 = (object)val18;
			}
			ButtonUtils.AddListener(item5, (Action)obj2);
			ButtonUtils.AddListener(item8, (Action)([CompilerGenerated] () =>
			{
				_resultsVisible = false;
				SIAKImperiumMod.Service.ScanWithAntivirus();
			}));
			ButtonUtils.AddListener(item11, (Action)([CompilerGenerated] () =>
			{
				_resultsVisible = true;
				RefreshNow();
			}));
			ButtonUtils.AddListener(item14, new Action(SIAKImperiumMod.Service.UnsubscribeAntivirus));
			RefreshNow();
		}

		public void RefreshNow()
		{
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			ImperiumStatusSnapshot snapshot = SIAKImperiumMod.Service.GetSnapshot();
			_lastStateVersion = SIAKImperiumMod.Service.StateVersion;
			ImperiumAntivirusStatus imperiumAntivirusStatus = snapshot.Antivirus ?? new ImperiumAntivirusStatus();
			ImperiumAntivirusApp.RefreshAvailability(imperiumAntivirusStatus);
			if (!imperiumAntivirusStatus.ScanResultsAvailable)
			{
				_resultsVisible = false;
			}
			string text = snapshot.PlayerName?.Trim() ?? string.Empty;
			bool flag = !string.IsNullOrWhiteSpace(_verifiedPlayerName);
			if ((Object)(object)_loginRoot != (Object)null)
			{
				_loginRoot.SetActive(!flag);
			}
			if ((Object)(object)_mainRoot != (Object)null)
			{
				_mainRoot.SetActive(flag);
			}
			if (!flag)
			{
				if ((Object)(object)_loginHint != (Object)null)
				{
					_loginHint.text = (string.IsNullOrWhiteSpace(text) ? "Imperium identity is not ready yet." : "Verification protects this device from unauthorised antivirus changes.");
				}
				return;
			}
			if ((Object)(object)_statusText != (Object)null)
			{
				_statusText.text = ((!imperiumAntivirusStatus.Enabled) ? "APPLICATION UNAVAILABLE\nImperium Architects have temporarily recalled this application." : (imperiumAntivirusStatus.RansomwareLocked ? "DEVICE ENCRYPTED\nResolve the active ransom through the stock Messages app." : (imperiumAntivirusStatus.SpywareExtortionActive ? "HOSTILE ACTOR ACTIVE\nA Spyware source remains active even if a scan lowers the device risk." : (imperiumAntivirusStatus.SubscriptionActive ? "Device protection is active for this player." : "Your device is unprotected. We recommend protection immediately."))));
				((Graphic)_statusText).color = (Color)((!imperiumAntivirusStatus.Enabled || imperiumAntivirusStatus.RansomwareLocked) ? new Color(1f, 0.35f, 0.32f) : Color.white);
			}
			if ((Object)(object)_planText != (Object)null)
			{
				string text2 = (imperiumAntivirusStatus.SubscriptionActive ? (CultureInfo.InvariantCulture.TextInfo.ToTitleCase(imperiumAntivirusStatus.SubscriptionTier) + " subscription active") : "No active subscription");
				string text3 = (imperiumAntivirusStatus.SubscriptionCancelled ? "\nRenewal cancelled after this game day." : string.Empty);
				_planText.text = $"{text2}\nBasic: ${imperiumAntivirusStatus.BasicDailyCost:N0}/game day | Premium: ${imperiumAntivirusStatus.PremiumDailyCost:N0}/game day{text3}";
			}
			if (imperiumAntivirusStatus.ScanInProgress && !_wasScanning)
			{
				_scanAnimationStartedAt = Time.unscaledTime;
			}
			_wasScanning = imperiumAntivirusStatus.ScanInProgress;
			if ((Object)(object)_scanText != (Object)null)
			{
				_scanText.text = BuildScanStatus(imperiumAntivirusStatus);
			}
			bool flag2 = _resultsVisible && imperiumAntivirusStatus.ScanResultsAvailable && !imperiumAntivirusStatus.ScanInProgress;
			SetInfectionText(_malwareText, "Malware", imperiumAntivirusStatus.MalwarePercent, flag2);
			SetInfectionText(_spywareText, "Spyware", imperiumAntivirusStatus.SpywarePercent, flag2);
			SetInfectionText(_ransomwareText, "Ransomware", imperiumAntivirusStatus.RansomwarePercent, flag2);
			string text4 = imperiumAntivirusStatus.SubscriptionTier?.Trim().ToLowerInvariant() ?? string.Empty;
			if ((Object)(object)_basicLabel != (Object)null)
			{
				_basicLabel.text = ((text4 == "basic") ? "Basic Active" : $"Basic - ${imperiumAntivirusStatus.BasicDailyCost:N0}/day");
			}
			if ((Object)(object)_premiumLabel != (Object)null)
			{
				_premiumLabel.text = ((text4 == "premium") ? "Premium Active" : $"Premium - ${imperiumAntivirusStatus.PremiumDailyCost:N0}/day");
			}
			if ((Object)(object)_basicButton != (Object)null)
			{
				((Selectable)_basicButton).interactable = imperiumAntivirusStatus.Enabled && !imperiumAntivirusStatus.SubscriptionActive && text4 != "premium";
			}
			if ((Object)(object)_premiumButton != (Object)null)
			{
				((Selectable)_premiumButton).interactable = imperiumAntivirusStatus.Enabled && text4 != "premium";
			}
			if ((Object)(object)_scanButton != (Object)null)
			{
				((Selectable)_scanButton).interactable = imperiumAntivirusStatus.Enabled && imperiumAntivirusStatus.SubscriptionActive && !imperiumAntivirusStatus.ScanInProgress;
			}
			if ((Object)(object)_scanLabel != (Object)null)
			{
				_scanLabel.text = (imperiumAntivirusStatus.ScanInProgress ? "Scanning..." : "Scan Device");
			}
			if ((Object)(object)_resultsButtonRoot != (Object)null)
			{
				_resultsButtonRoot.SetActive(imperiumAntivirusStatus.Enabled && imperiumAntivirusStatus.ScanResultsAvailable);
			}
			if ((Object)(object)_resultsButton != (Object)null)
			{
				((Selectable)_resultsButton).interactable = imperiumAntivirusStatus.Enabled && imperiumAntivirusStatus.ScanResultsAvailable && !imperiumAntivirusStatus.ScanInProgress;
			}
			if ((Object)(object)_resultsLabel != (Object)null)
			{
				_resultsLabel.text = (flag2 ? "Results Open" : "Scanned Results");
			}
			if ((Object)(object)_unsubscribeButton != (Object)null)
			{
				((Selectable)_unsubscribeButton).interactable = imperiumAntivirusStatus.Enabled && imperiumAntivirusStatus.SubscriptionActive && !imperiumAntivirusStatus.SubscriptionCancelled;
			}
			if ((Object)(object)_unsubscribeLabel != (Object)null)
			{
				_unsubscribeLabel.text = (imperiumAntivirusStatus.SubscriptionCancelled ? "Renewal Cancelled" : "Unsubscribe");
			}
		}

		private void Update()
		{
			ApplyPortraitCanvasLayout(force: false);
			UpdateFingerprintVerification();
			if (_wasScanning && (Object)(object)_scanText != (Object)null)
			{
				_scanText.text = BuildScanStatus(SIAKImperiumMod.Service.GetSnapshot().Antivirus ?? new ImperiumAntivirusStatus());
			}
			if (_lastStateVersion != SIAKImperiumMod.Service.StateVersion && !ImperiumAppController.IsImperiumTextInputFocused())
			{
				RefreshNow();
			}
		}

		private void OnDisable()
		{
			_verifiedPlayerName = string.Empty;
			_resultsVisible = false;
			_fingerprintHeldSeconds = 0f;
			_scanAnimationStartedAt = -1f;
		}

		private void UpdateFingerprintVerification()
		{
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_loginRoot == (Object)null || !_loginRoot.activeInHierarchy || (Object)(object)_fingerprintButton == (Object)null)
			{
				return;
			}
			GameObject val = (((Object)(object)EventSystem.current != (Object)null) ? EventSystem.current.currentSelectedGameObject : null);
			RectTransform component = ((Component)_fingerprintButton).GetComponent<RectTransform>();
			bool flag = (Object)(object)component != (Object)null && RectTransformUtility.RectangleContainsScreenPoint(component, Vector2.op_Implicit(Input.mousePosition), (Camera)null);
			if (!Input.GetMouseButton(0) || (!flag && (!((Object)(object)val != (Object)null) || (!((Object)(object)val == (Object)(object)((Component)_fingerprintButton).gameObject) && !val.transform.IsChildOf(((Component)_fingerprintButton).transform)))))
			{
				_fingerprintHeldSeconds = 0f;
				SetFingerprintScanProgress(0f);
				return;
			}
			ImperiumStatusSnapshot snapshot = SIAKImperiumMod.Service.GetSnapshot();
			string text = snapshot.PlayerName?.Trim() ?? string.Empty;
			InputField? playerNameInput = _playerNameInput;
			string text2 = ((playerNameInput == null) ? null : playerNameInput.text?.Trim()) ?? string.Empty;
			if (string.IsNullOrWhiteSpace(text) || !string.Equals(text2, text, (StringComparison)5))
			{
				_fingerprintHeldSeconds = 0f;
				SetFingerprintScanProgress(0f);
				if ((Object)(object)_loginHint != (Object)null)
				{
					_loginHint.text = "Enter your exact current Imperium player name first.";
				}
				return;
			}
			_fingerprintHeldSeconds += Time.unscaledDeltaTime;
			SetFingerprintScanProgress(Mathf.Clamp01(_fingerprintHeldSeconds / 1.25f));
			if (!(_fingerprintHeldSeconds < 1.25f))
			{
				_verifiedPlayerName = text;
				_fingerprintHeldSeconds = 0f;
				SetFingerprintScanProgress(1f);
				RefreshNow();
			}
		}

		private void ApplyPortraitCanvasLayout(bool force)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)_portraitContainer == (Object)null) && !((Object)(object)_portraitRoot == (Object)null))
			{
				Rect rect = _portraitContainer.rect;
				Vector2 size = ((Rect)(ref rect)).size;
				if (!(size.x < 1f) && !(size.y < 1f) && (force || !(Vector2.SqrMagnitude(size - _lastPortraitContainerSize) < 0.25f)))
				{
					_portraitRoot.anchorMin = Vector2.zero;
					_portraitRoot.anchorMax = Vector2.one;
					_portraitRoot.pivot = new Vector2(0.5f, 0.5f);
					_portraitRoot.sizeDelta = Vector2.zero;
					_portraitRoot.anchoredPosition = Vector2.zero;
					((Transform)_portraitRoot).localRotation = Quaternion.identity;
					((Transform)_portraitRoot).localScale = Vector3.one;
					_lastPortraitContainerSize = size;
				}
			}
		}

		private void SetFingerprintScanProgress(float progress)
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)_fingerprintScannerBackground == (Object)null))
			{
				float num = Mathf.Clamp01(progress);
				Color val = default(Color);
				((Color)(ref val))..ctor(0.025f, 0.105f, 0.078f, 1f);
				Color val2 = default(Color);
				((Color)(ref val2))..ctor(0.02f, 0.3f, 0.66f, 1f);
				((Graphic)_fingerprintScannerBackground).color = Color.Lerp(val, val2, num);
				if ((Object)(object)_fingerprintArtwork != (Object)null)
				{
					((Graphic)_fingerprintArtwork).color = Color.Lerp(new Color(0.58f, 0.69f, 0.64f, 1f), new Color(0.16f, 0.67f, 1f, 1f), num);
				}
			}
		}

		private static Text CreateInfectionText(string name, Transform parent, float anchorY)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			Text val = UIFactory.Text(name, string.Empty, parent, 19, (TextAnchor)3, (FontStyle)1);
			Stretch(((Component)val).GetComponent<RectTransform>(), new Vector2(0.08f, anchorY), new Vector2(0.92f, anchorY + 0.08f), Vector2.zero, Vector2.zero);
			return val;
		}

		private static void SetInfectionText(Text? text, string label, float value, bool visible)
		{
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)text == (Object)null))
			{
				((Component)text).gameObject.SetActive(visible);
				if (visible)
				{
					float num = Mathf.Clamp(value, 0f, 100f);
					text.text = label + ": " + num.ToString("0.##", (IFormatProvider)(object)CultureInfo.InvariantCulture) + "%";
					((Graphic)text).color = ((num <= 0.01f) ? new Color(0.32f, 0.9f, 0.52f) : ((num >= 80f) ? new Color(1f, 0.32f, 0.28f) : new Color(1f, 0.78f, 0.24f)));
				}
			}
		}

		[HideFromIl2Cpp]
		private string BuildScanStatus(ImperiumAntivirusStatus antivirus)
		{
			if (antivirus.ScanInProgress)
			{
				if (_scanAnimationStartedAt < 0f)
				{
					_scanAnimationStartedAt = Time.unscaledTime;
				}
				float num = Mathf.Max(0f, Time.unscaledTime - _scanAnimationStartedAt);
				return "> IMPERIUM AAV TERMINAL\n> " + (Mathf.FloorToInt(num * 1.7f) % 5) switch
				{
					0 => "[NET] secure scanner handshake ........ ACTIVE", 
					1 => "[SYS] verifying application signatures .. ACTIVE", 
					2 => "[MEM] tracing hostile process markers ... ACTIVE", 
					3 => "[FS ] mapping encrypted device sectors .. ACTIVE", 
					_ => "[KEY] sealing authenticated report ...... ACTIVE", 
				} + "\n> SCAN RUNNING IN BACKGROUND\n> REPORT DUE " + FormatLocalTime(antivirus.ScanCompleteAt);
			}
			_scanAnimationStartedAt = -1f;
			if (antivirus.ScanResultsAvailable)
			{
				return _resultsVisible ? ("> VERIFIED REPORT DECRYPTED\n> SCAN COMPLETED " + FormatLocalTime(antivirus.LastScanCompletedAt) + "\n> THREAT STATUS DISPLAYED BELOW") : "> VERIFIED REPORT SEALED\n> SELECT SCANNED RESULTS TO DECRYPT CURRENT THREAT STATUS";
			}
			return antivirus.SubscriptionActive ? "> TERMINAL READY\n> NO AUTHENTICATED SCAN REPORT IS STORED FOR THIS DEVICE\n> RUN SCAN DEVICE TO GENERATE A CURRENT REPORT" : "> TERMINAL LOCKED\n> A BASIC OR PREMIUM SUBSCRIPTION IS REQUIRED FOR DEVICE SCANS";
		}

		private static string FormatLocalTime(string rawTimestamp)
		{
			System.DateTime dateTime = default(System.DateTime);
			return System.DateTime.TryParse(rawTimestamp, (IFormatProvider)(object)CultureInfo.InvariantCulture, (DateTimeStyles)128, ref dateTime) ? dateTime.ToLocalTime().ToString("HH:mm:ss", (IFormatProvider)(object)CultureInfo.InvariantCulture) : "soon";
		}

		private static InputField CreateInputField(string name, Transform parent, string placeholderText, int fontSize)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = UIFactory.Panel(name, parent, new Color(0.04f, 0.08f, 0.07f), (Vector2?)null, (Vector2?)null, false);
			InputField val2 = val.AddComponent<InputField>();
			((Selectable)val2).targetGraphic = (Graphic)(object)val.GetComponent<Image>();
			((Selectable)val2).interactable = true;
			val2.readOnly = false;
			val2.customCaretColor = true;
			val2.caretColor = Color.white;
			val2.caretWidth = 2;
			Text val3 = UIFactory.Text("Text", string.Empty, val.transform, fontSize, (TextAnchor)3, (FontStyle)0);
			val3.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
			((Graphic)val3).raycastTarget = false;
			Stretch(((Component)val3).GetComponent<RectTransform>(), Vector2.zero, Vector2.one, new Vector2(10f, 0f), new Vector2(-10f, 0f));
			Text val4 = UIFactory.Text("Placeholder", placeholderText, val.transform, Math.Max(14, fontSize - 1), (TextAnchor)3, (FontStyle)2);
			((Graphic)val4).color = new Color(0.54f, 0.65f, 0.6f);
			((Graphic)val4).raycastTarget = false;
			Stretch(((Component)val4).GetComponent<RectTransform>(), Vector2.zero, Vector2.one, new Vector2(10f, 0f), new Vector2(-10f, 0f));
			val2.textComponent = val3;
			val2.placeholder = (Graphic)(object)val4;
			ImperiumAppController.RegisterImperiumInput(val2);
			return val2;
		}

		private static void Stretch(RectTransform rect, Vector2 anchorMin, Vector2 anchorMax, Vector2 offsetMin, Vector2 offsetMax)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			rect.anchorMin = anchorMin;
			rect.anchorMax = anchorMax;
			rect.offsetMin = offsetMin;
			rect.offsetMax = offsetMax;
		}
	}
	internal static class ImperiumAntivirusUiSprites
	{
		private static Sprite? _ring;

		private static Sprite? _disc;

		internal static Sprite Ring => _ring ?? (_ring = CreateCircleSprite(ring: true));

		internal static Sprite Disc => _disc ?? (_disc = CreateCircleSprite(ring: false));

		private static Sprite CreateCircleSprite(bool ring)
		{
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Expected O, but got Unknown
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			Color32[] array = (Color32[])(object)new Color32[262144];
			float num = 255.5f;
			float num2 = num - 2f;
			float num3 = num2 - 13f;
			for (int i = 0; i < 512; i++)
			{
				float num4 = (float)i - num;
				for (int j = 0; j < 512; j++)
				{
					float num5 = (float)j - num;
					float num6 = Mathf.Sqrt(num5 * num5 + num4 * num4);
					float num7 = Mathf.Clamp01((num2 - num6 + 1.75f) / 1.75f);
					float num8 = num7;
					if (ring)
					{
						float num9 = Mathf.Clamp01((num6 - num3 + 1.75f) / 1.75f);
						num8 = Mathf.Min(num7, num9);
					}
					array[i * 512 + j] = new Color32((byte)255, (byte)255, (byte)255, (byte)Mathf.RoundToInt(num8 * 255f));
				}
			}
			Texture2D val = new Texture2D(512, 512, (TextureFormat)4, false)
			{
				name = (ring ? "ImperiumAntivirusRing" : "ImperiumAntivirusDisc"),
				filterMode = (FilterMode)1,
				wrapMode = (TextureWrapMode)1,
				hideFlags = (HideFlags)61
			};
			val.SetPixels32(Il2CppStructArray<Color32>.op_Implicit(array));
			val.Apply(false, true);
			Sprite val2 = Sprite.Create(val, new Rect(0f, 0f, 512f, 512f), new Vector2(0.5f, 0.5f), 100f);
			((Object)val2).name = ((Object)val).name + "Sprite";
			((Object)val2).hideFlags = (HideFlags)61;
			return val2;
		}
	}
	internal sealed class ImperiumAntivirusWebController : MonoBehaviour
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Action <>9__18_0;

			public static Action <>9__18_1;

			public static Action <>9__18_2;

			internal void <Initialize>b__18_0()
			{
				SIAKImperiumMod.Service.SubscribeAntivirus("basic");
			}

			internal void <Initialize>b__18_1()
			{
				SIAKImperiumMod.Service.SubscribeAntivirus("premium");
			}

			internal void <Initialize>b__18_2()
			{
				SIAKImperiumMod.Service.UnsubscribeAntivirus();
			}
		}

		private ImperiumHtmlDocument? _document;

		private RectTransform? _canvasContainer;

		private RectTransform? _canvasRoot;

		private Vector2 _lastCanvasContainerSize;

		private Button? _fingerprintButton;

		private Image? _fingerprintOuterRing;

		private Image? _fingerprintScannerBackground;

		private Image? _fingerprintArtwork;

		private string _verifiedPlayerName = string.Empty;

		private int _lastStateVersion = -1;

		private float _fingerprintHeldSeconds;

		private float _scanAnimationStartedAt = -1f;

		private bool _wasScanning;

		private bool _resultsVisible;

		private bool _showingPlans;

		private bool _cleanCompletionRefreshQueued;

		private bool _layoutTraceWritten;

		public ImperiumAntivirusWebController(System.IntPtr pointer)
			: base(pointer)
		{
		}

		public bool Initialize(GameObject root, GameObject container)
		{
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Expected O, but got Unknown
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Expected O, but got Unknown
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected O, but got Unknown
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Expected O, but got Unknown
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Expected O, but got Unknown
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Expected O, but got Unknown
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Expected O, but got Unknown
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				_canvasRoot = root.GetComponent<RectTransform>();
				_canvasContainer = container.GetComponent<RectTransform>();
				ApplyCanvasLayout(force: true);
				Dictionary<string, Action> obj = new Dictionary<string, Action>((IEqualityComparer<string>)(object)StringComparer.Ordinal);
				object obj2 = <>c.<>9__18_0;
				if (obj2 == null)
				{
					Action val = delegate
					{
						SIAKImperiumMod.Service.SubscribeAntivirus("basic");
					};
					<>c.<>9__18_0 = val;
					obj2 = (object)val;
				}
				obj["antivirus.basic"] = (Action)obj2;
				object obj3 = <>c.<>9__18_1;
				if (obj3 == null)
				{
					Action val2 = delegate
					{
						SIAKImperiumMod.Service.SubscribeAntivirus("premium");
					};
					<>c.<>9__18_1 = val2;
					obj3 = (object)val2;
				}
				obj["antivirus.premium"] = (Action)obj3;
				obj["antivirus.scan"] = new Action(StartScan);
				obj["antivirus.results"] = new Action(ShowResults);
				object obj4 = <>c.<>9__18_2;
				if (obj4 == null)
				{
					Action val3 = delegate
					{
						SIAKImperiumMod.Service.UnsubscribeAntivirus();
					};
					<>c.<>9__18_2 = val3;
					obj4 = (object)val3;
				}
				obj["antivirus.unsubscribe"] = (Action)obj4;
				obj["antivirus.plans"] = new Action(ShowPlans);
				obj["antivirus.back"] = new Action(ShowDashboard);
				obj["antivirus.clean"] = new Action(StartDeepClean);
				Dictionary<string, Action> actions = obj;
				string html = ImperiumAssets.LoadEmbeddedText("interface/antivirus/index.html");
				string css = ImperiumAssets.LoadEmbeddedText("interface/antivirus/styles.css");
				string script = ImperiumAssets.LoadEmbeddedText("interface/antivirus/app.js");
				_document = ImperiumWebUiRuntime.TryRender(root.transform, html, css, script, (IReadOnlyDictionary<string, Action>?)(object)actions, out string error, ImperiumInterfaceSurface.Landscape);
				if (_document == null)
				{
					throw new InvalidOperationException("Antivirus HTML renderer unavailable: " + error);
				}
				ApplyCanvasLayout(force: true);
				_document.RefreshLayout();
				_fingerprintButton = _document.GetButton("fingerprint-scan");
				_fingerprintOuterRing = _document.GetSurface("fingerprint-ring");
				_fingerprintScannerBackground = _document.GetSurface("fingerprint-scan");
				_fingerprintArtwork = _document.GetArtwork("fingerprint-art");
				if ((Object)(object)_fingerprintButton == (Object)null || (Object)(object)_fingerprintOuterRing == (Object)null || (Object)(object)_fingerprintScannerBackground == (Object)null || (Object)(object)_fingerprintArtwork == (Object)null)
				{
					throw new InvalidOperationException("Antivirus HTML page is missing a required verification control.");
				}
				ConfigureFingerprintScanner();
				RefreshNow();
				return true;
			}
			catch (System.Exception ex)
			{
				_document?.Dispose();
				_document = null;
				Instance? modLogger = SIAKImperiumMod.ModLogger;
				if (modLogger != null)
				{
					modLogger.Warning("[Imperium UI] Antivirus HTML renderer failed; using legacy UI instead: " + ex.Message);
				}
				return false;
			}
		}

		public void RefreshNow()
		{
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			if (_document == null)
			{
				return;
			}
			ImperiumService service = SIAKImperiumMod.Service;
			ImperiumStatusSnapshot snapshot = service.GetSnapshot();
			_lastStateVersion = service.StateVersion;
			ImperiumAntivirusStatus imperiumAntivirusStatus = snapshot.Antivirus ?? new ImperiumAntivirusStatus();
			ImperiumAntivirusApp.RefreshAvailability(imperiumAntivirusStatus);
			if (!imperiumAntivirusStatus.ScanResultsAvailable)
			{
				_resultsVisible = false;
			}
			string text = snapshot.PlayerName?.Trim() ?? string.Empty;
			bool flag = !string.IsNullOrWhiteSpace(_verifiedPlayerName);
			_document.SetText("verified-identity", string.IsNullOrWhiteSpace(text) ? "Identity synchronizing..." : text);
			_document.SetVisible("login-view", !flag);
			_document.SetVisible("main-view", flag && !_showingPlans);
			_document.SetVisible("plans-view", flag && _showingPlans);
			if (!flag)
			{
				_document.SetText("login-hint", string.IsNullOrWhiteSpace(text) ? "Imperium identity is not ready yet." : "Verification protects this device from unauthorised antivirus changes.");
				return;
			}
			string value = ((!imperiumAntivirusStatus.Enabled) ? "APPLICATION UNAVAILABLE\nImperium Architects have temporarily recalled this application." : (imperiumAntivirusStatus.RansomwareLocked ? "DEVICE ENCRYPTED\nResolve the active ransom through the stock Messages app." : (imperiumAntivirusStatus.SpywareExtortionActive ? "HOSTILE ACTOR ACTIVE\nA Spyware source remains active even if a scan lowers the device risk." : (imperiumAntivirusStatus.SubscriptionActive ? "Device protection is active for this user." : "Your device is unprotected. We recommend protection immediately."))));
			_document.SetText("antivirus-status", value);
			TMP_Text text2 = _document.GetText("antivirus-status");
			if ((Object)(object)text2 != (Object)null)
			{
				((Graphic)text2).color = (Color)((!imperiumAntivirusStatus.Enabled || imperiumAntivirusStatus.RansomwareLocked) ? new Color(1f, 0.35f, 0.32f) : Color.white);
			}
			if (imperiumAntivirusStatus.ScanInProgress && !_wasScanning)
			{
				_scanAnimationStartedAt = Time.unscaledTime;
			}
			_wasScanning = imperiumAntivirusStatus.ScanInProgress;
			_document.SetText("scan-log", BuildScanStatus(imperiumAntivirusStatus));
			_document.SetVisible("scan-progress", imperiumAntivirusStatus.ScanInProgress);
			_document.SetVisible("scan-sweep", imperiumAntivirusStatus.ScanInProgress);
			if (imperiumAntivirusStatus.ScanInProgress)
			{
				AnimateScan(imperiumAntivirusStatus);
			}
			bool flag2 = _resultsVisible && imperiumAntivirusStatus.ScanResultsAvailable && !imperiumAntivirusStatus.ScanInProgress;
			SetInfectionText("malware-value", "Malware", imperiumAntivirusStatus.MalwarePercent, flag2);
			SetInfectionText("spyware-value", "Spyware", imperiumAntivirusStatus.SpywarePercent, flag2);
			SetInfectionText("ransomware-value", "Ransomware", imperiumAntivirusStatus.RansomwarePercent, flag2);
			_document.SetVisible("threat-results", flag2);
			string text3 = imperiumAntivirusStatus.SubscriptionTier?.Trim().ToLowerInvariant() ?? string.Empty;
			_document.SetText("basic-action", (text3 == "basic") ? "Basic Active" : $"Basic - ${imperiumAntivirusStatus.BasicDailyCost:N0}/day");
			_document.SetText("premium-action", (text3 == "premium") ? "Premium Active" : $"Premium - ${imperiumAntivirusStatus.PremiumDailyCost:N0}/day");
			_document.SetText("basic-plan-price", $"Basic / ${imperiumAntivirusStatus.BasicDailyCost:N0} per game day");
			_document.SetText("premium-plan-price", $"Premium / ${imperiumAntivirusStatus.PremiumDailyCost:N0} per game day");
			_document.SetText("scan-action", imperiumAntivirusStatus.ScanInProgress ? "Scanning..." : "Scan Device");
			_document.SetText("results-action", flag2 ? "Results Open" : "Scanned Results");
			_document.SetText("unsubscribe-action", imperiumAntivirusStatus.SubscriptionCancelled ? "Renewal Cancelled" : "Unsubscribe");
			int num = Math.Max(0, imperiumAntivirusStatus.Settings?.FullCleanCost ?? 3000);
			int seconds = Math.Max(1, imperiumAntivirusStatus.Settings?.FullCleanSeconds ?? 240);
			float num2 = CalculateTimedProgress(imperiumAntivirusStatus.CleanStartedAt, imperiumAntivirusStatus.CleanCompleteAt);
			_document.SetText("clean-price", $"Deep Clean / ${num:N0}");
			_document.SetText("clean-description", imperiumAntivirusStatus.CleanInProgress ? ("Recovery is running in the background. Completion: " + FormatLocalTime(imperiumAntivirusStatus.CleanCompleteAt)) : ("Removes all tracked infection through a " + FormatDuration(seconds) + " secure recovery cycle."));
			_document.SetText("clean-action", imperiumAntivirusStatus.CleanInProgress ? $"Cleaning {Mathf.Clamp(Mathf.FloorToInt(num2 * 100f), 1, 99)}%" : $"Start / ${num:N0}");
			_document.SetVisible("clean-progress", imperiumAntivirusStatus.CleanInProgress);
			_document.SetProgress("clean-progress", num2);
			_document.SetInteractable("basic-action", imperiumAntivirusStatus.Enabled && !imperiumAntivirusStatus.SubscriptionActive && text3 != "premium");
			_document.SetInteractable("premium-action", imperiumAntivirusStatus.Enabled && text3 != "premium");
			_document.SetInteractable("scan-action", imperiumAntivirusStatus.Enabled && imperiumAntivirusStatus.SubscriptionActive && !imperiumAntivirusStatus.ScanInProgress);
			_document.SetVisible("results-action", imperiumAntivirusStatus.Enabled && imperiumAntivirusStatus.ScanResultsAvailable);
			_document.SetInteractable("results-action", imperiumAntivirusStatus.Enabled && imperiumAntivirusStatus.ScanResultsAvailable && !imperiumAntivirusStatus.ScanInProgress);
			_document.SetInteractable("unsubscribe-action", imperiumAntivirusStatus.Enabled && imperiumAntivirusStatus.SubscriptionActive && !imperiumAntivirusStatus.SubscriptionCancelled);
			_document.SetInteractable("clean-action", imperiumAntivirusStatus.Enabled && imperiumAntivirusStatus.Installed && !imperiumAntivirusStatus.CleanInProgress);
		}

		private void StartScan()
		{
			_resultsVisible = false;
			SIAKImperiumMod.Service.ScanWithAntivirus();
			RefreshNow();
		}

		private void ShowResults()
		{
			_resultsVisible = true;
			RefreshNow();
		}

		private void ShowPlans()
		{
			_showingPlans = true;
			RefreshNow();
		}

		private void ShowDashboard()
		{
			_showingPlans = false;
			RefreshNow();
		}

		private void StartDeepClean()
		{
			SIAKImperiumMod.Service.DeepCleanWithAntivirus();
			RefreshNow();
		}

		private void Update()
		{
			if (ApplyCanvasLayout(force: false))
			{
				_document?.RefreshLayout();
				ConfigureFingerprintScanner();
			}
			else
			{
				ImperiumHtmlDocument? document = _document;
				if (document != null && document.RefreshViewport())
				{
					_document.RefreshLayout();
					ConfigureFingerprintScanner();
				}
			}
			WriteLayoutTraceOnce();
			UpdateFingerprintVerification();
			if (_document == null)
			{
				return;
			}
			if (_wasScanning)
			{
				ImperiumAntivirusStatus antivirus = SIAKImperiumMod.Service.GetSnapshot().Antivirus ?? new ImperiumAntivirusStatus();
				_document.SetText("scan-log", BuildScanStatus(antivirus));
				AnimateScan(antivirus);
			}
			ImperiumAntivirusStatus imperiumAntivirusStatus = SIAKImperiumMod.Service.GetSnapshot().Antivirus ?? new ImperiumAntivirusStatus();
			if (imperiumAntivirusStatus.CleanInProgress)
			{
				float num = CalculateTimedProgress(imperiumAntivirusStatus.CleanStartedAt, imperiumAntivirusStatus.CleanCompleteAt);
				_document.SetProgress("clean-progress", num);
				_document.SetText("clean-action", $"Cleaning {Mathf.Clamp(Mathf.FloorToInt(num * 100f), 1, 99)}%");
				if (num >= 0.999f && !_cleanCompletionRefreshQueued)
				{
					_cleanCompletionRefreshQueued = true;
					SIAKImperiumMod.Service.QueueImmediateRefresh();
				}
			}
			else
			{
				_cleanCompletionRefreshQueued = false;
			}
			if (_lastStateVersion != SIAKImperiumMod.Service.StateVersion && !ImperiumAppController.IsImperiumTextInputFocused())
			{
				RefreshNow();
			}
		}

		private void OnEnable()
		{
			if (_document != null)
			{
				_layoutTraceWritten = false;
				ApplyCanvasLayout(force: true);
				_document.RefreshLayout();
				ConfigureFingerprintScanner();
				RefreshNow();
			}
		}

		private void OnDisable()
		{
			_verifiedPlayerName = string.Empty;
			_resultsVisible = false;
			_showingPlans = false;
			_cleanCompletionRefreshQueued = false;
			_fingerprintHeldSeconds = 0f;
			_scanAnimationStartedAt = -1f;
			_lastStateVersion = -1;
			_layoutTraceWritten = false;
		}

		private void OnDestroy()
		{
			_document?.Dispose();
			_document = null;
		}

		private void WriteLayoutTraceOnce()
		{
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_032e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0333: Unknown result type (might be due to invalid IL or missing references)
			//IL_0357: Unknown result type (might be due to invalid IL or missing references)
			//IL_035c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0380: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0414: Unknown result type (might be due to invalid IL or missing references)
			//IL_0419: Unknown result type (might be due to invalid IL or missing references)
			if (_layoutTraceWritten || _document == null || (Object)(object)_canvasRoot == (Object)null || (Object)(object)_canvasContainer == (Object)null)
			{
				return;
			}
			Canvas.ForceUpdateCanvases();
			RectTransform rect = _document.GetRect("antivirus-page");
			RectTransform rect2 = _document.GetRect("login-view");
			if ((Object)(object)rect == (Object)null || (Object)(object)rect2 == (Object)null)
			{
				return;
			}
			Rect rect3 = rect.rect;
			if (((Rect)(ref rect3)).width < 1f)
			{
				return;
			}
			rect3 = rect.rect;
			if (((Rect)(ref rect3)).height < 1f)
			{
				return;
			}
			List<string> val = new List<string>();
			Transform val2 = ((Component)_canvasRoot).transform;
			int num = 0;
			while ((Object)(object)val2 != (Object)null && num < 7)
			{
				RectTransform val3 = (RectTransform)(object)((val2 is RectTransform) ? val2 : null);
				if (val3 != null)
				{
					System.Runtime.CompilerServices.DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new System.Runtime.CompilerServices.DefaultInterpolatedStringHandler(19, 5);
					defaultInterpolatedStringHandler.AppendFormatted(((Object)val2).name);
					defaultInterpolatedStringHandler.AppendLiteral("[");
					rect3 = val3.rect;
					defaultInterpolatedStringHandler.AppendFormatted<float>(((Rect)(ref rect3)).width, "0.#");
					defaultInterpolatedStringHandler.AppendLiteral("x");
					rect3 = val3.rect;
					defaultInterpolatedStringHandler.AppendFormatted<float>(((Rect)(ref rect3)).height, "0.#");
					defaultInterpolatedStringHandler.AppendLiteral(";");
					defaultInterpolatedStringHandler.AppendLiteral("localZ=");
					defaultInterpolatedStringHandler.AppendFormatted<float>(((Transform)val3).localEulerAngles.z, "0.#");
					defaultInterpolatedStringHandler.AppendLiteral(";worldZ=");
					defaultInterpolatedStringHandler.AppendFormatted<float>(((Transform)val3).eulerAngles.z, "0.#");
					defaultInterpolatedStringHandler.AppendLiteral("]");
					val.Add(defaultInterpolatedStringHandler.ToStringAndClear());
				}
				else
				{
					val.Add($"{((Object)val2).name}[localZ={val2.localEulerAngles.z:0.#};worldZ={val2.eulerAngles.z:0.#}]");
				}
				num++;
				val2 = val2.parent;
			}
			Instance? modLogger = SIAKImperiumMod.ModLogger;
			if (modLogger != null)
			{
				string[] obj = new string[6] { "[Imperium UI] Antivirus layout trace: ", null, null, null, null, null };
				System.Runtime.CompilerServices.DefaultInterpolatedStringHandler defaultInterpolatedStringHandler2 = new System.Runtime.CompilerServices.DefaultInterpolatedStringHandler(13, 2);
				defaultInterpolatedStringHandler2.AppendLiteral("container=");
				rect3 = _canvasContainer.rect;
				defaultInterpolatedStringHandler2.AppendFormatted<float>(((Rect)(ref rect3)).width, "0.#");
				defaultInterpolatedStringHandler2.AppendLiteral("x");
				rect3 = _canvasContainer.rect;
				defaultInterpolatedStringHandler2.AppendFormatted<float>(((Rect)(ref rect3)).height, "0.#");
				defaultInterpolatedStringHandler2.AppendLiteral("; ");
				obj[1] = defaultInterpolatedStringHandler2.ToStringAndClear();
				System.Runtime.CompilerServices.DefaultInterpolatedStringHandler defaultInterpolatedStringHandler3 = new System.Runtime.CompilerServices.DefaultInterpolatedStringHandler(15, 3);
				defaultInterpolatedStringHandler3.AppendLiteral("page=");
				rect3 = rect.rect;
				defaultInterpolatedStringHandler3.AppendFormatted<float>(((Rect)(ref rect3)).width, "0.#");
				defaultInterpolatedStringHandler3.AppendLiteral("x");
				rect3 = rect.rect;
				defaultInterpolatedStringHandler3.AppendFormatted<float>(((Rect)(ref rect3)).height, "0.#");
				defaultInterpolatedStringHandler3.AppendLiteral(",localZ=");
				defaultInterpolatedStringHandler3.AppendFormatted<float>(((Transform)rect).localEulerAngles.z, "0.#");
				defaultInterpolatedStringHandler3.AppendLiteral(",");
				obj[2] = defaultInterpolatedStringHandler3.ToStringAndClear();
				System.Runtime.CompilerServices.DefaultInterpolatedStringHandler defaultInterpolatedStringHandler4 = new System.Runtime.CompilerServices.DefaultInterpolatedStringHandler(18, 3);
				defaultInterpolatedStringHandler4.AppendLiteral("worldZ=");
				defaultInterpolatedStringHandler4.AppendFormatted<float>(((Transform)rect).eulerAngles.z, "0.#");
				defaultInterpolatedStringHandler4.AppendLiteral("; login=");
				rect3 = rect2.rect;
				defaultInterpolatedStringHandler4.AppendFormatted<float>(((Rect)(ref rect3)).width, "0.#");
				defaultInterpolatedStringHandler4.AppendLiteral("x");
				rect3 = rect2.rect;
				defaultInterpolatedStringHandler4.AppendFormatted<float>(((Rect)(ref rect3)).height, "0.#");
				defaultInterpolatedStringHandler4.AppendLiteral("; ");
				obj[3] = defaultInterpolatedStringHandler4.ToStringAndClear();
				obj[4] = "chain=";
				obj[5] = string.Join(" > ", (System.Collections.Generic.IEnumerable<string>)val);
				modLogger.Msg(string.Concat(obj));
			}
			_layoutTraceWritten = true;
		}

		private void UpdateFingerprintVerification()
		{
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			if (_document == null || (Object)(object)_fingerprintButton == (Object)null || (Object)(object)_fingerprintScannerBackground == (Object)null || !((Component)_fingerprintButton).gameObject.activeInHierarchy)
			{
				return;
			}
			GameObject val = (((Object)(object)EventSystem.current != (Object)null) ? EventSystem.current.currentSelectedGameObject : null);
			RectTransform component = ((Component)_fingerprintButton).GetComponent<RectTransform>();
			bool flag = (Object)(object)component != (Object)null && RectTransformUtility.RectangleContainsScreenPoint(component, Vector2.op_Implicit(Input.mousePosition), (Camera)null);
			if (!Input.GetMouseButton(0) || (!flag && (!((Object)(object)val != (Object)null) || (!((Object)(object)val == (Object)(object)((Component)_fingerprintButton).gameObject) && !val.transform.IsChildOf(((Component)_fingerprintButton).transform)))))
			{
				_fingerprintHeldSeconds = 0f;
				SetFingerprintScanProgress(0f);
				return;
			}
			ImperiumStatusSnapshot snapshot = SIAKImperiumMod.Service.GetSnapshot();
			string text = snapshot.PlayerName?.Trim() ?? string.Empty;
			if (string.IsNullOrWhiteSpace(text))
			{
				_fingerprintHeldSeconds = 0f;
				SetFingerprintScanProgress(0f);
				_document.SetText("login-hint", "Imperium identity is still synchronizing. Try the scanner again in a moment.");
				return;
			}
			_fingerprintHeldSeconds += Time.unscaledDeltaTime;
			SetFingerprintScanProgress(Mathf.Clamp01(_fingerprintHeldSeconds / 1.25f));
			if (!(_fingerprintHeldSeconds < 1.25f))
			{
				_verifiedPlayerName = text;
				_fingerprintHeldSeconds = 0f;
				SetFingerprintScanProgress(1f);
				RefreshNow();
			}
		}

		private bool ApplyCanvasLayout(bool force)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_canvasContainer == (Object)null || (Object)(object)_canvasRoot == (Object)null)
			{
				return false;
			}
			Canvas.ForceUpdateCanvases();
			Rect rect = _canvasContainer.rect;
			Vector2 size = ((Rect)(ref rect)).size;
			if (size.x < 1f || size.y < 1f || (!force && Vector2.SqrMagnitude(size - _lastCanvasContainerSize) < 0.25f))
			{
				return false;
			}
			_canvasRoot.anchorMin = Vector2.zero;
			_canvasRoot.anchorMax = Vector2.one;
			_canvasRoot.pivot = new Vector2(0.5f, 0.5f);
			_canvasRoot.sizeDelta = Vector2.zero;
			_canvasRoot.anchoredPosition = Vector2.zero;
			((Transform)_canvasRoot).localRotation = Quaternion.identity;
			((Transform)_canvasRoot).localScale = Vector3.one;
			_lastCanvasContainerSize = size;
			return true;
		}

		private void ConfigureFingerprintScanner()
		{
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_fingerprintOuterRing != (Object)null)
			{
				_fingerprintOuterRing.sprite = ImperiumAntivirusUiSprites.Ring;
				_fingerprintOuterRing.type = (Type)0;
				_fingerprintOuterRing.preserveAspect = true;
				((Graphic)_fingerprintOuterRing).raycastTarget = false;
				((Graphic)_fingerprintOuterRing).color = new Color(0.2f, 0.78f, 0.54f, 0.95f);
				((Transform)((Graphic)_fingerprintOuterRing).rectTransform).localRotation = Quaternion.identity;
				((Transform)((Graphic)_fingerprintOuterRing).rectTransform).localScale = Vector3.one;
			}
			if ((Object)(object)_fingerprintScannerBackground != (Object)null)
			{
				_fingerprintScannerBackground.sprite = ImperiumAntivirusUiSprites.Disc;
				_fingerprintScannerBackground.type = (Type)0;
				_fingerprintScannerBackground.preserveAspect = true;
				((Graphic)_fingerprintScannerBackground).raycastTarget = true;
				((Transform)((Graphic)_fingerprintScannerBackground).rectTransform).localRotation = Quaternion.identity;
				((Transform)((Graphic)_fingerprintScannerBackground).rectTransform).localScale = Vector3.one;
			}
			if ((Object)(object)_fingerprintButton != (Object)null && (Object)(object)_fingerprintScannerBackground != (Object)null)
			{
				((Selectable)_fingerprintButton).targetGraphic = (Graphic)(object)_fingerprintScannerBackground;
				((Selectable)_fingerprintButton).transition = (Transition)0;
			}
			if ((Object)(object)_fingerprintArtwork != (Object)null)
			{
				RectTransform rectTransform = ((Graphic)_fingerprintArtwork).rectTransform;
				rectTransform.anchorMin = new Vector2(0.5f, 0.5f);
				rectTransform.anchorMax = new Vector2(0.5f, 0.5f);
				rectTransform.pivot = new Vector2(0.5f, 0.5f);
				rectTransform.sizeDelta = new Vector2(264f, 264f);
				rectTransform.anchoredPosition = new Vector2(0f, -2f);
				((Transform)rectTransform).localRotation = Quaternion.identity;
				((Transform)rectTransform).localScale = Vector3.one;
				_fingerprintArtwork.preserveAspect = true;
				((Graphic)_fingerprintArtwork).raycastTarget = false;
			}
			SetFingerprintScanProgress(Mathf.Clamp01(_fingerprintHeldSeconds / 1.25f));
		}

		private void SetFingerprintScanProgress(float progress)
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)_fingerprintScannerBackground == (Object)null))
			{
				float num = Mathf.Clamp01(progress);
				Color val = default(Color);
				((Color)(ref val))..ctor(0.025f, 0.105f, 0.078f, 1f);
				Color val2 = default(Color);
				((Color)(ref val2))..ctor(0.02f, 0.3f, 0.66f, 1f);
				((Graphic)_fingerprintScannerBackground).color = Color.Lerp(val, val2, num);
				if ((Object)(object)_fingerprintArtwork != (Object)null)
				{
					Color val3 = default(Color);
					((Color)(ref val3))..ctor(0.58f, 0.69f, 0.64f, 1f);
					Color val4 = default(Color);
					((Color)(ref val4))..ctor(0.16f, 0.67f, 1f, 1f);
					((Graphic)_fingerprintArtwork).color = Color.Lerp(val3, val4, num);
				}
			}
		}

		[HideFromIl2Cpp]
		private void AnimateScan(ImperiumAntivirusStatus antivirus)
		{
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			if (_document != null && antivirus.ScanInProgress)
			{
				float num = Mathf.Max(0f, Time.unscaledTime - Mathf.Max(0f, _scanAnimationStartedAt));
				_document.SetProgress("scan-progress", CalculateScanProgress(antivirus));
				RectTransform rect = _document.GetRect("scan-sweep");
				RectTransform rect2 = _document.GetRect("scan-terminal");
				Image surface = _document.GetSurface("scan-sweep");
				if ((Object)(object)rect != (Object)null && (Object)(object)rect2 != (Object)null)
				{
					Rect rect3 = rect2.rect;
					float num2 = Mathf.Max(90f, ((Rect)(ref rect3)).height - 74f);
					float num3 = Mathf.PingPong(num * 0.55f, 1f);
					rect.anchoredPosition = new Vector2(rect.anchoredPosition.x, 0f - (46f + num2 * num3));
				}
				if ((Object)(object)surface != (Object)null)
				{
					((Graphic)surface).color = new Color(0.17f, 0.59f, 1f, 0.35f + Mathf.PingPong(num * 1.8f, 0.5f));
				}
			}
		}

		[HideFromIl2Cpp]
		private static float CalculateScanProgress(ImperiumAntivirusStatus antivirus)
		{
			return CalculateTimedProgress(antivirus.ScanStartedAt, antivirus.ScanCompleteAt, 0.05f);
		}

		private static float CalculateTimedProgress(string startedAt, string completeAt, float fallback = 0f)
		{
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			System.DateTime dateTime = default(System.DateTime);
			System.DateTime dateTime2 = default(System.DateTime);
			if (!System.DateTime.TryParse(startedAt, (IFormatProvider)(object)CultureInfo.InvariantCulture, (DateTimeStyles)128, ref dateTime) || !System.DateTime.TryParse(completeAt, (IFormatProvider)(object)CultureInfo.InvariantCulture, (DateTimeStyles)128, ref dateTime2))
			{
				return fallback;
			}
			TimeSpan val = dateTime2.ToUniversalTime() - dateTime.ToUniversalTime();
			double totalSeconds = ((TimeSpan)(ref val)).TotalSeconds;
			if (totalSeconds <= 0.1)
			{
				return 1f;
			}
			val = System.DateTime.UtcNow - dateTime.ToUniversalTime();
			double totalSeconds2 = ((TimeSpan)(ref val)).TotalSeconds;
			return Mathf.Clamp01((float)(totalSeconds2 / totalSeconds));
		}

		private void SetInfectionText(string id, string label, float value, bool visible)
		{
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			if (_document == null)
			{
				return;
			}
			_document.SetVisible(id, visible);
			if (visible)
			{
				float num = Mathf.Clamp(value, 0f, 100f);
				_document.SetText(id, label + ": " + num.ToString("0.##", (IFormatProvider)(object)CultureInfo.InvariantCulture) + "%");
				TMP_Text text = _document.GetText(id);
				if ((Object)(object)text != (Object)null)
				{
					((Graphic)text).color = ((num <= 0.01f) ? new Color(0.32f, 0.9f, 0.52f) : ((num >= 80f) ? new Color(1f, 0.32f, 0.28f) : new Color(1f, 0.78f, 0.24f)));
				}
			}
		}

		[HideFromIl2Cpp]
		private string BuildScanStatus(ImperiumAntivirusStatus antivirus)
		{
			if (antivirus.ScanInProgress)
			{
				if (_scanAnimationStartedAt < 0f)
				{
					_scanAnimationStartedAt = Time.unscaledTime;
				}
				float num = Mathf.Max(0f, Time.unscaledTime - _scanAnimationStartedAt);
				int num2 = Mathf.FloorToInt(num * 2.2f) % 8;
				string text = num2 switch
				{
					0 => "enumerating process table", 
					1 => "reading volatile memory", 
					2 => "mapping encrypted sectors", 
					3 => "validating message payloads", 
					4 => "tracing network sockets", 
					5 => "checking persistence keys", 
					6 => "comparing threat signatures", 
					_ => "sealing diagnostic report", 
				};
				string text2 = (num2 % 3) switch
				{
					0 => "[>  ]", 
					1 => "[>> ]", 
					_ => "[>>>]", 
				};
				int num3 = Mathf.FloorToInt(num * 3f);
				int num4 = 61 + PositiveModulo(num3 * 17, 38);
				int num5 = 18 + PositiveModulo(num3 * 23, 81);
				int num6 = 970 + PositiveModulo(num3 * 13, 30);
				int num7 = 640 + PositiveModulo(num3 * 211, 3456);
				int num8 = 72 + PositiveModulo(num3 * 19, 27);
				return string.Concat(new string[10]
				{
					"C:\\IMPERIUM\\AAV\\NODE-01\n|-- core\\\n|   |-- kernel.sig .............. VERIFIED\n|   |-- identity.key ............ SEALED\n|   `-- scanner.engine .......... ONLINE\n|-- device\\\n|   |-- memory\\heap ............. READ\n|   |-- filesystem\\messages .... MAPPED\n|   |-- filesystem\\applications  MAPPED\n|   `-- network\\active .......... INSPECT\n|-- live\\\n",
					$"|   |-- {text2} {text}\n",
					$"|   |-- entropy pool ............. {num4}%\n",
					$"|   |-- memory sweep ............. {num5}%\n",
					$"|   |-- signature blocks ......... {num7}/4096\n",
					$"|   |-- packet integrity ......... {(float)num6 / 10f:0.0}%\n",
					$"|   |-- heuristic confidence ..... {num8}%\n",
					"|   `-- completion .............. ",
					FormatLocalTime(antivirus.ScanCompleteAt),
					"\n`-- report\\threat-matrix.tmp"
				});
			}
			_scanAnimationStartedAt = -1f;
			if (antivirus.ScanResultsAvailable)
			{
				return _resultsVisible ? ("C:\\IMPERIUM\\AAV\\REPORT\n|-- manifest\\\n|   |-- status ................. DECRYPTED\n|   |-- completed .............. " + FormatLocalTime(antivirus.LastScanCompletedAt) + "\n|   `-- integrity .............. VERIFIED\n`-- threat-matrix\\\n    `-- DISPLAYED BELOW") : "C:\\IMPERIUM\\AAV\\REPORT\n|-- manifest\\\n|   |-- status ................. SEALED\n|   |-- integrity .............. VERIFIED\n|   `-- encryption ............. IMPERIUM-AES\n`-- action\\\n    `-- OPEN SCANNED RESULTS";
			}
			return antivirus.SubscriptionActive ? "C:\\IMPERIUM\\AAV\n|-- services\\\n|   |-- realtime.guard ......... ONLINE\n|   |-- signature.monitor ...... ONLINE\n|   `-- hostile.interceptor .... ARMED\n|-- reports\\\n|   `-- no sealed report\n`-- action\\\n    `-- RUN DEVICE SCAN" : "C:\\IMPERIUM\\AAV\n|-- services\\\n|   |-- realtime.guard ......... STANDBY\n|   |-- signature.monitor ...... LOCKED\n|   `-- hostile.interceptor .... LOCKED\n`-- required\\\n    `-- BASIC OR PREMIUM PLAN";
		}

		private static int PositiveModulo(int value, int modulus)
		{
			int num = value % modulus;
			return (num < 0) ? (num + modulus) : num;
		}

		private static string FormatDuration(int seconds)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			TimeSpan val = TimeSpan.FromSeconds((double)Math.Max(1, seconds));
			if (!(((TimeSpan)(ref val)).TotalMinutes >= 1.0))
			{
				return $"{Math.Max(1, seconds)}-second";
			}
			return $"{Math.Ceiling(((TimeSpan)(ref val)).TotalMinutes):0}-minute";
		}

		private static string FormatLocalTime(string rawTimestamp)
		{
			System.DateTime dateTime = default(System.DateTime);
			return System.DateTime.TryParse(rawTimestamp, (IFormatProvider)(object)CultureInfo.InvariantCulture, (DateTimeStyles)128, ref dateTime) ? dateTime.ToLocalTime().ToString("HH:mm:ss", (IFormatProvider)(object)CultureInfo.InvariantCulture) : "soon";
		}
	}
	public sealed class ImperiumApp : PhoneApp
	{
		private static ImperiumApp? _instance;

		private static GameObject? _iconRoot;

		private static readonly Action OpenFromLauncherAction = new Action(OpenFromLauncher);

		private static readonly Color BackgroundColor = new Color(0.08f, 0.09f, 0.11f);

		private static readonly Color SidebarColor = new Color(0.11f, 0.12f, 0.15f);

		private static readonly Color PanelColor = new Color(0.13f, 0.15f, 0.19f);

		private static readonly Color PanelAltColor = new Color(0.1f, 0.12f, 0.16f);

		private static readonly Color AccentColor = new Color(1f, 0.85f, 0.45f);

		private static Sprite? _notificationBadgeSprite;

		protected override string AppName => "SIAKImperiumApp";

		protected override string AppTitle => "[S.I.A.K] Imperium";

		protected override string IconLabel => "Imperium";

		protected override string IconFileName => string.Empty;

		protected override Sprite? IconSprite => ImperiumAssets.LoadAppIconSprite();

		protected override EOrientation Orientation => (EOrientation)0;

		protected override void OnCreatedUI(GameObject container)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			_instance = this;
			GameObject val = UIFactory.Panel("ImperiumWebRoot", container.transform, BackgroundColor, (Vector2?)null, (Vector2?)null, true);
			RectTransform component = val.GetComponent<RectTransform>();
			component.anchorMin = Vector2.zero;
			component.anchorMax = Vector2.one;
			component.offsetMin = Vector2.zero;
			component.offsetMax = Vector2.zero;
			((Transform)component).localScale = Vector3.one;
			RectMask2D val2 = val.AddComponent<RectMask2D>();
			((Behaviour)val2).enabled = true;
			ImperiumWebAppController imperiumWebAppController = val.AddComponent<ImperiumWebAppController>();
			if (!imperiumWebAppController.Initialize(val))
			{
				Object.DestroyImmediate((Object)(object)val);
				ShowRendererFailure(container, ImperiumWebUiRuntime.Failure);
			}
		}

		internal static void EnsureLauncherVisible()
		{
			if (_instance != null)
			{
				_iconRoot = ImperiumPhoneLauncherRecovery.Ensure(_iconRoot, "SIAKImperiumApp", "Imperium", ImperiumAssets.LoadAppIconSprite(), OpenFromLauncherAction);
			}
		}

		private static void OpenFromLauncher()
		{
			ImperiumApp? instance = _instance;
			if (instance != null)
			{
				((PhoneApp)instance).OpenApp();
			}
		}

		private static void ShowRendererFailure(GameObject container, string reason)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = UIFactory.Panel("ImperiumRendererFailure", container.transform, BackgroundColor, (Vector2?)null, (Vector2?)null, true);
			Text val2 = UIFactory.Text("ImperiumRendererFailureTitle", "Imperium interface unavailable", val.transform, 26, (TextAnchor)4, (FontStyle)1);
			((Graphic)val2).color = AccentColor;
			Stretch(((Component)val2).GetComponent<RectTransform>(), new Vector2(0.1f, 0.58f), new Vector2(0.9f, 0.72f), Vector2.zero, Vector2.zero);
			Text val3 = UIFactory.Text("ImperiumRendererFailureBody", "The embedded Imperium interface could not start. Reinstall the current S.I.A.K Imperium release and restart Schedule I.\n\n" + (string.IsNullOrWhiteSpace(reason) ? string.Empty : reason), val.transform, 15, (TextAnchor)4, (FontStyle)0);
			((Graphic)val3).color = new Color(0.82f, 0.87f, 0.94f);
			Stretch(((Component)val3).GetComponent<RectTransform>(), new Vector2(0.12f, 0.24f), new Vector2(0.88f, 0.56f), Vector2.zero, Vector2.zero);
		}

		private void BuildRetiredLegacyUi(GameObject container)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Expected O, but got Unknown
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01df: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0302: Unknown result type (might be due to invalid IL or missing references)
			//IL_031e: Unknown result type (might be due to invalid IL or missing references)
			//IL_032d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0332: Unknown result type (might be due to invalid IL or missing references)
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_036f: Unknown result type (might be due to invalid IL or missing references)
			//IL_038b: Unknown result type (might be due to invalid IL or missing references)
			//IL_039a: Unknown result type (might be due to invalid IL or missing references)
			//IL_039f: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0402: Unknown result type (might be due to invalid IL or missing references)
			//IL_042d: Unknown result type (might be due to invalid IL or missing references)
			//IL_043e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0443: Unknown result type (might be due to invalid IL or missing references)
			//IL_0448: Unknown result type (might be due to invalid IL or missing references)
			//IL_0450: Unknown result type (might be due to invalid IL or missing references)
			//IL_0470: Unknown result type (might be due to invalid IL or missing references)
			//IL_047f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0484: Unknown result type (might be due to invalid IL or missing references)
			//IL_0489: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0534: Unknown result type (might be due to invalid IL or missing references)
			//IL_0550: Unknown result type (might be due to invalid IL or missing references)
			//IL_055f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0564: Unknown result type (might be due to invalid IL or missing references)
			//IL_0569: Unknown result type (might be due to invalid IL or missing references)
			//IL_0592: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_05bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0600: Unknown result type (might be due to invalid IL or missing references)
			//IL_0605: Unknown result type (might be due to invalid IL or missing references)
			//IL_060a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0633: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_075e: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_07fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0800: Unknown result type (might be due to invalid IL or missing references)
			//IL_0805: Unknown result type (might be due to invalid IL or missing references)
			//IL_080d: Unknown result type (might be due to invalid IL or missing references)
			//IL_082d: Unknown result type (might be due to invalid IL or missing references)
			//IL_083c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0841: Unknown result type (might be