protected override void Deserialize()
        {
            base.Deserialize();

            if (Package.Version <= 61)
            {
                var oldClassRecordSize = _Buffer.ReadInt32();
                Record("oldClassRecordSize", oldClassRecordSize);
            }

#if BIOSHOCK
            if (Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock)
            {
                var unknown = _Buffer.ReadInt32();
                Record("???Bioshock_Int32", unknown);
            }
#endif

            ClassFlags = _Buffer.ReadUInt32();
            Record("ClassFlags", (ClassFlags)ClassFlags);

            // Both were deprecated since then
            // TODO: Corrigate Version
            if (Package.Version < 140)
            {
                ClassGuid = _Buffer.ReadGuid();
                Record("ClassGuid", ClassGuid);

                // Use ReadCount because Vanguard does no longer uses indexes but an int32 for arrays.
                var depSize = ReadCount();
                Record("DepSize", depSize);
                if (depSize > 0)
                {
                    ClassDependencies = new UArray <Dependency>(_Buffer, depSize);
                    Record("ClassDependencies", ClassDependencies);
                }

                PackageImports = DeserializeGroup("PackageImports");
            }

            if (Package.Version >= 62)
            {
                // TODO: Corrigate Version
                // At least since Bioshock(140) - 547(APB)
                if (Package.Version >= 140 && Package.Version < 547)
                {
                    var unknown = _Buffer.ReadByte();
                    Record("???", unknown);
                }

                // Class Name Extends Super.Name Within _WithinIndex
                //      Config(_ConfigIndex);
                Within = _Buffer.ReadObject() as UClass;
                Record("Within", Within);
                ConfigName = _Buffer.ReadNameReference();
                Record("ConfigName", ConfigName);

                const int vHideCategoriesOldOrder  = 539;
                var       isHideCategoriesOldOrder = Package.Version <= vHideCategoriesOldOrder
#if TERA
                                                     || Package.Build == UnrealPackage.GameBuild.BuildName.Tera
#endif
                ;

                // TODO: Corrigate Version
                if (Package.Version >= 100)
                {
                    // TODO: Corrigate Version
                    if (Package.Version >= 220)
                    {
                        // TODO: Corrigate Version
                        if ((isHideCategoriesOldOrder && !Package.IsConsoleCooked() && !Package.Build.IsXenonCompressed)
                            #if TRANSFORMERS
                            || Package.Build == UnrealPackage.GameBuild.BuildName.Transformers
                            #endif
                            )
                        {
                            DeserializeHideCategories();
                        }

                        DeserializeComponentsMap();

                        // RoboBlitz(369)
                        // TODO: Corrigate Version
                        if (Package.Version >= 369)
                        {
                            DeserializeInterfaces();
                        }
                    }

                    if (!Package.IsConsoleCooked() && !Package.Build.IsXenonCompressed)
                    {
                        if (Package.Version >= 603
 #if TERA
                            && Package.Build != UnrealPackage.GameBuild.BuildName.Tera
#endif
                            )
                        {
                            DontSortCategories = DeserializeGroup("DontSortCategories");
                        }

                        // TODO: Corrigate Version
                        if (Package.Version < 220 || !isHideCategoriesOldOrder)
                        {
                            DeserializeHideCategories();
                        }

                        // TODO: Corrigate Version
                        if (Package.Version >= 185)
                        {
                            // 490:GoW1, 576:CrimeCraft
                            if ((!HasClassFlag(Flags.ClassFlags.CollapseCategories)) ||
                                Package.Version <= vHideCategoriesOldOrder || Package.Version >= 576)
                            {
                                AutoExpandCategories = DeserializeGroup("AutoExpandCategories");
                            }

                            if (Package.Version > 670)
                            {
                                AutoCollapseCategories = DeserializeGroup("AutoCollapseCategories");

                                if (Package.Version >= 749
                                    #if SPECIALFORCE2
                                    && Package.Build != UnrealPackage.GameBuild.BuildName.SpecialForce2
                                    #endif
                                    )
                                {
                                    // bForceScriptOrder
                                    ForceScriptOrder = _Buffer.ReadInt32() > 0;
                                    Record("ForceScriptOrder", ForceScriptOrder);

#if DISHONORED
                                    if (Package.Build == UnrealPackage.GameBuild.BuildName.Dishonored)
                                    {
                                        var unk = _Buffer.ReadNameIndex();
                                        Record("??DISHONORED_NameIndex", Package.Names[unk]);
                                    }
#endif

                                    if (Package.Version >= UnrealPackage.VCLASSGROUP)
                                    {
#if DISHONORED
                                        if (Package.Build == UnrealPackage.GameBuild.BuildName.Dishonored)
                                        {
                                            NativeClassName = _Buffer.ReadText();
                                            Record("NativeClassName", NativeClassName);
                                            goto skipClassGroups;
                                        }
#endif
                                        ClassGroups = DeserializeGroup("ClassGroups");
                                        if (Package.Version >= 813)
                                        {
                                            NativeClassName = _Buffer.ReadText();
                                            Record("NativeClassName", NativeClassName);
                                        }
                                    }
#if DISHONORED
                                    skipClassGroups :;
#endif
                                }
                            }

                            // FIXME: Found first in(V:655), Definitely not in APB and GoW 2
                            // TODO: Corrigate Version
                            if (Package.Version > 575 && Package.Version < 674
#if TERA
                                && Package.Build != UnrealPackage.GameBuild.BuildName.Tera
#endif
                                )
                            {
                                int unk2 = _Buffer.ReadInt32();
                                Record("??Int32", unk2);

                                #if SINGULARITY
                                if (Package.Build == UnrealPackage.GameBuild.BuildName.Singularity)
                                {
                                    _Buffer.Skip(8);
                                }
                                #endif
                            }
                        }
                    }

                    if (Package.Version >= UnrealPackage.VDLLBIND)
                    {
                        DLLBindName = _Buffer.ReadNameReference();
                        Record("DLLBindName", DLLBindName);
#if REMEMBERME
                        if (Package.Build == UnrealPackage.GameBuild.BuildName.RememberMe)
                        {
                            var unknownName = _Buffer.ReadNameReference();
                            Record("??RM_Name", unknownName);
                        }
#endif
#if DISHONORED
                        if (Package.Build == UnrealPackage.GameBuild.BuildName.Dishonored)
                        {
                            ClassGroups = DeserializeGroup("ClassGroups");
                        }
#endif
#if BORDERLANDS2
                        if (Package.Build == UnrealPackage.GameBuild.BuildName.Borderlands2)
                        {
                            var unkval = _Buffer.ReadByte();
                            Record("??BL2_Byte", unkval);
                        }
#endif
                    }
                }
            }

            // In later UE3 builds, defaultproperties are stored in separated objects named DEFAULT_namehere,
            // TODO: Corrigate Version
            if (Package.Version >= 322)
            {
                Default = _Buffer.ReadObject();
                Record("Default", Default);
            }
            else
            {
#if SWAT4
                if (Package.Build == UnrealPackage.GameBuild.BuildName.Swat4)
                {
                    // We are done here!
                    return;
                }
#endif
                DeserializeProperties();
            }
        }
 protected override void Deserialize()
 {
     base.Deserialize();
     MetaObjects = new UArray <UFieldData>();
     MetaObjects.Deserialize(_Buffer);
 }