namespace PixelSecurity.Core.Events
{

	// [TypeInfo RVA: 0x0]
	public class GameEvent : Object
	{
		private readonly System.Collections.Generic.List<System.Action> _listeners; // 0x10

		// RVA: 0x32AF164 VA: 0x781899A164
		protected override void Finalize();
		/*
		 *   GameEvent.RemoveAllListeners(this);
		 *   System.Object.Finalize(this);
		 *   return;
		 */
		// RVA: 0x32AF258 VA: 0x781899A258
		public void AddListener(System.Action listener);
		/*
		 *   uint uVar1;
		 *   ulong uVar2;
		 *   undefined8 *puVar3;
		 *   void *pvVar4;
		 *   long lVar5;
		 *   long lVar6;
		 *
		 *   if ((bRam000000000754af83 & 1) == 0) {
		 *     func_0x031fdc8c(PTR_DAT_070c6768);
		 *     func_0x031fdc8c(PTR_DAT_070c6770);
		 *     bRam000000000754af83 = 1;
		 *   }
		 *   if (this.listeners != null) {
		 *     uVar2 = func_0x03f2daa0(this.listeners,listener,*(undefined8 *)PTR_DAT_070c6770);
		 *     if ((uVar2 & 1) != 0) {
		 *       return;
		 *     }
		 *     pvVar4 = this.listeners;
		 *     if (pvVar4 != null) {
		 *       lVar5 = *(long *)((long)pvVar4 + 0x10);
		 *       lVar6 = *(long *)PTR_DAT_070c6768;
		 *       *(int *)((long)pvVar4 + 0x1c) = *(int *)((long)pvVar4 + 0x1c) + 1;
		 *       if (lVar5 != 0) {
		 *         uVar1 = *(uint *)((long)pvVar4 + 0x18);
		 *         if (uVar1 < *(uint *)(lVar5 + 0x18)) {
		 *           *(uint *)((long)pvVar4 + 0x18) = uVar1 + 1;
		 *           puVar3 = (undefined8 *)(lVar5 + (long)(int)uVar1 * 8 + 0x20);
		 *           *puVar3 = listener;
		 *         }
		 *         else {
		 *           uVar1 = *(uint *)((long)pvVar4 + 0x18);
		 *           func_0x03f2dce8(pvVar4,uVar1 + 1,
		 *                           *(undefined8 *)
		 *                            (*(long *)(*(long *)(*(long *)(*(long *)(*(long *)(lVar6 + 0x20) + 0xc0)
		 *                                                          + 0x70) + 0x20) + 0xc0) + 0x78));
		 *           lVar5 = *(long *)((long)pvVar4 + 0x10);
		 *           *(uint *)((long)pvVar4 + 0x18) = uVar1 + 1;
		 *           if (lVar5 == 0) {
		 *             IL2CPP.ThrowNullReferenceException();
		 *           }
		 *           if (*(uint *)(lVar5 + 0x18) <= uVar1) {
		 *             IL2CPP.ThrowIndexOutOfRangeException();
		 *           }
		 *           puVar3 = (undefined8 *)(lVar5 + (long)(int)uVar1 * 8 + 0x20);
		 *           *puVar3 = listener;
		 *         }
		 *         if (iRam00000000077785f0 != 0) {
		 *           func_0x032ed0c0(1L << ((ulong)puVar3 >> 0xc & 0x3f),
		 *                           ((ulong)puVar3 >> 0x12 & 0x7fff) * 8 + 0x75ac5c8);
		 *         }
		 *         return;
		 *       }
		 *     }
		 *   }
		 *   IL2CPP.ThrowNullReferenceException();
		 */
		// RVA: 0x32AF33C VA: 0x781899A33C
		public void RemoveListener(System.Action listener);
		/*
		 *   int iVar1;
		 *   ulong uVar2;
		 *   void *pvVar3;
		 *
		 *   if ((bRam000000000754af84 & 1) == 0) {
		 *     func_0x031fdc8c(PTR_DAT_070c6770);
		 *     func_0x031fdc8c(PTR_DAT_070c6778);
		 *     bRam000000000754af84 = 1;
		 *   }
		 *   if (this.listeners != null) {
		 *     uVar2 = func_0x03f2daa0(this.listeners,listener,*(undefined8 *)PTR_DAT_070c6770);
		 *     if ((uVar2 & 1) == 0) {
		 *       return;
		 *     }
		 *     pvVar3 = this.listeners;
		 *     if (pvVar3 != null) {
		 *       iVar1 = func_0x03a42b70(*(undefined8 *)((long)pvVar3 + 0x10),listener,0,
		 *                               *(undefined4 *)((long)pvVar3 + 0x18),
		 *                               *(undefined8 *)
		 *                                (*(long *)(*(long *)(*(long *)(*(long *)(*(long *)(*(long *)
		 *                                                   PTR_DAT_070c6778 + 0x20) + 0xc0) + 0xd0) + 0x20) +
		 *                                          0xc0) + 0x150));
		 *       if (-1 < iVar1) {
		 *         func_0x03f2ee68(pvVar3,iVar1);
		 *       }
		 *       return;
		 *     }
		 *   }
		 *   IL2CPP.ThrowNullReferenceException();
		 */
		// RVA: 0x32AF1E8 VA: 0x781899A1E8
		public void RemoveAllListeners();
		/*
		 *   int iVar1;
		 *   int iVar2;
		 *   int iVar3;
		 *   undefined8 *this_00;
		 *   void *this_01;
		 *   undefined *puVar4;
		 *   undefined8 uVar5;
		 *   void *methodInfo_00;
		 *   void *pvVar6;
		 *   undefined1 auVar7 [16];
		 *
		 *   auVar7._8_8_ = methodInfo;
		 *   auVar7._0_8_ = this;
		 *   if ((bRam000000000754af85 & 1) == 0) {
		 *     auVar7 = func_0x031fdc8c(PTR_DAT_070c6760);
		 *     bRam000000000754af85 = 1;
		 *   }
		 *   pvVar6 = this.listeners;
		 *   if (pvVar6 != null) {
		 *     iVar1 = *(int *)((long)pvVar6 + 0x18);
		 *     *(undefined4 *)((long)pvVar6 + 0x18) = 0;
		 *     *(int *)((long)pvVar6 + 0x1c) = *(int *)((long)pvVar6 + 0x1c) + 1;
		 *     if (iVar1 < 1) {
		 *       return;
		 *     }
		 *     this_00 = *(undefined8 **)((long)pvVar6 + 0x10);
		 *     if (this_00 == null) {
		 *       func_0x031fdca0(PTR_DAT_070c5760,0,iVar1,0);
		 *       this_01 = (void *)func_0x031fdf24();
		 *       pvVar6 = (void *)func_0x031fdca0(PTR_DAT_070c6f80);
		 *       System.ArgumentNullException..ctor(this_01,pvVar6);
		 *     }
		 *     else {
		 *       if (iVar1 < 0) {
		 *         func_0x031fdca0(PTR_DAT_070c6660,0,iVar1,0);
		 *         this_01 = (void *)func_0x031fdf24();
		 *         puVar4 = PTR_DAT_070e6df8;
		 *       }
		 *       else {
		 *         iVar2 = func_0x0320c83c(this_00,0);
		 *         if (iVar2 < 1) {
		 *           iVar3 = System.Array.get_Length(this_00);
		 *           if (-iVar2 <= iVar3 - iVar1) {
		 *             iVar3 = func_0x06cb3d30(*this_00);
		 *             (*(code *)PTR_memset_071642a8)
		 *                       ((long)this_00 + (long)iVar3 * (long)-iVar2 + 0x20,0,(long)(iVar3 * iVar1));
		 *             return;
		 *           }
		 *           func_0x031fdca0(PTR_DAT_070c6660);
		 *           this_01 = (void *)func_0x031fdf24();
		 *           puVar4 = PTR_DAT_070e6e08;
		 *         }
		 *         else {
		 *           func_0x031fdca0(PTR_DAT_070c6660);
		 *           this_01 = (void *)func_0x031fdf24();
		 *           puVar4 = PTR_DAT_070e6e00;
		 *         }
		 *       }
		 *       pvVar6 = (void *)func_0x031fdca0(puVar4);
		 *       IndexOutOfRangeException..ctor(this_01,pvVar6);
		 *     }
		 *     uVar5 = func_0x031fdca0(PTR_DAT_070e6e10);
		 *     IL2CPP.ThrowManagedException();
		 *   }
		 *   IL2CPP.ThrowNullReferenceException();
		 */
		// RVA: 0x32AF3CC VA: 0x781899A3CC
		public void Invoke(bool inverted);
		/*
		 *   undefined *puVar1;
		 *   void *pvVar2;
		 *   long lVar3;
		 *   void *extraout_x1;
		 *   int iVar4;
		 *
		 *   pvVar2 = (void *)(ulong)inverted;
		 *   if ((bRam000000000754af86 & 1) == 0) {
		 *     func_0x031fdc8c(PTR_DAT_070c6780);
		 *     func_0x031fdc8c(PTR_DAT_070c6788);
		 *     bRam000000000754af86 = 1;
		 *     pvVar2 = extraout_x1;
		 *   }
		 *   GameEvent.CleanupListeners(this);
		 *   puVar1 = PTR_DAT_070c6788;
		 *   pvVar2 = this.listeners;
		 *   if (inverted) {
		 *     if (pvVar2 != null) {
		 *       iVar4 = *(int *)((long)pvVar2 + 0x18);
		 *       if (-1 < iVar4 + -1) {
		 *         do {
		 *           if (this.listeners == null) goto LAB_033af4f0;
		 *           iVar4 = iVar4 + -1;
		 *           lVar3 = func_0x03f2d434(this.listeners,iVar4,*(undefined8 *)puVar1);
		 *           if (lVar3 != 0) {
		 *             if (this.listeners == null) goto LAB_033af4f0;
		 *             lVar3 = func_0x03f2d434(this.listeners,iVar4,*(undefined8 *)puVar1);
		 *             if (lVar3 != 0) {
		 *               (**(code **)(lVar3 + 0x18))
		 *                         (*(undefined8 *)(lVar3 + 0x40),*(undefined8 *)(lVar3 + 0x28));
		 *             }
		 *           }
		 *         } while (0 < iVar4);
		 *       }
		 *       return;
		 *     }
		 *   }
		 *   else if (pvVar2 != null) {
		 *     iVar4 = 0;
		 *     do {
		 *       if (*(int *)((long)pvVar2 + 0x18) <= iVar4) {
		 *         return;
		 *       }
		 *       lVar3 = func_0x03f2d434(pvVar2,iVar4,*(undefined8 *)puVar1);
		 *       if (lVar3 != 0) {
		 *         if (this.listeners == null) break;
		 *         lVar3 = func_0x03f2d434(this.listeners,iVar4,*(undefined8 *)puVar1);
		 *         if (lVar3 != 0) {
		 *           (**(code **)(lVar3 + 0x18))(*(undefined8 *)(lVar3 + 0x40),*(undefined8 *)(lVar3 + 0x28));
		 *         }
		 *       }
		 *       pvVar2 = this.listeners;
		 *       iVar4 = iVar4 + 1;
		 *     } while (pvVar2 != null);
		 *   }
		 * LAB_033af4f0:
		 *   IL2CPP.ThrowNullReferenceException();
		 */
		// RVA: 0x32AF4F4 VA: 0x781899A4F4
		private void CleanupListeners();
		/*
		 *   int iVar1;
		 *   undefined *puVar2;
		 *   long lVar3;
		 *   long *plVar4;
		 *   ulong uVar5;
		 *   ulong uVar6;
		 *   void *extraout_x1;
		 *   void *extraout_x1_00;
		 *   undefined8 *puVar7;
		 *   void *pvVar8;
		 *   long lVar9;
		 *   uint uVar10;
		 *   undefined8 uVar11;
		 *   uint uVar12;
		 *   ulong uVar13;
		 *
		 *   puVar2 = PTR_DAT_070c6790;
		 *   if ((bRam000000000754af87 & 1) == 0) {
		 *     func_0x031fdc8c(PTR_DAT_070c6798);
		 *     func_0x031fdc8c(PTR_DAT_070c67a0);
		 *     func_0x031fdc8c(PTR_DAT_070c67a8);
		 *     func_0x031fdc8c(PTR_DAT_070c6790);
		 *     bRam000000000754af87 = 1;
		 *     methodInfo = extraout_x1;
		 *   }
		 *   lVar3 = *(long *)puVar2;
		 *   pvVar8 = this.listeners;
		 *   if (*(int *)(lVar3 + 0xe4) == 0) {
		 *     func_0x031fde08(lVar3,methodInfo);
		 *     lVar3 = *(long *)puVar2;
		 *     methodInfo = extraout_x1_00;
		 *   }
		 *   puVar7 = *(undefined8 **)(lVar3 + 0xb8);
		 *   lVar9 = puVar7[1];
		 *   if (lVar9 == 0) {
		 *     if (*(int *)(lVar3 + 0xe4) == 0) {
		 *       func_0x031fde08(lVar3,methodInfo);
		 *       puVar7 = *(undefined8 **)(*(long *)puVar2 + 0xb8);
		 *     }
		 *     uVar11 = *puVar7;
		 *     lVar9 = func_0x031fdf24(*(undefined8 *)PTR_DAT_070c67a0);
		 *     func_0x043e7f38(lVar9,uVar11,*(undefined8 *)PTR_DAT_070c67a8,0);
		 *     plVar4 = (long *)(*(long *)(*(long *)puVar2 + 0xb8) + 8);
		 *     *plVar4 = lVar9;
		 *     func_0x031fdc38(plVar4,lVar9);
		 *   }
		 *   if (pvVar8 == null) {
		 *     IL2CPP.ThrowNullReferenceException();
		 *   }
		 *   uVar11 = *(undefined8 *)PTR_DAT_070c6798;
		 *   if (lVar9 == 0) {
		 *     ThrowHelper.ThrowArgumentNullException(8);
		 *   }
		 *   iVar1 = *(int *)((long)pvVar8 + 0x18);
		 *   if (iVar1 < 1) {
		 *     uVar13 = 0;
		 *   }
		 *   else {
		 *     uVar13 = 0;
		 *     do {
		 *       lVar3 = *(long *)((long)pvVar8 + 0x10);
		 *       if (lVar3 == 0) goto LAB_03f2ee60;
		 *       if (*(uint *)(lVar3 + 0x18) <= uVar13) goto LAB_03f2ee64;
		 *       if (lVar9 == 0) goto LAB_03f2ee60;
		 *       uVar5 = (**(code **)(lVar9 + 0x18))
		 *                         (*(undefined8 *)(lVar9 + 0x40),*(undefined8 *)(lVar3 + uVar13 * 8 + 0x20),
		 *                          *(undefined8 *)(lVar9 + 0x28));
		 *       iVar1 = *(int *)((long)pvVar8 + 0x18);
		 *     } while (((uVar5 & 1) == 0) && (uVar13 = uVar13 + 1, (long)uVar13 < (long)iVar1));
		 *   }
		 *   if (iVar1 <= (int)uVar13) {
		 *     return;
		 *   }
		 *   uVar5 = uVar13 & 0xffffffff;
		 *   while( true ) {
		 *     uVar13 = (ulong)((int)uVar13 + 1);
		 *     do {
		 *       uVar10 = (uint)uVar5;
		 *       if (iVar1 <= (int)uVar13) {
		 *         System.Array.Clear(*(undefined8 *)((long)pvVar8 + 0x10),uVar5,iVar1 - uVar10);
		 *         *(uint *)((long)pvVar8 + 0x18) = uVar10;
		 *         *(int *)((long)pvVar8 + 0x1c) = *(int *)((long)pvVar8 + 0x1c) + 1;
		 *         return;
		 *       }
		 *       uVar13 = (ulong)(int)uVar13;
		 *       do {
		 *         lVar3 = *(long *)((long)pvVar8 + 0x10);
		 *         if (lVar3 == 0) goto LAB_03f2ee60;
		 *         if (*(uint *)(lVar3 + 0x18) <= (uint)uVar13) goto LAB_03f2ee64;
		 *         if (lVar9 == 0) goto LAB_03f2ee60;
		 *         uVar6 = (**(code **)(lVar9 + 0x18))
		 *                           (*(undefined8 *)(lVar9 + 0x40),*(undefined8 *)(lVar3 + uVar13 * 8 + 0x20),
		 *                            *(undefined8 *)(lVar9 + 0x28));
		 *         iVar1 = *(int *)((long)pvVar8 + 0x18);
		 *       } while (((uVar6 & 1) != 0) && (uVar13 = uVar13 + 1, (long)uVar13 < (long)iVar1));
		 *       uVar12 = (uint)uVar13;
		 *     } while (iVar1 <= (int)uVar12);
		 *     lVar3 = *(long *)((long)pvVar8 + 0x10);
		 *     if (lVar3 == 0) break;
		 *     if ((*(uint *)(lVar3 + 0x18) <= uVar12) || (*(uint *)(lVar3 + 0x18) <= uVar10)) {
		 * LAB_03f2ee64:
		 *       IL2CPP.ThrowIndexOutOfRangeException();
		 *     }
		 *     uVar5 = (ulong)(uVar10 + 1);
		 *     *(undefined8 *)(lVar3 + 0x20 + (long)(int)uVar10 * 8) =
		 *          *(undefined8 *)(lVar3 + 0x20 + (long)(int)uVar12 * 8);
		 *     func_0x031fdc38();
		 *     iVar1 = *(int *)((long)pvVar8 + 0x18);
		 *   }
		 * LAB_03f2ee60:
		 *   IL2CPP.ThrowNullReferenceException();
		 */
		// RVA: 0x32AF5F8 VA: 0x781899A5F8
		public void .ctor();
		/*
		 *   undefined *puVar1;
		 *   undefined *puVar2;
		 *   void *pvVar3;
		 *   void *extraout_x1;
		 *
		 *   puVar2 = PTR_DAT_070c67b8;
		 *   puVar1 = PTR_DAT_070c67b0;
		 *   if ((bRam000000000754af88 & 1) == 0) {
		 *     func_0x031fdc8c(PTR_DAT_070c67b8);
		 *     func_0x031fdc8c(PTR_DAT_070c67b0);
		 *     bRam000000000754af88 = 1;
		 *     methodInfo = extraout_x1;
		 *   }
		 *   pvVar3 = (void *)func_0x031fdf24(*(undefined8 *)puVar1,methodInfo);
		 *   func_0x03f2ce9c(pvVar3,*(undefined8 *)puVar2);
		 *   this.listeners = pvVar3;
		 *   func_0x031fdc38(&this.listeners,pvVar3);
		 *   return;
		 */
	}
}
