public OnlineSubsystemIOS(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
        PrivateIncludePaths.AddRange(
            new string[] {
            "Private",
        });

        PublicIncludePaths.AddRange(
            new string[] {
            "Runtime/IOS/IOSPlatformFeatures/Public"
        });

        PublicDefinitions.Add("ONLINESUBSYSTEMIOS_PACKAGE=1");

        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "CoreUObject",
            "Engine",
            "Sockets",
            "OnlineSubsystem",
            "Http",
            "IOSPlatformFeatures",
        }
            );

        PublicWeakFrameworks.Add("Cloudkit");
        if (Target.Platform == UnrealTargetPlatform.IOS)
        {
            PublicWeakFrameworks.Add("MultipeerConnectivity");
        }
    }
    public MetalRHI(ReadOnlyTargetRules Target) : base(Target)
    {
        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "ApplicationCore",
            "Engine",
            "RHI",
            "RenderCore",
        }
            );

        AddEngineThirdPartyPrivateStaticDependencies(Target,
                                                     "MTLPP"
                                                     );

        PublicWeakFrameworks.Add("Metal");

        if (Target.Platform == UnrealTargetPlatform.Mac)
        {
            PublicFrameworks.Add("QuartzCore");
        }

        var  StatsModule = "../Plugins/NotForLicensees/MetalStatistics/MetalStatistics.uplugin";
        bool bMetalStats = System.IO.File.Exists(StatsModule);

        if (bMetalStats && Target.Configuration != UnrealTargetConfiguration.Shipping)
        {
            PublicDefinitions.Add("METAL_STATISTICS=1");
            WhitelistRestrictedFolders.Add("Public/NotForLicensees");
        }
    }
Exemplo n.º 3
0
    public OnlineSubsystemIOS(TargetInfo Target)
    {
        PrivateIncludePaths.AddRange(
            new string[] {
            "Private",
        }
            );

        Definitions.Add("ONLINESUBSYSTEMIOS_PACKAGE=1");

        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "CoreUObject",
            "Engine",
            "Sockets",
            "OnlineSubsystem",
            "Http",
        }
            );

        PublicWeakFrameworks.Add("Cloudkit");
        if (Target.Platform == UnrealTargetPlatform.IOS)
        {
            PublicWeakFrameworks.Add("MultipeerConnectivity");
        }
    }
    public OnlineSubsystemApple(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;

        if (Target.Platform == UnrealTargetPlatform.IOS || Target.Platform == UnrealTargetPlatform.TVOS)
        {
            ConfigHierarchy PlatformGameConfig = ConfigCache.ReadHierarchy(ConfigHierarchyType.Engine, DirectoryReference.FromFile(Target.ProjectFile), UnrealTargetPlatform.IOS);
            PlatformGameConfig.GetBool("/Script/IOSRuntimeSettings.IOSRuntimeSettings", "bEnableSignInWithAppleSupport", out bSignInWithAppleSupported);
        }
        else if (Target.Platform == UnrealTargetPlatform.Mac)
        {
            // TODO: Mark.Fitt enable Mac support
        }

        PrivateIncludePaths.Add("Private");

        PublicDefinitions.Add("ONLINESUBSYSTEMAPPLE_PACKAGE=1");
        PublicDefinitions.Add("ONLINESUBSYSTEMAPPLE_IDENTITY_ENABLE_SIWA=" + (bSignInWithAppleSupported ? "1" : "0"));

        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "CoreUObject",
            "Engine",
            "OnlineSubsystem",
        });

        if (Target.Platform == UnrealTargetPlatform.Mac || Target.Platform == UnrealTargetPlatform.IOS || Target.Platform == UnrealTargetPlatform.TVOS)
        {
            if (bSignInWithAppleSupported)
            {
                PublicWeakFrameworks.Add("AuthenticationServices");
            }
        }
    }
Exemplo n.º 5
0
    public MetalRHI(TargetInfo Target)
    {
        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "Engine",
            "RHI",
            "RenderCore",
            "ShaderCore"
        }
            );

        PublicWeakFrameworks.Add("Metal");
    }
Exemplo n.º 6
0
    public MetalRHI(ReadOnlyTargetRules Target) : base(Target)
    {
        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "ApplicationCore",
            "Engine",
            "RHI",
            "RenderCore",
            "ShaderCore",
            "UtilityShaders"
        }
            );

        AddEngineThirdPartyPrivateStaticDependencies(Target,
                                                     "MTLPP"
                                                     );

        PublicWeakFrameworks.Add("Metal");

        if (Target.Platform == UnrealTargetPlatform.Mac)
        {
            PublicFrameworks.Add("QuartzCore");

            string UseMetalStats = System.Environment.GetEnvironmentVariable("ENABLE_METAL_STATISTICS");
            var    StatsModule   = System.IO.Path.Combine("Runtime", "NotForLicensees", "Mac", "MetalStatistics", "MetalStatistics.Build.cs");
            bool   bMetalStats   = (UseMetalStats == "1") && System.IO.File.Exists(StatsModule);

            if (bMetalStats)
            {
                PublicDefinitions.Add("METAL_STATISTICS=1");

                PrivateIncludePathModuleNames.AddRange(
                    new string[] {
                    "MetalStatistics",
                }
                    );

                DynamicallyLoadedModuleNames.AddRange(
                    new string[] {
                    "MetalStatistics",
                }
                    );
            }
        }
    }
Exemplo n.º 7
0
    public MetalRHI(TargetInfo Target)
    {
        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "Engine",
            "RHI",
            "RenderCore",
            "ShaderCore",
            "UtilityShaders"
        }
            );

        PublicWeakFrameworks.Add("Metal");

        if (Target.Platform == UnrealTargetPlatform.Mac)
        {
            PublicFrameworks.Add("QuartzCore");

            bool bMetalStats = false;

            if (bMetalStats)
            {
                Definitions.Add("METAL_STATISTICS=1");

                PrivateIncludePathModuleNames.AddRange(
                    new string[] {
                    "MetalStatistics",
                }
                    );

                DynamicallyLoadedModuleNames.AddRange(
                    new string[] {
                    "MetalStatistics",
                }
                    );
            }
        }
    }
Exemplo n.º 8
0
    public MetalRHI(ReadOnlyTargetRules Target) : base(Target)
    {
        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "ApplicationCore",
            "Engine",
            "RHI",
            "RenderCore",
        }
            );

        AddEngineThirdPartyPrivateStaticDependencies(Target,
                                                     "MTLPP"
                                                     );

        PublicWeakFrameworks.Add("Metal");

        if (Target.Platform == UnrealTargetPlatform.Mac)
        {
            PublicFrameworks.Add("QuartzCore");
        }
    }
Exemplo n.º 9
0
    public Launch(ReadOnlyTargetRules Target) : base(Target)
    {
        PrivateIncludePaths.Add("Runtime/Launch/Private");

        PrivateIncludePathModuleNames.AddRange(
            new string[] {
            "AutomationController",
            "Media",
            "MediaUtils",
            "TaskGraph",
        }
            );

        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "CoreUObject",
            "Engine",
            "InputCore",
            "MoviePlayer",
            "Networking",
            "PakFile",
            "Projects",
            "RenderCore",
            "RHI",
            "SandboxFile",
            "Serialization",
            "ShaderCore",
            "ApplicationCore",
            "Slate",
            "SlateCore",
            "Sockets",
            "Overlay",
            "UtilityShaders",
        }
            );

        // Enable the LauncherCheck module to be used for platforms that support the Launcher.
        // Projects should set Target.bUseLauncherChecks in their Target.cs to enable the functionality.
        if (Target.bUseLauncherChecks &&
            ((Target.Platform == UnrealTargetPlatform.Win32) ||
             (Target.Platform == UnrealTargetPlatform.Win64) ||
             (Target.Platform == UnrealTargetPlatform.Mac)))
        {
            PrivateDependencyModuleNames.Add("LauncherCheck");
            Definitions.Add("WITH_LAUNCHERCHECK=1");
        }
        else
        {
            Definitions.Add("WITH_LAUNCHERCHECK=0");
        }

        if (Target.Type != TargetType.Server)
        {
            PrivateDependencyModuleNames.AddRange(
                new string[] {
                "HeadMountedDisplay",
                "MRMesh",
            }
                );

            if ((Target.Platform == UnrealTargetPlatform.Win32) ||
                (Target.Platform == UnrealTargetPlatform.Win64))
            {
                DynamicallyLoadedModuleNames.Add("D3D12RHI");
                DynamicallyLoadedModuleNames.Add("D3D11RHI");
                DynamicallyLoadedModuleNames.Add("XAudio2");
                DynamicallyLoadedModuleNames.Add("AudioMixerXAudio2");
            }
            else if (Target.Platform == UnrealTargetPlatform.Mac)
            {
                DynamicallyLoadedModuleNames.Add("CoreAudio");
                DynamicallyLoadedModuleNames.Add("AudioMixerAudioUnit");
            }
            else if (Target.Platform == UnrealTargetPlatform.Linux)
            {
                DynamicallyLoadedModuleNames.Add("AudioMixerSDL");
                PrivateDependencyModuleNames.Add("Json");
            }

            PrivateIncludePathModuleNames.AddRange(
                new string[] {
                "SlateNullRenderer",
                "SlateRHIRenderer"
            }
                );

            DynamicallyLoadedModuleNames.AddRange(
                new string[] {
                "SlateNullRenderer",
                "SlateRHIRenderer"
            }
                );
        }

        // UFS clients are not available in shipping builds
        if (Target.Configuration != UnrealTargetConfiguration.Shipping)
        {
            PrivateDependencyModuleNames.AddRange(
                new string[] {
                "NetworkFile",
                "StreamingFile",
                "CookedIterativeFile",
                "AutomationWorker",
            }
                );
        }

        DynamicallyLoadedModuleNames.AddRange(
            new string[] {
            "Media",
            "Renderer",
        }
            );

        if (Target.bCompileAgainstEngine)
        {
            PrivateIncludePathModuleNames.AddRange(
                new string[] {
                "MessagingCommon",
                "MediaAssets"
            }
                );

            PublicDependencyModuleNames.Add("SessionServices");
            PrivateIncludePaths.Add("Developer/DerivedDataCache/Public");

            // LaunchEngineLoop.cpp will still attempt to load XMPP but not all projects require it so it will silently fail unless referenced by the project's build.cs file.
            // DynamicallyLoadedModuleNames.Add("XMPP");
            DynamicallyLoadedModuleNames.Add("HTTP");

            PrivateDependencyModuleNames.Add("ClothingSystemRuntimeInterface");
            PrivateDependencyModuleNames.Add("ClothingSystemRuntime");
        }

        if (Target.Configuration != UnrealTargetConfiguration.Shipping)
        {
            PublicIncludePathModuleNames.Add("ProfilerService");
            DynamicallyLoadedModuleNames.AddRange(new string[] { "TaskGraph", "RealtimeProfiler", "ProfilerService" });
        }

        // The engine can use AutomationController in any connfiguration besides shipping.  This module is loaded
        // dynamically in LaunchEngineLoop.cpp in non-shipping configurations
        if (Target.bCompileAgainstEngine && Target.Configuration != UnrealTargetConfiguration.Shipping)
        {
            DynamicallyLoadedModuleNames.AddRange(new string[] { "AutomationController" });
        }

        if (Target.bBuildEditor == true)
        {
            PublicIncludePathModuleNames.Add("ProfilerClient");

            PrivateDependencyModuleNames.AddRange(
                new string[] {
                "SourceControl",
                "UnrealEd",
                "DesktopPlatform",
                "PIEPreviewDeviceProfileSelector",
            }
                );


            // ExtraModules that are loaded when WITH_EDITOR=1 is true
            DynamicallyLoadedModuleNames.AddRange(
                new string[] {
                "AutomationWindow",
                "ProfilerClient",
                "Toolbox",
                "GammaUI",
                "ModuleUI",
                "OutputLog",
                "TextureCompressor",
                "MeshUtilities",
                "SourceCodeAccess"
            }
                );

            if (Target.Platform == UnrealTargetPlatform.Mac)
            {
                PrivateDependencyModuleNames.Add("MainFrame");
                PrivateDependencyModuleNames.Add("Settings");
            }
            else
            {
                DynamicallyLoadedModuleNames.Add("MainFrame");
            }
        }

        if (Target.Platform == UnrealTargetPlatform.IOS ||
            Target.Platform == UnrealTargetPlatform.TVOS)
        {
            PrivateDependencyModuleNames.Add("OpenGLDrv");
            PrivateDependencyModuleNames.Add("IOSAudio");
            PrivateDependencyModuleNames.Add("AudioMixerAudioUnit");
            DynamicallyLoadedModuleNames.Add("IOSRuntimeSettings");
            DynamicallyLoadedModuleNames.Add("IOSLocalNotification");
            PublicFrameworks.Add("OpenGLES");
            // this is weak for IOS8 support for CAMetalLayer that is in QuartzCore
            PublicWeakFrameworks.Add("QuartzCore");

            PrivateDependencyModuleNames.Add("LaunchDaemonMessages");
        }

        if (Target.Platform == UnrealTargetPlatform.Android)
        {
            PrivateDependencyModuleNames.Add("OpenGLDrv");
            PrivateDependencyModuleNames.Add("AndroidAudio");
            PrivateDependencyModuleNames.Add("AudioMixerAndroid");
            DynamicallyLoadedModuleNames.Add("AndroidRuntimeSettings");
            DynamicallyLoadedModuleNames.Add("AndroidLocalNotification");
        }

        if ((Target.Platform == UnrealTargetPlatform.Win32) ||
            (Target.Platform == UnrealTargetPlatform.Win64) ||
            (Target.Platform == UnrealTargetPlatform.Linux && Target.Type != TargetType.Server))
        {
            // TODO: re-enable after implementing resource tables for OpenGL.
            DynamicallyLoadedModuleNames.Add("OpenGLDrv");
        }

        if (Target.Platform == UnrealTargetPlatform.HTML5)
        {
            PrivateDependencyModuleNames.Add("ALAudio");
            PrivateDependencyModuleNames.Add("AudioMixerSDL");
            AddEngineThirdPartyPrivateStaticDependencies(Target, "SDL2");
        }

        // @todo ps4 clang bug: this works around a PS4/clang compiler bug (optimizations)
        if (Target.Platform == UnrealTargetPlatform.PS4)
        {
            bFasterWithoutUnity = true;
        }

        if (Target.Platform == UnrealTargetPlatform.Linux)
        {
            PrivateDependencyModuleNames.AddRange(
                new string[] {
                "LinuxCommonStartup"
            }
                );
        }
    }
        public CafeSDKPlugin(ReadOnlyTargetRules Target) : base(Target)
        {
            PublicIncludePaths.AddRange(
                new string[] {
                "CafeSDKPlugin/Public"
                // ... add public include paths required here ...
            }
                );

            PrivateIncludePaths.AddRange(
                new string[] {
                "CafeSDKPlugin/Private"
                // ... add other private include paths required here ...
            }
                );

            PublicDependencyModuleNames.AddRange(
                new string[] {
                "Engine",
                "Core",
                "CoreUObject",
                "Slate",
                "SlateCore",
                "UMG"
            }
                );

            PrivateDependencyModuleNames.AddRange(
                new string[] {
                // ... add private dependencies that you statically link with here ...
            }
                );

            DynamicallyLoadedModuleNames.AddRange(
                new string[] {
                // ... add any modules that your module loads dynamically here ...
            }
                );

            if (Target.Platform == UnrealTargetPlatform.IOS)
            {
                // Add framework
                PublicAdditionalFrameworks.Add(
                    new UEBuildFramework(
                        "NaverCafeSDK",
                        "../../ThirdPartyFrameworks/iOS/NaverCafeSDK.embeddedframework.zip",
                        "Resources/NaverCafeSDK.bundle"
                        )
                    );
                PublicAdditionalFrameworks.Add(
                    new UEBuildFramework(
                        "NaverLogin",
                        "../../ThirdPartyFrameworks/iOS/NaverLogin.embeddedframework.zip",
                        "Resources/NaverAuth.bundle"
                        )
                    );
                PublicAdditionalFrameworks.Add(
                    new UEBuildFramework(
                        "AFNetworking",
                        "../../ThirdPartyFrameworks/iOS/AFNetworking.embeddedframework.zip"
                        )
                    );
                PublicAdditionalFrameworks.Add(
                    new UEBuildFramework(
                        "SDWebImage",
                        "../../ThirdPartyFrameworks/iOS/SDWebImage.embeddedframework.zip"
                        )
                    );
                PublicAdditionalFrameworks.Add(
                    new UEBuildFramework(
                        "FLAnimatedImage",
                        "../../ThirdPartyFrameworks/iOS/FLAnimatedImage.embeddedframework.zip"
                        )
                    );
                PublicAdditionalFrameworks.Add(
                    new UEBuildFramework(
                        "ApiGateway",
                        "../../ThirdPartyFrameworks/iOS/ApiGateway.embeddedframework.zip"
                        )
                    );
                PublicAdditionalFrameworks.Add(
                    new UEBuildFramework(
                        "KaleidoCore",
                        "../../ThirdPartyFrameworks/iOS/KaleidoCore.embeddedframework.zip",
                        "Resources/KaleidoCore.framework"
                        )
                    );
                PublicAdditionalFrameworks.Add(
                    new UEBuildFramework(
                        "NaverCafeSDKLive",
                        "../../ThirdPartyFrameworks/iOS/NaverCafeSDKLive.embeddedframework.zip"
                        )
                    );
                bEnableObjCExceptions = false;
                PublicFrameworks.AddRange(
                    new string[] {
                    "UIKit",
                    "Foundation",
                    "MediaPlayer",
                    "SystemConfiguration",
                    "Security",
                    "MobileCoreServices",
                    "GameKit",
                    "AssetsLibrary",
                    "WebKit",
                    "ReplayKit"
                }
                    );
                PublicWeakFrameworks.Add("ReplayKit");
            }
        }
Exemplo n.º 11
0
    public Launch(TargetInfo Target)
    {
        PrivateIncludePaths.Add("Runtime/Launch/Private");

        PrivateIncludePathModuleNames.AddRange(
            new string[] {
            "AutomationController",
            "OnlineSubsystem",
            "TaskGraph",
        }
            );

        PrivateDependencyModuleNames.AddRange(
            new string[] {
            "Core",
            "CoreUObject",
            "Engine",
            "InputCore",
            "Media",
            "MediaAssets",
            "MoviePlayer",
            "Networking",
            "PakFile",
            "Projects",
            "RenderCore",
            "RHI",
            "SandboxFile",
            "ShaderCore",
            "Slate",
            "SlateCore",
            "Sockets",
        }
            );

        if (Target.Type != TargetRules.TargetType.Server)
        {
            PrivateDependencyModuleNames.AddRange(
                new string[] {
                "HeadMountedDisplay",
            }
                );

            if (Target.Platform == UnrealTargetPlatform.Linux)
            {
                PrivateDependencyModuleNames.Add("ALAudio");
            }

            PrivateIncludePathModuleNames.AddRange(
                new string[] {
                "SlateRHIRenderer",
            }
                );

            DynamicallyLoadedModuleNames.AddRange(
                new string[] {
                "SlateRHIRenderer",
                "HeadMountedDisplay"
            }
                );
        }

        // UFS clients are not available in shipping builds
        if (Target.Configuration != UnrealTargetConfiguration.Shipping)
        {
            PrivateDependencyModuleNames.AddRange(
                new string[] {
                "NetworkFile",
                "StreamingFile",
                "AutomationWorker",
            }
                );
        }

        DynamicallyLoadedModuleNames.AddRange(
            new string[] {
            "Renderer",
        }
            );

        if (UEBuildConfiguration.bCompileAgainstEngine)
        {
            PrivateIncludePathModuleNames.Add("Messaging");
            PublicDependencyModuleNames.Add("SessionServices");
            PrivateIncludePaths.Add("Developer/DerivedDataCache/Public");

            // LaunchEngineLoop.cpp does a LoadModule() on OnlineSubsystem and OnlineSubsystemUtils when compiled WITH_ENGINE, so they must be marked as dependencies so that they get compiled and cleaned
            DynamicallyLoadedModuleNames.Add("OnlineSubsystem");
            DynamicallyLoadedModuleNames.Add("OnlineSubsystemUtils");
        }

        if (Target.Configuration != UnrealTargetConfiguration.Shipping)
        {
            PublicIncludePathModuleNames.Add("ProfilerService");
            DynamicallyLoadedModuleNames.AddRange(new string[] { "TaskGraph", "RealtimeProfiler", "ProfilerService" });
        }

        if (UEBuildConfiguration.bBuildEditor == true)
        {
            PublicIncludePathModuleNames.Add("ProfilerClient");

            PrivateDependencyModuleNames.AddRange(
                new string[] {
                "SourceControl",
                "UnrealEd",
                "DesktopPlatform"
            }
                );


            // ExtraModules that are loaded when WITH_EDITOR=1 is true
            DynamicallyLoadedModuleNames.AddRange(
                new string[] {
                "AutomationController",
                "AutomationWorker",
                "AutomationWindow",
                "ProfilerClient",
                "Toolbox",
                "GammaUI",
                "ModuleUI",
                "OutputLog",
                "TextureCompressor",
                "MeshUtilities",
                "SourceCodeAccess"
            }
                );

            if (Target.Platform == UnrealTargetPlatform.Mac)
            {
                PrivateDependencyModuleNames.Add("MainFrame");
                PrivateDependencyModuleNames.Add("Settings");
            }
            else
            {
                DynamicallyLoadedModuleNames.Add("MainFrame");
            }
        }

        if ((Target.Platform == UnrealTargetPlatform.Win32) ||
            (Target.Platform == UnrealTargetPlatform.Win64))
        {
            DynamicallyLoadedModuleNames.Add("D3D11RHI");
            DynamicallyLoadedModuleNames.Add("XAudio2");
        }

        if (Target.Platform == UnrealTargetPlatform.Mac)
        {
            DynamicallyLoadedModuleNames.Add("CoreAudio");
        }

        if (Target.Platform == UnrealTargetPlatform.IOS)
        {
            PrivateDependencyModuleNames.Add("OpenGLDrv");
            DynamicallyLoadedModuleNames.Add("IOSAudio");
            DynamicallyLoadedModuleNames.Add("IOSRuntimeSettings");
            PublicFrameworks.Add("OpenGLES");
            // this is weak for IOS8 support for CAMetalLayer that is in QuartzCore
            PublicWeakFrameworks.Add("QuartzCore");

            PrivateDependencyModuleNames.Add("LaunchDaemonMessages");
        }

        if (Target.Platform == UnrealTargetPlatform.Android)
        {
            PrivateDependencyModuleNames.Add("OpenGLDrv");
            PrivateDependencyModuleNames.Add("AndroidAudio");
            DynamicallyLoadedModuleNames.Add("AndroidRuntimeSettings");
        }

        if ((Target.Platform == UnrealTargetPlatform.Win32) ||
            (Target.Platform == UnrealTargetPlatform.Win64) ||
            (Target.Platform == UnrealTargetPlatform.Mac) ||
            (Target.Platform == UnrealTargetPlatform.Linux && Target.Type != TargetRules.TargetType.Server))
        {
            // TODO: re-enable after implementing resource tables for OpenGL.
            DynamicallyLoadedModuleNames.Add("OpenGLDrv");
        }

        if (Target.Platform == UnrealTargetPlatform.HTML5)
        {
            PrivateDependencyModuleNames.Add("HTML5Audio");
            if (Target.Architecture == "-win32")
            {
                PrivateDependencyModuleNames.Add("HTML5Win32");
                PublicIncludePathModuleNames.Add("HTML5Win32");
                AddThirdPartyPrivateStaticDependencies(Target, "SDL");
            }
        }


        // @todo ps4 clang bug: this works around a PS4/clang compiler bug (optimizations)
        if (Target.Platform == UnrealTargetPlatform.PS4)
        {
            bFasterWithoutUnity = true;
        }
    }