text: #include <Windows.h>
  
  struct FPointer
  {
  	uintptr_t Dummy;
  };
  
  struct FQWord
  {
  	int32_t A;
  	int32_t B;
  };
  
  struct FName
  {
  	int32_t ComparisonIndex;
  	int32_t Number;
  };
  
  template<class T>
  class TArray
  {
  	friend class FString;
  
  public:
  	TArray()
  	{
  		Data = nullptr;
  		Count = Max = 0;
  	};
  
  	size_t Num() const
  	{
  		return Count;
  	};
  
  	T& operator[](size_t i)
  	{
  		return Data[i];
  	};
  
  	const T& operator[](size_t i) const
  	{
  		return Data[i];
  	};
  
  	bool IsValidIndex(size_t i) const
  	{
  		return i < Num();
  	}
  
  private:
  	T* Data;
  	int32_t Count;
  	int32_t Max;
  };
  
  template<typename KeyType, typename ValueType>
  class TPair
  {
  public:
  	KeyType   Key;
  	ValueType Value;
  };
  
  class FString : public TArray<wchar_t>
  {
  public:
  	std::string ToString() const
  	{
  		const int size = WideCharToMultiByte(CP_UTF8, 0, Data, Count, nullptr, 0, nullptr, nullptr);
  		std::string str(size, 0);
  		WideCharToMultiByte(CP_UTF8, 0, Data, Count, &str[0], size, nullptr, nullptr);
  		return str;
  	}
  };
  
  class FScriptInterface
  {
  private:
  	UObject* ObjectPointer;
  	void* InterfacePointer;
  
  public:
  	UObject* GetObject() const
  	{
  		return ObjectPointer;
  	}
  
  	UObject*& GetObjectRef()
  	{
  		return ObjectPointer;
  	}
  
  	void* GetInterface() const
  	{
  		return ObjectPointer != nullptr ? InterfacePointer : nullptr;
  	}
  };
  
  template<class InterfaceType>
  class TScriptInterface : public FScriptInterface
  {
  public:
  	InterfaceType* operator->() const
  	{
  		return (InterfaceType*)GetInterface();
  	}
  
  	InterfaceType& operator*() const
  	{
  		return *((InterfaceType*)GetInterface());
  	}
  
  	operator bool() const
  	{
  		return GetInterface() != nullptr;
  	}
  };
  
  struct FText
  {
  	char UnknownData[0x28];
  };
  
  struct FScriptDelegate
  {
  	char UnknownData[0x14];
  };
  
  struct FScriptMulticastDelegate
  {
  	char UnknownData[0x10];
  };
  
  struct FWeakObjectPtr
  {
  	int32_t ObjectIndex;
  	int32_t ObjectSerialNumber;
  };
  
  struct FStringAssetReference
  {
  	FString AssetLongPathname;
  };
  
  template<typename TObjectID>
  class TPersistentObjectPtr
  {
  public:
  	FWeakObjectPtr WeakPtr;
  	int32_t TagAtLastTest;
  	TObjectID ObjectID;
  };
  
  class FAssetPtr : public TPersistentObjectPtr<FStringAssetReference>
  {
  
  };
  
  struct FSoftObjectPath
  {
  	FName AssetPathName;
  	FString SubPathString;
  };
  
  class FSoftObjectPtr : public TPersistentObjectPtr<FSoftObjectPath>
  {
  
  };
  
  struct FGuid
  {
  	uint32_t A;
  	uint32_t B;
  	uint32_t C;
  	uint32_t D;
  };
  
  struct FUniqueObjectGuid
  {
  	FGuid Guid;
  };
  
  class FLazyObjectPtr : public TPersistentObjectPtr<FUniqueObjectGuid>
  {
  
  };
  
  class UObject
  {
  public:
  	FPointer VTableObject;
  	int32_t ObjectFlags;
  	int32_t InternalIndex;
  	class UClass* Class;
  	FName Name;
  	UObject* Outer;
  	void* Unk;
  };
  
  class UField : public UObject
  {
  public:
  	UField* Next;
  };
  
  //class UEnum : public UField
  //{
  //public:
  //	FString CppType;
  //	TArray<FName> Names;
  //	int32_t CppForm;
  //};
  
  class UEnum : public UField
  {
  public:
  	FString CppType; //0x0030 
  	TArray<TPair<FName, uint64_t>> Names; //0x0040 
  	int64_t CppForm; //0x0050 
  };
  
  class UProperty : public UField
  {
  public:
  	int32_t ArrayDim;
  	int32_t ElementSize;
  	FQWord PropertyFlags;
  	int16_t RepIndex;
  	FName RepNotifyFunc;
  	int32_t Offset;
  	UProperty* PropertyLinkNext;
  	UProperty* NextRef;
  	UProperty* DestructorLinkNext;
  	UProperty* PostConstructLinkNext;
  };
  
  class UStruct : public UField
  {
  public:
  	UStruct* SuperField;
  	UField* Children;
  	int32_t PropertySize;
  	TArray<uint8_t> Script;
  	int32_t MinAlignment;
  	UProperty* PropertyLink;
  	UProperty* RefLink;
  	UProperty* DestructorLink;
  	UProperty* PostConstructLink;
  	TArray<UObject*> ScriptObjectReferences;
  };
  
  class UFunction : public UStruct
  {
  public:
  	uint32_t FunctionFlags;
  	uint16_t RepOffset;
  	uint8_t NumParms;
  	uint16_t ParmsSize;
  	uint16_t ReturnValueOffset;
  	uint16_t RPCId;
  	uint16_t RPCResponseId;
  	UProperty* FirstPropertyToInit;
  	void* Func;
  };
  
  class UClass : public UStruct
  {
  public:
  	char UnknownData[0xF8];
  };
  
  class UScriptStruct : public UStruct
  {
  public:
  	char UnknownData[0x18];
  };
  
  class UNumericProperty : public UProperty
  {
  public:
  
  };
  
  class UByteProperty : public UNumericProperty
  {
  public:
  	UEnum* Enum;
  };
  
  class UUInt16Property : public UNumericProperty
  {
  public:
  
  };
  
  class UUInt32Property : public UNumericProperty
  {
  public:
  
  };
  
  class UUInt64Property : public UNumericProperty
  {
  public:
  
  };
  
  class UInt8Property : public UNumericProperty
  {
  public:
  
  };
  
  class UInt16Property : public UNumericProperty
  {
  public:
  
  };
  
  class UIntProperty : public UNumericProperty
  {
  public:
  
  };
  
  class UInt64Property : public UNumericProperty
  {
  public:
  
  };
  
  class UFloatProperty : public UNumericProperty
  {
  public:
  
  };
  
  class UDoubleProperty : public UNumericProperty
  {
  public:
  
  };
  
  class UBoolProperty : public UProperty
  {
  public:
  	uint8_t FieldSize;
  	uint8_t ByteOffset;
  	uint8_t ByteMask;
  	uint8_t FieldMask;
  };
  
  class UObjectPropertyBase : public UProperty
  {
  public:
  	UClass* PropertyClass;
  };
  
  class UObjectProperty : public UObjectPropertyBase
  {
  public:
  
  };
  
  class UClassProperty : public UObjectProperty
  {
  public:
  	UClass* MetaClass;
  };
  
  class UInterfaceProperty : public UProperty
  {
  public:
  	UClass* InterfaceClass;
  };
  
  class UWeakObjectProperty : public UObjectPropertyBase
  {
  public:
  
  };
  
  class ULazyObjectProperty : public UObjectPropertyBase
  {
  public:
  
  };
  
  class UAssetObjectProperty : public UObjectPropertyBase
  {
  public:
  
  };
  
  class UAssetClassProperty : public UAssetObjectProperty
  {
  public:
  	UClass* MetaClass;
  };
  
  class UNameProperty : public UProperty
  {
  public:
  
  };
  
  class UStructProperty : public UProperty
  {
  public:
  	UScriptStruct* Struct;
  };
  
  class UStrProperty : public UProperty
  {
  public:
  
  };
  
  class UTextProperty : public UProperty
  {
  public:
  
  };
  
  class UArrayProperty : public UProperty
  {
  public:
  	UProperty* Inner;
  };
  
  class UMapProperty : public UProperty
  {
  public:
  	UProperty* KeyProp;
  	UProperty* ValueProp;
  };
  
  class UDelegateProperty : public UProperty
  {
  public:
  	UFunction* SignatureFunction;
  };
  
  class UMulticastDelegateProperty : public UProperty
  {
  public:
  	UFunction* SignatureFunction;
  };
  
  class UEnumProperty : public UProperty
  {
  public:
  	UNumericProperty* UnderlyingProp;
  	UEnum* Enum;
  };