public static void SortAndCreatePkgs()
        {
            Dictionary <int, List <Game> > dic = new Dictionary <int, List <Game> >();

            foreach (string location in Directory.GetDirectories(INPUT_LOCATION))
            {
                Game g = new GameFolder(location, ref dic);
                g.FindId();
            }

            foreach (string location in Directory.GetFiles(RAP_LOCATION))
            {
                Game g = new GameRap(location, ref dic);
                g.FindId();
            }

            foreach (KeyValuePair <int, List <Game> > v in dic)
            {
                DirectoryInfo di = Sorter.DRY_RUN? new DirectoryInfo(OUTPUT_LOCATION + "\\" + v.Key) : Directory.CreateDirectory(OUTPUT_LOCATION + "\\" + v.Key);
                foreach (Game g in v.Value)
                {
                    g.CopyTo(di.FullName + '\\' + g.Name);
                }
            }


            foreach (KeyValuePair <int, List <Game> > v in dic)
            {
                v.Value.ForEach((Game g) => g.WaitForCopy());
            }


            foreach (KeyValuePair <int, List <Game> > v in dic)
            {
                foreach (Game g in v.Value)
                {
                    if (g is GameFolder gf)
                    {
                        gf.EnsureFolderStructureIsCorrect();
                        gf.CreatePackages();
                    }
                }
            }

            foreach (KeyValuePair <int, List <Game> > v in dic)
            {
                foreach (Game g in v.Value)
                {
                    GameFolder gf = g as GameFolder;
                    gf?.WaitForPkgGen();
                    gf?.DeletePkgMaker();
                }
            }

            foreach (KeyValuePair <int, List <Game> > v in dic)
            {
                List <GameRap>          raps  = new List <GameRap>();
                LinkedList <GameFolder> games = new LinkedList <GameFolder>();
                foreach (Game g in v.Value)
                {
                    if (g is GameFolder gf)
                    {
                        games.AddLast(gf);
                    }
                    else if (g is GameRap gr)
                    {
                        raps.Add(gr);
                    }
                }

                foreach (GameFolder gf in games)
                {
                    gf.FormatPackages(raps);
                    gf.OutputPkg();
                }
            }
        }
        public void FormatPackages(IList <GameRap> raps)
        {
            string[] pkgs = Directory.GetFiles(CopyFolder, "*.pkg");

            if (pkgs.Length == 2)
            {
                string pkgFile = "";
                switch (gt)
                {
                case GameType.Game:
                    if (Directory.Exists(CopyFolder + '\\' + "BLUS" + id_) && !Sorter.DRY_RUN)
                    {
                        Directory.Delete(CopyFolder + '\\' + "BLUS" + id_);
                    }
                    pkgFile = pkgs.FirstOrDefault(x => x.Contains("PATCH"));
                    if (pkgFile != null && File.Exists(pkgFile) && !Sorter.DRY_RUN)
                    {
                        File.Delete(pkgFile);
                    }
                    pkgFile = pkgs.FirstOrDefault(x => x.Contains("GAME"));
                    GameRap rap = null;
                    if (raps.Count > 1)
                    {
                        while (rap == null)
                        {
                            Log.Instance.LogLine("Please Select Correct rap");
                            for (int i = 0; i < raps.Count; i++)
                            {
                                Log.Instance.LogLine(i + ":" + raps[i].Name);
                            }

                            if (!int.TryParse(Console.ReadLine(), out int result))
                            {
                                continue;
                            }

                            if (result >= 0 && result < raps.Count)
                            {
                                rap = raps[result];
                            }
                        }
                    }
                    else if (raps.Count == 1)
                    {
                        rap = raps.First();
                    }

                    if (rap != null && pkgFile != null && !Sorter.DRY_RUN)
                    {
                        File.Move(pkgFile, CopyFolder + "\\" + rap.Name + ".pkg");
                    }
                    else if (rap == null)
                    {
                        Log.Instance.LogLine("No Rap File Included for " + CopyFolder);
                    }

                    break;

                case GameType.Patch:
                    if (Directory.Exists(CopyFolder + '\\' + "NPUB" + id_) && !Sorter.DRY_RUN)
                    {
                        Directory.Delete(CopyFolder + '\\' + "NPUB" + id_);
                    }
                    pkgFile = pkgs.FirstOrDefault(x => x.Contains("GAME"));
                    if (pkgFile != null && File.Exists(pkgFile) && !Sorter.DRY_RUN)
                    {
                        File.Delete(pkgFile);
                    }
                    break;

                case GameType.None:
                    break;
                }
            }
            else
            {
                Log.Instance.LogLine("There was an issue generating pkgs for " + CopyFolder);
            }
        }