Decompiled source of BetterMouseCursor v1.3.1

BepInEx/plugins/BetterMouseCursor.dll

Decompiled 5 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyFileVersion("1.3.1.0")]
[assembly: AssemblyInformationalVersion("1.3.1.0")]
[assembly: AssemblyProduct("BetterMouseCursor")]
[assembly: AssemblyTitle("BetterMouseCursor")]
[assembly: AssemblyDescription("Clears the game's custom cursor textures so the OS system cursor is used instead.")]
[assembly: AssemblyCompany("MycopunkModder")]
[assembly: AssemblyVersion("1.3.1.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
internal static class CursorData_Normal
{
	public const int HotspotX = 0;

	public const int HotspotY = 0;

	public const int TexWidth = 64;

	public const int TexHeight = 64;

	public static readonly byte[] RawPixels = new byte[16384]
	{
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 1, 0, 0, 0, 1, 0, 0, 0, 2,
		0, 0, 0, 2, 0, 0, 0, 2, 0, 0,
		0, 2, 0, 0, 0, 1, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 1, 0, 0, 0, 2, 0, 0,
		0, 5, 0, 0, 0, 7, 0, 0, 0, 9,
		0, 0, 0, 9, 0, 0, 0, 7, 0, 0,
		0, 4, 0, 0, 0, 2, 0, 0, 0, 1,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 1, 0, 0, 0, 2, 0, 0, 0, 4,
		0, 0, 0, 8, 0, 0, 0, 13, 0, 0,
		0, 19, 0, 0, 0, 23, 0, 0, 0, 23,
		0, 0, 0, 18, 0, 0, 0, 10, 0, 0,
		0, 5, 0, 0, 0, 1, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 1, 0, 0, 0, 2, 0, 0,
		0, 6, 0, 0, 0, 11, 0, 0, 0, 18,
		0, 0, 0, 28, 0, 0, 0, 37, 0, 0,
		0, 43, 0, 0, 0, 42, 0, 0, 0, 33,
		0, 0, 0, 20, 0, 0, 0, 9, 0, 0,
		0, 3, 0, 0, 0, 1, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 1, 0, 0, 0, 2, 0, 0, 0, 4,
		0, 0, 0, 8, 0, 0, 0, 14, 0, 0,
		0, 23, 0, 0, 0, 35, 0, 0, 0, 47,
		0, 0, 0, 57, 0, 0, 0, 63, 0, 0,
		0, 60, 0, 0, 0, 48, 0, 0, 0, 31,
		0, 0, 0, 15, 0, 0, 0, 5, 0, 0,
		0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 1, 0, 0, 0, 2, 0, 0,
		0, 6, 0, 0, 0, 11, 0, 0, 0, 18,
		0, 0, 0, 29, 0, 0, 0, 41, 0, 0,
		0, 53, 19, 19, 19, 78, 150, 150, 150, 180,
		218, 218, 218, 229, 149, 149, 149, 179, 4, 4,
		4, 63, 0, 0, 0, 40, 0, 0, 0, 21,
		0, 0, 0, 8, 0, 0, 0, 2, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 1, 0, 0, 0, 2, 0, 0, 0, 4,
		0, 0, 0, 8, 0, 0, 0, 15, 0, 0,
		0, 23, 0, 0, 0, 35, 0, 0, 0, 47,
		0, 0, 0, 59, 82, 82, 82, 128, 232, 232,
		232, 239, 255, 255, 255, 255, 255, 255, 255, 255,
		255, 255, 255, 255, 97, 97, 97, 139, 0, 0,
		0, 47, 0, 0, 0, 27, 0, 0, 0, 11,
		0, 0, 0, 3, 0, 0, 0, 1, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 1, 0, 0, 0, 3, 0, 0,
		0, 6, 0, 0, 0, 11, 0, 0, 0, 19,
		0, 0, 0, 29, 0, 0, 0, 41, 0, 0,
		0, 53, 17, 17, 17, 77, 153, 153, 153, 181,
		255, 255, 255, 255, 255, 255, 255, 255, 204, 204,
		204, 255, 155, 155, 155, 255, 255, 255, 255, 255,
		174, 174, 174, 197, 0, 0, 0, 53, 0, 0,
		0, 32, 0, 0, 0, 14, 0, 0, 0, 5,
		0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 2, 0, 0, 0, 4,
		0, 0, 0, 8, 0, 0, 0, 15, 0, 0,
		0, 24, 0, 0, 0, 35, 0, 0, 0, 47,
		0, 0, 0, 59, 85, 85, 85, 130, 234, 234,
		234, 240, 255, 255, 255, 255, 247, 247, 247, 255,
		146, 146, 146, 255, 53, 53, 53, 255, 75, 75,
		75, 255, 255, 255, 255, 255, 239, 239, 239, 244,
		3, 3, 3, 60, 0, 0, 0, 37, 0, 0,
		0, 18, 0, 0, 0, 6, 0, 0, 0, 2,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 6, 0, 0, 0, 11, 0, 0, 0, 19,
		0, 0, 0, 29, 0, 0, 0, 42, 0, 0,
		0, 53, 23, 23, 23, 81, 172, 172, 172, 195,
		255, 255, 255, 255, 255, 255, 255, 255, 206, 206,
		206, 255, 80, 80, 80, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 228, 228,
		228, 255, 255, 255, 255, 255, 50, 50, 50, 100,
		0, 0, 0, 43, 0, 0, 0, 22, 0, 0,
		0, 9, 0, 0, 0, 2, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 14, 0, 0,
		0, 24, 0, 0, 0, 35, 0, 0, 0, 48,
		0, 0, 0, 59, 93, 93, 93, 136, 237, 237,
		237, 242, 255, 255, 255, 255, 244, 244, 244, 255,
		133, 133, 133, 255, 52, 52, 52, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 176, 176, 176, 255, 255, 255,
		255, 255, 116, 116, 116, 152, 0, 0, 0, 49,
		0, 0, 0, 27, 0, 0, 0, 12, 0, 0,
		0, 3, 0, 0, 0, 1, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 26, 0, 0, 0, 40, 0, 0,
		0, 53, 24, 24, 24, 82, 174, 174, 174, 196,
		255, 255, 255, 255, 255, 255, 255, 255, 198, 198,
		198, 255, 75, 75, 75, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		124, 124, 124, 255, 255, 255, 255, 255, 181, 181,
		181, 201, 0, 0, 0, 54, 0, 0, 0, 32,
		0, 0, 0, 15, 0, 0, 0, 5, 0, 0,
		0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 40,
		0, 0, 0, 56, 85, 85, 85, 130, 237, 237,
		237, 242, 255, 255, 255, 255, 243, 243, 243, 255,
		133, 133, 133, 255, 52, 52, 52, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 71, 71, 71, 255,
		255, 255, 255, 255, 242, 242, 242, 246, 5, 5,
		5, 62, 0, 0, 0, 38, 0, 0, 0, 18,
		0, 0, 0, 7, 0, 0, 0, 2, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 25, 25, 25, 71, 177, 177, 177, 197,
		255, 255, 255, 255, 255, 255, 255, 255, 196, 196,
		196, 255, 73, 73, 73, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 223, 223, 223, 255,
		255, 255, 255, 255, 57, 57, 57, 106, 0, 0,
		0, 43, 0, 0, 0, 23, 0, 0, 0, 9,
		0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 241, 241,
		241, 244, 255, 255, 255, 255, 242, 242, 242, 255,
		133, 133, 133, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 170, 170, 170, 255, 255, 255, 255, 255,
		122, 122, 122, 156, 0, 0, 0, 49, 0, 0,
		0, 28, 0, 0, 0, 12, 0, 0, 0, 3,
		0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 255, 255, 255, 255, 193, 193,
		193, 255, 72, 72, 72, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 118, 118,
		118, 255, 255, 255, 255, 255, 188, 188, 188, 206,
		0, 0, 0, 54, 0, 0, 0, 33, 0, 0,
		0, 15, 0, 0, 0, 5, 0, 0, 0, 1,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		255, 255, 255, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 66, 66, 66, 255, 253, 253,
		253, 255, 247, 247, 247, 249, 8, 8, 8, 65,
		0, 0, 0, 38, 0, 0, 0, 19, 0, 0,
		0, 7, 0, 0, 0, 2, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 218, 218, 218, 255, 255, 255,
		255, 255, 63, 63, 63, 110, 0, 0, 0, 44,
		0, 0, 0, 23, 0, 0, 0, 9, 0, 0,
		0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 255, 255, 255, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		165, 165, 165, 255, 255, 255, 255, 255, 128, 128,
		128, 161, 0, 0, 0, 49, 0, 0, 0, 27,
		0, 0, 0, 11, 0, 0, 0, 3, 0, 0,
		0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 255, 255,
		255, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 113, 113, 113, 255,
		255, 255, 255, 255, 193, 193, 193, 210, 0, 0,
		0, 51, 0, 0, 0, 30, 0, 0, 0, 13,
		0, 0, 0, 4, 0, 0, 0, 1, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 255, 255, 255, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 63, 63, 63, 255, 253, 253, 253, 255,
		249, 249, 249, 251, 11, 11, 11, 60, 0, 0,
		0, 29, 0, 0, 0, 13, 0, 0, 0, 4,
		0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		255, 255, 255, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 213, 213, 213, 255, 255, 255, 255, 255,
		69, 69, 69, 102, 0, 0, 0, 25, 0, 0,
		0, 10, 0, 0, 0, 3, 0, 0, 0, 1,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 172, 172,
		172, 255, 255, 255, 255, 255, 114, 114, 114, 133,
		0, 0, 0, 18, 0, 0, 0, 7, 0, 0,
		0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 255, 255, 255, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		102, 102, 102, 255, 249, 249, 249, 255, 255, 255,
		255, 255, 69, 69, 69, 86, 0, 0, 0, 11,
		0, 0, 0, 4, 0, 0, 0, 1, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 255, 255,
		255, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 87, 87, 87, 255, 242, 242, 242, 255,
		255, 255, 255, 255, 149, 149, 149, 159, 0, 0,
		0, 13, 0, 0, 0, 5, 0, 0, 0, 2,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 255, 255, 255, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 78, 78, 78, 255, 236, 236,
		236, 255, 255, 255, 255, 255, 167, 167, 167, 176,
		2, 2, 2, 16, 0, 0, 0, 6, 0, 0,
		0, 2, 0, 0, 0, 1, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		255, 255, 255, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 68, 68, 68, 255,
		224, 224, 224, 255, 255, 255, 255, 255, 190, 190,
		190, 197, 7, 7, 7, 22, 0, 0, 0, 7,
		0, 0, 0, 2, 0, 0, 0, 1, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 61, 61,
		61, 255, 214, 214, 214, 255, 255, 255, 255, 255,
		209, 209, 209, 214, 15, 15, 15, 30, 0, 0,
		0, 7, 0, 0, 0, 3, 0, 0, 0, 1,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 255, 255, 255, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		55, 55, 55, 255, 198, 198, 198, 255, 255, 255,
		255, 255, 220, 220, 220, 224, 23, 23, 23, 38,
		0, 0, 0, 8, 0, 0, 0, 3, 0, 0,
		0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 255, 255,
		255, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 52, 52, 52, 255, 181, 181, 181, 255,
		255, 255, 255, 255, 234, 234, 234, 237, 37, 37,
		37, 52, 0, 0, 0, 8, 0, 0, 0, 3,
		0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 255, 255, 255, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 165, 165,
		165, 255, 255, 255, 255, 255, 241, 241, 241, 243,
		49, 49, 49, 65, 0, 0, 0, 9, 0, 0,
		0, 3, 0, 0, 0, 1, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		255, 255, 255, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		149, 149, 149, 255, 255, 255, 255, 255, 249, 249,
		249, 250, 69, 69, 69, 84, 0, 0, 0, 10,
		0, 0, 0, 4, 0, 0, 0, 1, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 125, 125, 125, 255, 254, 254, 254, 255,
		253, 253, 253, 253, 85, 85, 85, 100, 0, 0,
		0, 11, 0, 0, 0, 5, 0, 0, 0, 1,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 255, 255, 255, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 112, 112, 112, 255, 252, 252,
		252, 255, 255, 255, 255, 255, 110, 110, 110, 123,
		0, 0, 0, 12, 0, 0, 0, 5, 0, 0,
		0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 255, 255,
		255, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 95, 95, 95, 255,
		246, 246, 246, 255, 255, 255, 255, 255, 128, 128,
		128, 140, 0, 0, 0, 13, 0, 0, 0, 5,
		0, 0, 0, 2, 0, 0, 0, 1, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 255, 255, 255, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 85, 85,
		85, 255, 241, 241, 241, 255, 255, 255, 255, 255,
		153, 153, 153, 163, 0, 0, 0, 13, 0, 0,
		0, 6, 0, 0, 0, 2, 0, 0, 0, 1,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		255, 255, 255, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 51, 51, 51, 255, 51, 51, 51, 255,
		73, 73, 73, 255, 231, 231, 231, 255, 255, 255,
		255, 255, 172, 172, 172, 181, 3, 3, 3, 17,
		0, 0, 0, 6, 0, 0, 0, 2, 0, 0,
		0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
		51, 51, 51, 255, 51, 51, 51, 255, 51, 51,
		51, 255, 66, 66, 66, 255, 222, 222, 222, 255,
		255, 255, 255, 255, 192, 192, 192, 199, 8, 8,
		8, 23, 0, 0, 0, 7, 0, 0, 0, 2,
		0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 255, 255, 255, 255, 51, 51, 51, 255,
		51, 51, 51, 255, 59, 59, 59, 255, 209, 209,
		209, 255, 255, 255, 255, 255, 210, 210, 210, 215,
		17, 17, 17, 32, 0, 0, 0, 7, 0, 0,
		0, 3, 0, 0, 0, 1, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 255, 255,
		255, 255, 51, 51, 51, 255, 55, 55, 55, 255,
		197, 197, 197, 255, 255, 255, 255, 255, 222, 222,
		222, 226, 25, 25, 25, 40, 0, 0, 0, 8,
		0, 0, 0, 3, 0, 0, 0, 1, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 255, 255, 255, 255, 52, 52,
		52, 255, 177, 177, 177, 255, 255, 255, 255, 255,
		235, 235, 235, 238, 39, 39, 39, 54, 0, 0,
		0, 9, 0, 0, 0, 3, 0, 0, 0, 1,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		255, 255, 255, 255, 162, 162, 162, 255, 255, 255,
		255, 255, 245, 245, 245, 246, 57, 57, 57, 70,
		0, 0, 0, 9, 0, 0, 0, 3, 0, 0,
		0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
		255, 255, 255, 255, 249, 249, 249, 249, 69, 69,
		69, 79, 0, 0, 0, 8, 0, 0, 0, 3,
		0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 227, 227, 227, 228, 228, 228, 228, 229,
		77, 77, 77, 82, 0, 0, 0, 5, 0, 0,
		0, 3, 0, 0, 0, 1, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
		0, 0, 0, 1, 0, 0, 0, 1, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0
	};
}
namespace BetterMouseCursor
{
	[BepInPlugin("coruscnium.bettermousecursor", "BetterMouseCursor", "1.3.1.0")]
	[BepInProcess("Mycopunk.exe")]
	[MycoMod(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		private sealed class CursorPreset
		{
			public float Size = 32f;

			public int HotspotX;

			public int HotspotY;
		}

		internal static ManualLogSource Logger;

		private const string DefaultOption = "Default";

		private static readonly string[] SupportedExtensions = new string[3] { ".png", ".jpg", ".jpeg" };

		private const int MaxCursorOptions = 100;

		private const string ConfigFileName = "coruscnium.bettermousecursor.cfg";

		private const string PresetsFileName = "PerCursorSettings.ini";

		private const float DefaultCursorSize = 32f;

		private static readonly Dictionary<string, CursorPreset> presets = new Dictionary<string, CursorPreset>(StringComparer.OrdinalIgnoreCase);

		private static string activeCursorOption;

		private static bool applyingPreset;

		private static bool pendingCursorSwitch;

		private static bool pendingPresetCapture;

		private const string CursorFileDescription = "Cursor image. \"Default\" is the built-in arrow; every other entry is an image found in BepInEx/config/BetterMouseCursor/ with its file extension hidden. PNG and JPG are supported. Add or remove images in that folder and the list updates live. Each cursor keeps its own CursorSize and hotspot.";

		private static ConfigEntry<string> cursorFileCfg;

		private static ConfigEntry<float> cursorSizeCfg;

		private static ConfigEntry<int> hotspotXCfg;

		private static ConfigEntry<int> hotspotYCfg;

		private static string[] cursorOptions = new string[1] { "Default" };

		private static Dictionary<string, string> cursorFilesByOption = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

		private static bool msmRefreshResolved;

		private static Action msmRefreshMods;

		private static Action msmInvalidateOptions;

		private static FileSystemWatcher configWatcher;

		private static FileSystemWatcher cursorFolderWatcher;

		private static volatile bool pendingConfigReload;

		private static volatile bool pendingFolderRescan;

		private static volatile bool pendingWatcherRestart;

		private static bool rebuildPending;

		private static float cursorSize = 32f;

		private static Vector2 hotspot = Vector2.zero;

		private static int appliedCursorMode;

		private static Texture2D overlayTex;

		private static Texture2D transparentTex;

		private static RawImage overlayImage;

		private static Vector2 floatCursorPos;

		private static int lastWarpFrame = -10;

		private static string CursorFolder => Path.Combine(Paths.ConfigPath, "BetterMouseCursor");

		private static string PresetsPath => Path.Combine(CursorFolder, "PerCursorSettings.ini");

		private void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			Logger.LogInfo((object)"BetterMouseCursor loading...");
			string legacy = ReadRawConfigValue("Cursor", "CursorFile");
			cursorOptions = BuildCursorOptions(out cursorFilesByOption);
			BindConfigEntries(cursorOptions);
			MigrateLegacyCursorFile(legacy);
			LoadPresets();
			PrunePresets();
			string text = (cursorFileCfg.Value ?? "Default").Trim();
			if (!presets.ContainsKey(text))
			{
				activeCursorOption = text;
				CaptureActivePreset();
			}
			ApplyPreset(text);
			SavePresets();
			((BaseUnityPlugin)this).Config.Save();
			SetSettingChangedHandlers(attach: true);
			try
			{
				configWatcher = new FileSystemWatcher(Paths.ConfigPath, "coruscnium.bettermousecursor.cfg")
				{
					NotifyFilter = (NotifyFilters.FileName | NotifyFilters.Size | NotifyFilters.LastWrite),
					EnableRaisingEvents = true
				};
				configWatcher.Changed += OnConfigFileChanged;
				configWatcher.Created += OnConfigFileChanged;
				configWatcher.Renamed += OnConfigFileChanged;
			}
			catch (Exception ex)
			{
				Logger.LogWarning((object)("Could not start config file watcher: " + ex.Message));
			}
			StartCursorFolderWatcher();
			Harmony.CreateAndPatchAll(typeof(Plugin), (string)null);
			SceneManager.sceneLoaded += delegate
			{
				appliedCursorMode = 0;
			};
			CreateOverlay();
			RebuildCursor();
			Logger.LogInfo((object)"BetterMouseCursor initialized.");
		}

		private void OnDestroy()
		{
			if (configWatcher != null)
			{
				configWatcher.EnableRaisingEvents = false;
				configWatcher.Changed -= OnConfigFileChanged;
				configWatcher.Created -= OnConfigFileChanged;
				configWatcher.Renamed -= OnConfigFileChanged;
				configWatcher.Dispose();
				configWatcher = null;
			}
			StopCursorFolderWatcher();
		}

		private void StartCursorFolderWatcher()
		{
			StopCursorFolderWatcher();
			try
			{
				Directory.CreateDirectory(CursorFolder);
				cursorFolderWatcher = new FileSystemWatcher(CursorFolder)
				{
					NotifyFilter = (NotifyFilters.FileName | NotifyFilters.Size | NotifyFilters.LastWrite),
					EnableRaisingEvents = true
				};
				cursorFolderWatcher.Created += OnCursorFolderChanged;
				cursorFolderWatcher.Deleted += OnCursorFolderChanged;
				cursorFolderWatcher.Renamed += OnCursorFolderChanged;
				cursorFolderWatcher.Changed += OnCursorFolderChanged;
				cursorFolderWatcher.Error += OnCursorFolderWatcherError;
			}
			catch (Exception ex)
			{
				Logger.LogWarning((object)("Could not start cursor folder watcher: " + ex.Message + " — the CursorFile list will only update on restart."));
			}
		}

		private void StopCursorFolderWatcher()
		{
			if (cursorFolderWatcher != null)
			{
				try
				{
					cursorFolderWatcher.EnableRaisingEvents = false;
					cursorFolderWatcher.Created -= OnCursorFolderChanged;
					cursorFolderWatcher.Deleted -= OnCursorFolderChanged;
					cursorFolderWatcher.Renamed -= OnCursorFolderChanged;
					cursorFolderWatcher.Changed -= OnCursorFolderChanged;
					cursorFolderWatcher.Error -= OnCursorFolderWatcherError;
					cursorFolderWatcher.Dispose();
				}
				catch (Exception ex)
				{
					Logger.LogWarning((object)("Could not stop cursor folder watcher: " + ex.Message));
				}
				cursorFolderWatcher = null;
			}
		}

		private void BindConfigEntries(string[] options)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Expected O, but got Unknown
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Expected O, but got Unknown
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Expected O, but got Unknown
			cursorSizeCfg = ((BaseUnityPlugin)this).Config.Bind<float>("Cursor", "CursorSize", 32f, new ConfigDescription("Cursor size in pixels, for the cursor selected in CursorFile. Remembered per cursor.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(8f, 512f), Array.Empty<object>()));
			hotspotXCfg = ((BaseUnityPlugin)this).Config.Bind<int>("Cursor", "HotspotX", 0, new ConfigDescription("Click point X in source-image pixels, measured from the image's top-left corner. 0 = left edge. For a centered crosshair in a 256px image use 128. Values far outside the image are allowed for irregular art. Scales with CursorSize automatically. Remembered per cursor.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(-2048, 2048), Array.Empty<object>()));
			hotspotYCfg = ((BaseUnityPlugin)this).Config.Bind<int>("Cursor", "HotspotY", 0, new ConfigDescription("Click point Y in source-image pixels, measured from the image's top-left corner. 0 = top edge. For a centered crosshair in a 256px image use 128. Values far outside the image are allowed for irregular art. Scales with CursorSize automatically. Remembered per cursor.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(-2048, 2048), Array.Empty<object>()));
			cursorFileCfg = ((BaseUnityPlugin)this).Config.Bind<string>("Cursor", "CursorFile", "Default", new ConfigDescription("Cursor image. \"Default\" is the built-in arrow; every other entry is an image found in BepInEx/config/BetterMouseCursor/ with its file extension hidden. PNG and JPG are supported. Add or remove images in that folder and the list updates live. Each cursor keeps its own CursorSize and hotspot.", (AcceptableValueBase)(object)new AcceptableValueList<string>(options), Array.Empty<object>()));
		}

		private static void SetSettingChangedHandlers(bool attach)
		{
			if (attach)
			{
				cursorFileCfg.SettingChanged += OnCursorFileChanged;
				cursorSizeCfg.SettingChanged += OnCursorLookChanged;
				hotspotXCfg.SettingChanged += OnCursorLookChanged;
				hotspotYCfg.SettingChanged += OnCursorLookChanged;
			}
			else
			{
				cursorFileCfg.SettingChanged -= OnCursorFileChanged;
				cursorSizeCfg.SettingChanged -= OnCursorLookChanged;
				hotspotXCfg.SettingChanged -= OnCursorLookChanged;
				hotspotYCfg.SettingChanged -= OnCursorLookChanged;
			}
		}

		private static void OnCursorFileChanged(object sender, EventArgs e)
		{
			pendingCursorSwitch = true;
			rebuildPending = true;
		}

		private static void OnCursorLookChanged(object sender, EventArgs e)
		{
			if (!applyingPreset)
			{
				pendingPresetCapture = true;
			}
			rebuildPending = true;
		}

		private void OnConfigFileChanged(object sender, FileSystemEventArgs e)
		{
			pendingConfigReload = true;
		}

		private void OnCursorFolderChanged(object sender, FileSystemEventArgs e)
		{
			if (IsSupportedImage(e.Name) || (e is RenamedEventArgs e2 && IsSupportedImage(e2.OldName)))
			{
				pendingFolderRescan = true;
			}
		}

		private static bool IsSupportedImage(string name)
		{
			if (string.IsNullOrEmpty(name))
			{
				return false;
			}
			return Array.IndexOf(SupportedExtensions, Path.GetExtension(name).ToLowerInvariant()) >= 0;
		}

		private void OnCursorFolderWatcherError(object sender, ErrorEventArgs e)
		{
			pendingWatcherRestart = true;
		}

		private void Update()
		{
			if (pendingConfigReload)
			{
				pendingConfigReload = false;
				((BaseUnityPlugin)this).Config.Reload();
			}
			if (pendingWatcherRestart)
			{
				pendingWatcherRestart = false;
				Logger.LogWarning((object)"Cursor folder watcher dropped — restarting it.");
				StartCursorFolderWatcher();
				pendingFolderRescan = true;
			}
			if (pendingFolderRescan)
			{
				pendingFolderRescan = false;
				RescanCursorOptions();
			}
			if (pendingPresetCapture)
			{
				pendingPresetCapture = false;
				CaptureActivePreset();
			}
			if (pendingCursorSwitch)
			{
				pendingCursorSwitch = false;
				SwitchCursorPreset();
			}
			if (rebuildPending)
			{
				rebuildPending = false;
				RebuildCursor();
			}
		}

		private static void LoadPresets()
		{
			presets.Clear();
			try
			{
				if (!File.Exists(PresetsPath))
				{
					return;
				}
				CursorPreset value = null;
				foreach (string item in File.ReadLines(PresetsPath))
				{
					string text = item.Trim();
					if (text.Length == 0 || text[0] == '#')
					{
						continue;
					}
					if (text[0] == '[' && text[text.Length - 1] == ']')
					{
						string text2 = text.Substring(1, text.Length - 2).Trim();
						if (text2.Length == 0)
						{
							value = null;
						}
						else if (!presets.TryGetValue(text2, out value))
						{
							value = new CursorPreset();
							presets[text2] = value;
						}
					}
					else
					{
						if (value == null)
						{
							continue;
						}
						int num = text.IndexOf('=');
						if (num < 0)
						{
							continue;
						}
						string a = text.Substring(0, num).Trim();
						string s = text.Substring(num + 1).Trim();
						int result3;
						if (string.Equals(a, "Size", StringComparison.OrdinalIgnoreCase))
						{
							if (float.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out var result))
							{
								value.Size = Mathf.Clamp(result, 8f, 512f);
							}
						}
						else if (string.Equals(a, "HotspotX", StringComparison.OrdinalIgnoreCase))
						{
							if (int.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result2))
							{
								value.HotspotX = Mathf.Clamp(result2, -2048, 2048);
							}
						}
						else if (string.Equals(a, "HotspotY", StringComparison.OrdinalIgnoreCase) && int.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out result3))
						{
							value.HotspotY = Mathf.Clamp(result3, -2048, 2048);
						}
					}
				}
			}
			catch (Exception ex)
			{
				Logger.LogWarning((object)("Could not read '" + PresetsPath + "': " + ex.Message + " — per-cursor settings start fresh."));
				presets.Clear();
			}
		}

		private static void SavePresets()
		{
			try
			{
				StringBuilder stringBuilder = new StringBuilder();
				stringBuilder.AppendLine("# BetterMouseCursor — size and hotspot remembered per cursor.");
				stringBuilder.AppendLine("# Written automatically as you edit settings in game.");
				stringBuilder.AppendLine("# Delete a section to reset that cursor to defaults.");
				string[] array = cursorOptions;
				foreach (string text in array)
				{
					if (presets.TryGetValue(text, out var value))
					{
						stringBuilder.AppendLine();
						stringBuilder.AppendLine("[" + text + "]");
						stringBuilder.AppendLine("Size = " + value.Size.ToString(CultureInfo.InvariantCulture));
						stringBuilder.AppendLine("HotspotX = " + value.HotspotX.ToString(CultureInfo.InvariantCulture));
						stringBuilder.AppendLine("HotspotY = " + value.HotspotY.ToString(CultureInfo.InvariantCulture));
					}
				}
				Directory.CreateDirectory(CursorFolder);
				File.WriteAllText(PresetsPath, stringBuilder.ToString());
			}
			catch (Exception ex)
			{
				Logger.LogWarning((object)("Could not write '" + PresetsPath + "': " + ex.Message + " — per-cursor settings will not persist."));
			}
		}

		private static void CaptureActivePreset()
		{
			if (activeCursorOption != null)
			{
				presets[activeCursorOption] = new CursorPreset
				{
					Size = cursorSizeCfg.Value,
					HotspotX = hotspotXCfg.Value,
					HotspotY = hotspotYCfg.Value
				};
				SavePresets();
			}
		}

		private static void ApplyPreset(string option)
		{
			activeCursorOption = option;
			if (!presets.TryGetValue(option, out var value))
			{
				value = new CursorPreset();
				presets[option] = value;
			}
			applyingPreset = true;
			try
			{
				cursorSizeCfg.Value = value.Size;
				hotspotXCfg.Value = value.HotspotX;
				hotspotYCfg.Value = value.HotspotY;
			}
			finally
			{
				applyingPreset = false;
			}
		}

		private static void PrunePresets()
		{
			HashSet<string> hashSet = new HashSet<string>(cursorOptions, StringComparer.OrdinalIgnoreCase);
			List<string> list = new List<string>();
			foreach (string key in presets.Keys)
			{
				if (!hashSet.Contains(key))
				{
					list.Add(key);
				}
			}
			foreach (string item in list)
			{
				presets.Remove(item);
				Logger.LogInfo((object)("Cursor '" + item + "' is gone — dropped its saved size and hotspot."));
			}
		}

		private void SwitchCursorPreset()
		{
			string text = (cursorFileCfg.Value ?? "Default").Trim();
			if (!string.Equals(text, activeCursorOption, StringComparison.OrdinalIgnoreCase))
			{
				CaptureActivePreset();
				ApplyPreset(text);
				SavePresets();
				((BaseUnityPlugin)this).Config.Save();
				RefreshModSettingsMenu();
			}
		}

		private static string[] BuildCursorOptions(out Dictionary<string, string> filesByOption)
		{
			filesByOption = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
			List<string> list = new List<string> { "Default" };
			string[] files;
			try
			{
				Directory.CreateDirectory(CursorFolder);
				files = Directory.GetFiles(CursorFolder);
			}
			catch (Exception ex)
			{
				Logger.LogWarning((object)("Could not scan '" + CursorFolder + "': " + ex.Message));
				return list.ToArray();
			}
			Array.Sort(files, (IComparer<string>?)StringComparer.OrdinalIgnoreCase);
			string[] array = files;
			foreach (string path in array)
			{
				string fileName = Path.GetFileName(path);
				if (!IsSupportedImage(fileName))
				{
					continue;
				}
				if (fileName.IndexOf(',') >= 0)
				{
					Logger.LogWarning((object)("Skipping '" + fileName + "': commas break ModSettingsMenu's dropdown list."));
					continue;
				}
				if (list.Count >= 100)
				{
					Logger.LogWarning((object)($"More than {99} images in '{CursorFolder}' — " + "the rest are not listed in the CursorFile dropdown."));
					break;
				}
				string text = Path.GetFileNameWithoutExtension(fileName);
				if (text.Length == 0 || filesByOption.ContainsKey(text) || string.Equals(text, "Default", StringComparison.OrdinalIgnoreCase))
				{
					text = fileName;
				}
				if (filesByOption.ContainsKey(text))
				{
					Logger.LogWarning((object)("Skipping '" + fileName + "': its dropdown name is already taken."));
					continue;
				}
				filesByOption[text] = fileName;
				list.Add(text);
			}
			return list.ToArray();
		}

		private void RescanCursorOptions()
		{
			Dictionary<string, string> filesByOption;
			string[] array = BuildCursorOptions(out filesByOption);
			cursorFilesByOption = filesByOption;
			bool flag = array.Length != cursorOptions.Length;
			int num = 0;
			while (!flag && num < array.Length)
			{
				flag = !string.Equals(array[num], cursorOptions[num], StringComparison.Ordinal);
				num++;
			}
			if (flag)
			{
				RebindConfigEntries(array);
				PrunePresets();
				SavePresets();
				pendingCursorSwitch = true;
			}
			rebuildPending = true;
		}

		private void RebindConfigEntries(string[] options)
		{
			string value = cursorFileCfg.Value;
			float value2 = cursorSizeCfg.Value;
			int value3 = hotspotXCfg.Value;
			int value4 = hotspotYCfg.Value;
			SetSettingChangedHandlers(attach: false);
			bool saveOnConfigSet = ((BaseUnityPlugin)this).Config.SaveOnConfigSet;
			((BaseUnityPlugin)this).Config.SaveOnConfigSet = false;
			try
			{
				((BaseUnityPlugin)this).Config.Clear();
				BindConfigEntries(options);
				if (Array.IndexOf(options, value) >= 0)
				{
					cursorFileCfg.Value = value;
				}
				else if (!string.Equals(value, "Default", StringComparison.Ordinal))
				{
					Logger.LogInfo((object)("Cursor image '" + value + "' is gone — falling back to Default."));
				}
				cursorSizeCfg.Value = value2;
				hotspotXCfg.Value = value3;
				hotspotYCfg.Value = value4;
			}
			finally
			{
				((BaseUnityPlugin)this).Config.SaveOnConfigSet = saveOnConfigSet;
				SetSettingChangedHandlers(attach: true);
			}
			cursorOptions = options;
			((BaseUnityPlugin)this).Config.Save();
			RefreshModSettingsMenu();
		}

		private static void RefreshModSettingsMenu()
		{
			if (!msmRefreshResolved)
			{
				msmRefreshResolved = true;
				ResolveModSettingsMenuHooks();
			}
			try
			{
				msmInvalidateOptions?.Invoke();
				msmRefreshMods?.Invoke();
			}
			catch (Exception ex)
			{
				Logger.LogWarning((object)("ModSettingsMenu refresh failed: " + ex.Message));
			}
		}

		private static void ResolveModSettingsMenuHooks()
		{
			try
			{
				Type type = AccessTools.TypeByName("ModConfigGUI");
				if (type == null)
				{
					Logger.LogInfo((object)"ModSettingsMenu not installed — the CursorFile list still updates in the .cfg, there is just no menu to refresh.");
					return;
				}
				MethodInfo method = type.GetMethod("RefreshMods", BindingFlags.Static | BindingFlags.Public, null, Type.EmptyTypes, null);
				if (method != null)
				{
					msmRefreshMods = (Action)Delegate.CreateDelegate(typeof(Action), method);
				}
				FieldInfo field = type.GetField("_cachedOptions", BindingFlags.Static | BindingFlags.NonPublic);
				if (field != null && typeof(IDictionary).IsAssignableFrom(field.FieldType))
				{
					msmInvalidateOptions = InvalidateOurCachedOptions(field);
				}
				if (msmRefreshMods == null || msmInvalidateOptions == null)
				{
					Logger.LogWarning((object)"This ModSettingsMenu version does not expose the hooks needed to refresh its dropdown live — restart the game after adding or removing cursor images.");
				}
			}
			catch (Exception ex)
			{
				Logger.LogWarning((object)("Could not hook ModSettingsMenu: " + ex.Message + " — restart the game after adding or removing cursor images."));
			}
		}

		private static Action InvalidateOurCachedOptions(FieldInfo cacheField)
		{
			return delegate
			{
				if (!(cacheField.GetValue(null) is IDictionary dictionary))
				{
					return;
				}
				List<object> list = new List<object>();
				foreach (object key in dictionary.Keys)
				{
					if (key is string path && string.Equals(Path.GetFileName(path), "coruscnium.bettermousecursor.cfg", StringComparison.OrdinalIgnoreCase))
					{
						list.Add(key);
					}
				}
				foreach (object item in list)
				{
					dictionary.Remove(item);
				}
			};
		}

		private static string ReadRawConfigValue(string section, string key)
		{
			try
			{
				string path = Path.Combine(Paths.ConfigPath, "coruscnium.bettermousecursor.cfg");
				if (!File.Exists(path))
				{
					return null;
				}
				bool flag = false;
				foreach (string item in File.ReadLines(path))
				{
					string text = item.Trim();
					if (text.Length == 0 || text[0] == '#')
					{
						continue;
					}
					if (text[0] == '[' && text[text.Length - 1] == ']')
					{
						flag = string.Equals(text.Substring(1, text.Length - 2).Trim(), section, StringComparison.OrdinalIgnoreCase);
					}
					else if (flag)
					{
						int num = text.IndexOf('=');
						if (num >= 0 && string.Equals(text.Substring(0, num).Trim(), key, StringComparison.OrdinalIgnoreCase))
						{
							return text.Substring(num + 1).Trim();
						}
					}
				}
			}
			catch (Exception ex)
			{
				Logger.LogWarning((object)("Could not read existing config value [" + section + "] " + key + ": " + ex.Message));
			}
			return null;
		}

		private static void MigrateLegacyCursorFile(string legacy)
		{
			if (string.IsNullOrEmpty(legacy) || string.Equals(legacy, "Default", StringComparison.OrdinalIgnoreCase) || !string.Equals(cursorFileCfg.Value, "Default", StringComparison.Ordinal))
			{
				return;
			}
			string fileName = Path.GetFileName(legacy);
			foreach (KeyValuePair<string, string> item in cursorFilesByOption)
			{
				if (string.Equals(item.Value, fileName, StringComparison.OrdinalIgnoreCase))
				{
					cursorFileCfg.Value = item.Key;
					Logger.LogInfo((object)("Migrated CursorFile '" + legacy + "' to dropdown entry '" + item.Key + "'."));
					return;
				}
			}
			Logger.LogWarning((object)("Previous CursorFile '" + legacy + "' is not an image in '" + CursorFolder + "' — reset to Default. Copy the image into that folder to pick it from the dropdown."));
		}

		private static void RebuildCursor()
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: 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)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			cursorSize = Mathf.Clamp(cursorSizeCfg.Value, 8f, 512f);
			Texture2D val = LoadConfiguredTexture();
			if ((Object)(object)overlayTex != (Object)null)
			{
				Object.Destroy((Object)(object)overlayTex);
			}
			overlayTex = val;
			hotspot = new Vector2((float)hotspotXCfg.Value / (float)((Texture)overlayTex).width, (float)hotspotYCfg.Value / (float)((Texture)overlayTex).height);
			if ((Object)(object)overlayImage != (Object)null)
			{
				overlayImage.texture = (Texture)(object)overlayTex;
				((Graphic)overlayImage).rectTransform.sizeDelta = new Vector2(cursorSize, cursorSize);
				((Graphic)overlayImage).rectTransform.pivot = new Vector2(hotspot.x, 1f - hotspot.y);
			}
			appliedCursorMode = 0;
			Logger.LogInfo((object)$"Cursor rebuilt: file='{cursorFileCfg.Value}' size={cursorSize} hotspot=({hotspot.x:F2},{hotspot.y:F2})");
		}

		private static Texture2D LoadConfiguredTexture()
		{
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Expected O, but got Unknown
			string text = (cursorFileCfg.Value ?? "").Trim();
			if (text.Length == 0 || string.Equals(text, "Default", StringComparison.OrdinalIgnoreCase))
			{
				return LoadBuiltInTexture();
			}
			if (!cursorFilesByOption.TryGetValue(text, out var value))
			{
				Logger.LogWarning((object)("CursorFile '" + text + "' is not an image in '" + CursorFolder + "' — using built-in cursor."));
				return LoadBuiltInTexture();
			}
			try
			{
				byte[] array = File.ReadAllBytes(Path.Combine(CursorFolder, value));
				Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false);
				if (ImageConversion.LoadImage(val, array))
				{
					return val;
				}
				Object.Destroy((Object)(object)val);
				Logger.LogWarning((object)("CursorFile '" + value + "' is not a decodable image — using built-in cursor."));
			}
			catch (Exception ex)
			{
				Logger.LogWarning((object)("Failed to load CursorFile '" + value + "': " + ex.Message + " — using built-in cursor."));
			}
			return LoadBuiltInTexture();
		}

		private static Texture2D LoadBuiltInTexture()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			Texture2D val = new Texture2D(64, 64, (TextureFormat)4, false);
			val.LoadRawTextureData(CursorData_Normal.RawPixels);
			val.Apply(false, false);
			return val;
		}

		private static Texture2D GetTransparentTexture()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			if ((Object)(object)transparentTex == (Object)null)
			{
				transparentTex = new Texture2D(32, 32, (TextureFormat)4, false);
				transparentTex.SetPixels32((Color32[])(object)new Color32[1024]);
				transparentTex.Apply(false, false);
			}
			return transparentTex;
		}

		[HarmonyPatch(typeof(Rumble), "SetCursor")]
		[HarmonyPrefix]
		private static bool SetCursor_Prefix()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			if (appliedCursorMode != 2)
			{
				appliedCursorMode = 2;
				Cursor.SetCursor(GetTransparentTexture(), Vector2.zero, (CursorMode)1);
			}
			return false;
		}

		[HarmonyPatch(typeof(PlayerInput), "WarpCursorPosition")]
		[HarmonyPrefix]
		private static void WarpCursorPosition_Prefix(ref Vector2 screenPosition)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: 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_00b1: 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)
			if (Time.frameCount - lastWarpFrame <= 2 && Mouse.current != null)
			{
				Vector2 val = screenPosition - ((InputControl<Vector2>)(object)((Pointer)Mouse.current).position).ReadValue();
				floatCursorPos += val;
			}
			else
			{
				floatCursorPos = screenPosition;
			}
			floatCursorPos.x = Mathf.Clamp(floatCursorPos.x, 0f, (float)(Screen.width - 1));
			floatCursorPos.y = Mathf.Clamp(floatCursorPos.y, 0f, (float)(Screen.height - 1));
			lastWarpFrame = Time.frameCount;
			screenPosition = floatCursorPos;
		}

		private void LateUpdate()
		{
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)overlayImage == (Object)null))
			{
				bool flag = Cursor.visible && Mouse.current != null;
				if (((Behaviour)overlayImage).enabled != flag)
				{
					((Behaviour)overlayImage).enabled = flag;
				}
				if (flag)
				{
					Vector2 val = ((lastWarpFrame == Time.frameCount) ? floatCursorPos : ((InputControl<Vector2>)(object)((Pointer)Mouse.current).position).ReadValue());
					((Transform)((Graphic)overlayImage).rectTransform).position = new Vector3(val.x, val.y, 0f);
				}
			}
		}

		private static void CreateOverlay()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			GameObject val = new GameObject("BetterMouseCursorOverlay");
			Object.DontDestroyOnLoad((Object)(object)val);
			Canvas val2 = val.AddComponent<Canvas>();
			val2.renderMode = (RenderMode)0;
			val2.sortingOrder = 32767;
			GameObject val3 = new GameObject("Cursor");
			val3.transform.SetParent(val.transform, false);
			overlayImage = val3.AddComponent<RawImage>();
			((Graphic)overlayImage).raycastTarget = false;
			((Behaviour)overlayImage).enabled = false;
		}
	}
}