using System.Collections.Generic;
using System.IO;
using SabreTools.Hashing;
using SabreTools.Metadata.DatFiles.Formats;
using SabreTools.Metadata.DatItems;
using SabreTools.Metadata.DatItems.Formats;
using Xunit;

namespace SabreTools.Metadata.DatFiles.Test
{
    public partial class DatFileTests
    {
        #region Constructor

        [Fact]
        public void Constructor_Null()
        {
            DatFile? datFile = null;
            DatFile created = new Logiqx(datFile, useGame: false);

            Assert.NotNull(created.Header);
            Assert.NotNull(created.Items);
            Assert.Equal(0, created.Items.DatStatistics.TotalCount);
            Assert.NotNull(created.ItemsDB);
            Assert.Equal(0, created.ItemsDB.DatStatistics.TotalCount);
        }

        [Fact]
        public void Constructor_NonNull()
        {
            Source source = new Source(0, source: null);

            Machine machine = new Machine { Name = "key" };

            DatItem rom = new Rom
            {
                Name = "rom",
                CRC32 = "deadbeef",
                Source = source,
                Machine = machine
            };

            DatFile? datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = "name";
            datFile.AddItem(rom, statsOnly: false);

            long sourceIndex = datFile.AddSourceDB(source);
            rom.SourceIndex = sourceIndex;
            long machineIndex = datFile.AddMachineDB(machine);
            rom.MachineIndex = machineIndex;

            datFile.AddItemDB(rom, statsOnly: false);

            DatFile created = new Logiqx(datFile, useGame: false);
            created.BucketBy(ItemKey.Machine);

            Assert.NotNull(created.Header);
            Assert.Equal("name", created.Header.Name);

            Assert.NotNull(created.Items);
            DatItem datItem = Assert.Single(created.GetItemsForBucket("key"));
            Assert.True(datItem is Rom);

            Assert.NotNull(created.ItemsDB);
            KeyValuePair<long, DatItem> dbKvp = Assert.Single(created.GetItemsForBucketDB("key"));
            Assert.Equal(0, dbKvp.Key);
            Assert.True(dbKvp.Value is Rom);
        }

        #endregion

        #region ClearEmpty

        [Fact]
        public void ClearEmpty_Items()
        {
            Source source = new Source(0, source: null);

            Machine machine = new Machine { Name = "game-1" };

            DatItem datItem = new Rom
            {
                Source = source,
                Machine = machine
            };

            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.AddItem(datItem, statsOnly: false);

            datFile.ClearEmpty();
            Assert.Single(datFile.Items.SortedKeys);
        }

        [Fact]
        public void ClearEmpty_ItemsDB()
        {
            Source source = new Source(0, source: null);

            Machine machine = new Machine { Name = "game-1" };

            DatItem item = new Rom();

            DatFile datFile = new Logiqx(datFile: null, useGame: false);

            long sourceIndex = datFile.AddSourceDB(source);
            item.SourceIndex = sourceIndex;
            long machineIndex = datFile.AddMachineDB(machine);
            item.MachineIndex = machineIndex;

            _ = datFile.AddItemDB(item, statsOnly: false);

            datFile.ClearEmpty();
            Assert.Single(datFile.ItemsDB.SortedKeys);
        }

        #endregion

        #region FillHeaderFromPath

        [Fact]
        public void FillHeaderFromPath_NoNameNoDesc_NotBare()
        {
            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = string.Empty;
            datFile.Header.Description = string.Empty;
            datFile.Header.Date = "1980-01-01";

            string path = Path.Combine("Fake", "Path", "Filename");
            datFile.FillHeaderFromPath(path, false);

            Assert.Equal("Filename (1980-01-01)", datFile.Header.Name);
            Assert.Equal("Filename (1980-01-01)", datFile.Header.Description);
        }

        [Fact]
        public void FillHeaderFromPath_NoNameNoDesc_Bare()
        {
            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = string.Empty;
            datFile.Header.Description = string.Empty;
            datFile.Header.Date = "1980-01-01";

            string path = Path.Combine("Fake", "Path", "Filename");
            datFile.FillHeaderFromPath(path, true);

            Assert.Equal("Filename", datFile.Header.Name);
            Assert.Equal("Filename", datFile.Header.Description);
        }

        [Fact]
        public void FillHeaderFromPath_NoNameDesc_NotBare()
        {
            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = string.Empty;
            datFile.Header.Description = "Description";
            datFile.Header.Date = "1980-01-01";

            string path = Path.Combine("Fake", "Path", "Filename");
            datFile.FillHeaderFromPath(path, false);

            Assert.Equal("Description (1980-01-01)", datFile.Header.Name);
            Assert.Equal("Description", datFile.Header.Description);
        }

        [Fact]
        public void FillHeaderFromPath_NoNameDesc_Bare()
        {
            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = string.Empty;
            datFile.Header.Description = "Description";
            datFile.Header.Date = "1980-01-01";

            string path = Path.Combine("Fake", "Path", "Filename");
            datFile.FillHeaderFromPath(path, true);

            Assert.Equal("Description", datFile.Header.Name);
            Assert.Equal("Description", datFile.Header.Description);
        }

        [Fact]
        public void FillHeaderFromPath_NameNoDesc_NotBare()
        {
            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = "Name";
            datFile.Header.Description = string.Empty;
            datFile.Header.Date = "1980-01-01";

            string path = Path.Combine("Fake", "Path", "Filename");
            datFile.FillHeaderFromPath(path, false);

            Assert.Equal("Name", datFile.Header.Name);
            Assert.Equal("Name (1980-01-01)", datFile.Header.Description);
        }

        [Fact]
        public void FillHeaderFromPath_NameNoDesc_Bare()
        {
            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = "Name";
            datFile.Header.Description = string.Empty;
            datFile.Header.Date = "1980-01-01";

            string path = Path.Combine("Fake", "Path", "Filename");
            datFile.FillHeaderFromPath(path, true);

            Assert.Equal("Name", datFile.Header.Name);
            Assert.Equal("Name", datFile.Header.Description);
        }

        [Fact]
        public void FillHeaderFromPath_NameDesc_NotBare()
        {
            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = "Name";
            datFile.Header.Description = "Description";
            datFile.Header.Date = "1980-01-01";

            string path = Path.Combine("Fake", "Path", "Filename");
            datFile.FillHeaderFromPath(path, false);

            Assert.Equal("Name", datFile.Header.Name);
            Assert.Equal("Description", datFile.Header.Description);
        }

        [Fact]
        public void FillHeaderFromPath_NameDesc_Bare()
        {
            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = "Name ";
            datFile.Header.Description = "Description ";
            datFile.Header.Date = "1980-01-01";

            string path = Path.Combine("Fake", "Path", "Filename");
            datFile.FillHeaderFromPath(path, true);

            Assert.Equal("Name", datFile.Header.Name);
            Assert.Equal("Description", datFile.Header.Description);
        }

        #endregion

        #region SetHeader

        [Fact]
        public void SetHeaderTest()
        {
            DatHeader datHeader = new DatHeader { Name = "name" };

            DatFile? datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = "notname";

            datFile.SetHeader(datHeader);
            Assert.NotNull(datFile.Header);
            Assert.Equal("name", datFile.Header.Name);
        }

        #endregion

        #region SetModifiers

        [Fact]
        public void SetModifiersTest()
        {
            DatModifiers datModifiers = new DatModifiers
            {
                AddExtension = ".new"
            };

            DatFile? datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Modifiers.AddExtension = ".old";

            datFile.SetModifiers(datModifiers);
            Assert.NotNull(datFile.Modifiers);
            Assert.Equal(".new", datFile.Modifiers.AddExtension);
        }

        #endregion

        #region ResetDictionary

        [Fact]
        public void ResetDictionaryTest()
        {
            DatFile datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Header.Name = "name";
            datFile.AddItem(new Rom(), statsOnly: false);
            datFile.AddItemDB(new Rom(), statsOnly: false);

            datFile.ResetDictionary();

            Assert.NotNull(datFile.Header);
            Assert.NotNull(datFile.Items);
            Assert.Equal(0, datFile.Items.DatStatistics.TotalCount);
            Assert.NotNull(datFile.ItemsDB);
            Assert.Equal(0, datFile.ItemsDB.DatStatistics.TotalCount);
        }

        #endregion

        #region ProcessItemName

        [Theory]
        [InlineData(false, false, false, false, null, false, null, false, null, false, "name")]
        [InlineData(false, false, false, false, null, false, null, false, null, true, "name")]
        [InlineData(false, false, false, false, null, false, null, false, "add", false, "name")]
        [InlineData(false, false, false, false, null, false, null, false, "add", true, "name")]
        [InlineData(false, false, false, false, null, false, null, true, null, false, "name")]
        [InlineData(false, false, false, false, null, false, null, true, null, true, "name")]
        [InlineData(false, false, false, false, null, false, null, true, "add", false, "name")]
        [InlineData(false, false, false, false, null, false, null, true, "add", true, "name")]
        [InlineData(false, false, false, false, null, false, "rep", false, null, false, "name")]
        [InlineData(false, false, false, false, null, false, "rep", false, null, true, "name")]
        [InlineData(false, false, false, false, null, false, "rep", false, "add", false, "name")]
        [InlineData(false, false, false, false, null, false, "rep", false, "add", true, "name")]
        [InlineData(false, false, false, false, null, false, "rep", true, null, false, "name")]
        [InlineData(false, false, false, false, null, false, "rep", true, null, true, "name")]
        [InlineData(false, false, false, false, null, false, "rep", true, "add", false, "name")]
        [InlineData(false, false, false, false, null, false, "rep", true, "add", true, "name")]
        [InlineData(false, false, false, false, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, null, false, null, false, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, null, false, null, true, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, null, false, "add", false, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, null, false, "add", true, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, null, true, null, false, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, null, true, null, true, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, null, true, "add", false, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, null, true, "add", true, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, "rep", false, null, false, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, "rep", false, null, true, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, "rep", false, "add", false, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, "rep", false, "add", true, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, "rep", true, null, false, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, "rep", true, null, true, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, "rep", true, "add", false, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", false, "rep", true, "add", true, "name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, false, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, null, false, null, false, null, false, "name")]
        [InlineData(false, false, false, true, null, false, null, false, null, true, "machine/name")]
        [InlineData(false, false, false, true, null, false, null, false, "add", false, "nameadd")]
        [InlineData(false, false, false, true, null, false, null, false, "add", true, "machine/nameadd")]
        [InlineData(false, false, false, true, null, false, null, true, null, false, "name")]
        [InlineData(false, false, false, true, null, false, null, true, null, true, "machine/name")]
        [InlineData(false, false, false, true, null, false, null, true, "add", false, "nameadd")]
        [InlineData(false, false, false, true, null, false, null, true, "add", true, "machine/nameadd")]
        [InlineData(false, false, false, true, null, false, "rep", false, null, false, "namerep")]
        [InlineData(false, false, false, true, null, false, "rep", false, null, true, "machine/namerep")]
        [InlineData(false, false, false, true, null, false, "rep", false, "add", false, "namerepadd")]
        [InlineData(false, false, false, true, null, false, "rep", false, "add", true, "machine/namerepadd")]
        [InlineData(false, false, false, true, null, false, "rep", true, null, false, "name")]
        [InlineData(false, false, false, true, null, false, "rep", true, null, true, "machine/name")]
        [InlineData(false, false, false, true, null, false, "rep", true, "add", false, "nameadd")]
        [InlineData(false, false, false, true, null, false, "rep", true, "add", true, "machine/nameadd")]
        [InlineData(false, false, false, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, null, false, null, false, "machine_namenamemachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, null, false, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, null, false, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, null, false, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, null, true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, null, true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, null, true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, null, true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", false, null, false, "machine_namenamerepmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, false, true, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, null, false, null, false, null, false, "name")]
        [InlineData(false, false, true, false, null, false, null, false, null, true, "name")]
        [InlineData(false, false, true, false, null, false, null, false, "add", false, "name")]
        [InlineData(false, false, true, false, null, false, null, false, "add", true, "name")]
        [InlineData(false, false, true, false, null, false, null, true, null, false, "name")]
        [InlineData(false, false, true, false, null, false, null, true, null, true, "name")]
        [InlineData(false, false, true, false, null, false, null, true, "add", false, "name")]
        [InlineData(false, false, true, false, null, false, null, true, "add", true, "name")]
        [InlineData(false, false, true, false, null, false, "rep", false, null, false, "name")]
        [InlineData(false, false, true, false, null, false, "rep", false, null, true, "name")]
        [InlineData(false, false, true, false, null, false, "rep", false, "add", false, "name")]
        [InlineData(false, false, true, false, null, false, "rep", false, "add", true, "name")]
        [InlineData(false, false, true, false, null, false, "rep", true, null, false, "name")]
        [InlineData(false, false, true, false, null, false, "rep", true, null, true, "name")]
        [InlineData(false, false, true, false, null, false, "rep", true, "add", false, "name")]
        [InlineData(false, false, true, false, null, false, "rep", true, "add", true, "name")]
        [InlineData(false, false, true, false, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, null, false, null, false, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, null, false, null, true, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, null, false, "add", false, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, null, false, "add", true, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, null, true, null, false, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, null, true, null, true, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, null, true, "add", false, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, null, true, "add", true, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, "rep", false, null, false, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, "rep", false, null, true, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, "rep", false, "add", false, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, "rep", false, "add", true, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, "rep", true, null, false, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, "rep", true, null, true, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, "rep", true, "add", false, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", false, "rep", true, "add", true, "name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, false, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, null, false, null, false, null, false, "name")]
        [InlineData(false, false, true, true, null, false, null, false, null, true, "machine/name")]
        [InlineData(false, false, true, true, null, false, null, false, "add", false, "nameadd")]
        [InlineData(false, false, true, true, null, false, null, false, "add", true, "machine/nameadd")]
        [InlineData(false, false, true, true, null, false, null, true, null, false, "name")]
        [InlineData(false, false, true, true, null, false, null, true, null, true, "machine/name")]
        [InlineData(false, false, true, true, null, false, null, true, "add", false, "nameadd")]
        [InlineData(false, false, true, true, null, false, null, true, "add", true, "machine/nameadd")]
        [InlineData(false, false, true, true, null, false, "rep", false, null, false, "namerep")]
        [InlineData(false, false, true, true, null, false, "rep", false, null, true, "machine/namerep")]
        [InlineData(false, false, true, true, null, false, "rep", false, "add", false, "namerepadd")]
        [InlineData(false, false, true, true, null, false, "rep", false, "add", true, "machine/namerepadd")]
        [InlineData(false, false, true, true, null, false, "rep", true, null, false, "name")]
        [InlineData(false, false, true, true, null, false, "rep", true, null, true, "machine/name")]
        [InlineData(false, false, true, true, null, false, "rep", true, "add", false, "nameadd")]
        [InlineData(false, false, true, true, null, false, "rep", true, "add", true, "machine/nameadd")]
        [InlineData(false, false, true, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, null, false, null, false, "machine_namenamemachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, null, false, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, null, false, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, null, false, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, null, true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, null, true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, null, true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, null, true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", false, null, false, "machine_namenamerepmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, false, true, true, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, null, false, null, false, null, false, "name")]
        [InlineData(false, true, false, false, null, false, null, false, null, true, "machine/name")]
        [InlineData(false, true, false, false, null, false, null, false, "add", false, "nameadd")]
        [InlineData(false, true, false, false, null, false, null, false, "add", true, "machine/nameadd")]
        [InlineData(false, true, false, false, null, false, null, true, null, false, "name")]
        [InlineData(false, true, false, false, null, false, null, true, null, true, "machine/name")]
        [InlineData(false, true, false, false, null, false, null, true, "add", false, "nameadd")]
        [InlineData(false, true, false, false, null, false, null, true, "add", true, "machine/nameadd")]
        [InlineData(false, true, false, false, null, false, "rep", false, null, false, "namerep")]
        [InlineData(false, true, false, false, null, false, "rep", false, null, true, "machine/namerep")]
        [InlineData(false, true, false, false, null, false, "rep", false, "add", false, "namerepadd")]
        [InlineData(false, true, false, false, null, false, "rep", false, "add", true, "machine/namerepadd")]
        [InlineData(false, true, false, false, null, false, "rep", true, null, false, "name")]
        [InlineData(false, true, false, false, null, false, "rep", true, null, true, "machine/name")]
        [InlineData(false, true, false, false, null, false, "rep", true, "add", false, "nameadd")]
        [InlineData(false, true, false, false, null, false, "rep", true, "add", true, "machine/nameadd")]
        [InlineData(false, true, false, false, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, null, false, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, null, false, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, null, false, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, null, false, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, null, true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, null, true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, null, true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, null, true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", false, null, false, "machine_namenamerepmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, false, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, null, false, null, false, null, false, "name")]
        [InlineData(false, true, false, true, null, false, null, false, null, true, "machine/name")]
        [InlineData(false, true, false, true, null, false, null, false, "add", false, "nameadd")]
        [InlineData(false, true, false, true, null, false, null, false, "add", true, "machine/nameadd")]
        [InlineData(false, true, false, true, null, false, null, true, null, false, "name")]
        [InlineData(false, true, false, true, null, false, null, true, null, true, "machine/name")]
        [InlineData(false, true, false, true, null, false, null, true, "add", false, "nameadd")]
        [InlineData(false, true, false, true, null, false, null, true, "add", true, "machine/nameadd")]
        [InlineData(false, true, false, true, null, false, "rep", false, null, false, "namerep")]
        [InlineData(false, true, false, true, null, false, "rep", false, null, true, "machine/namerep")]
        [InlineData(false, true, false, true, null, false, "rep", false, "add", false, "namerepadd")]
        [InlineData(false, true, false, true, null, false, "rep", false, "add", true, "machine/namerepadd")]
        [InlineData(false, true, false, true, null, false, "rep", true, null, false, "name")]
        [InlineData(false, true, false, true, null, false, "rep", true, null, true, "machine/name")]
        [InlineData(false, true, false, true, null, false, "rep", true, "add", false, "nameadd")]
        [InlineData(false, true, false, true, null, false, "rep", true, "add", true, "machine/nameadd")]
        [InlineData(false, true, false, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, null, false, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, null, false, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, null, false, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, null, false, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, null, true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, null, true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, null, true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, null, true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", false, null, false, "machine_namenamerepmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, false, true, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, null, false, null, false, null, false, "name")]
        [InlineData(false, true, true, false, null, false, null, false, null, true, "machine/name")]
        [InlineData(false, true, true, false, null, false, null, false, "add", false, "nameadd")]
        [InlineData(false, true, true, false, null, false, null, false, "add", true, "machine/nameadd")]
        [InlineData(false, true, true, false, null, false, null, true, null, false, "name")]
        [InlineData(false, true, true, false, null, false, null, true, null, true, "machine/name")]
        [InlineData(false, true, true, false, null, false, null, true, "add", false, "nameadd")]
        [InlineData(false, true, true, false, null, false, null, true, "add", true, "machine/nameadd")]
        [InlineData(false, true, true, false, null, false, "rep", false, null, false, "namerep")]
        [InlineData(false, true, true, false, null, false, "rep", false, null, true, "machine/namerep")]
        [InlineData(false, true, true, false, null, false, "rep", false, "add", false, "namerepadd")]
        [InlineData(false, true, true, false, null, false, "rep", false, "add", true, "machine/namerepadd")]
        [InlineData(false, true, true, false, null, false, "rep", true, null, false, "name")]
        [InlineData(false, true, true, false, null, false, "rep", true, null, true, "machine/name")]
        [InlineData(false, true, true, false, null, false, "rep", true, "add", false, "nameadd")]
        [InlineData(false, true, true, false, null, false, "rep", true, "add", true, "machine/nameadd")]
        [InlineData(false, true, true, false, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, null, false, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, null, false, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, null, false, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, null, false, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, null, true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, null, true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, null, true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, null, true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", false, null, false, "machine_namenamerepmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, false, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, null, false, null, false, null, false, "name")]
        [InlineData(false, true, true, true, null, false, null, false, null, true, "machine/name")]
        [InlineData(false, true, true, true, null, false, null, false, "add", false, "nameadd")]
        [InlineData(false, true, true, true, null, false, null, false, "add", true, "machine/nameadd")]
        [InlineData(false, true, true, true, null, false, null, true, null, false, "name")]
        [InlineData(false, true, true, true, null, false, null, true, null, true, "machine/name")]
        [InlineData(false, true, true, true, null, false, null, true, "add", false, "nameadd")]
        [InlineData(false, true, true, true, null, false, null, true, "add", true, "machine/nameadd")]
        [InlineData(false, true, true, true, null, false, "rep", false, null, false, "namerep")]
        [InlineData(false, true, true, true, null, false, "rep", false, null, true, "machine/namerep")]
        [InlineData(false, true, true, true, null, false, "rep", false, "add", false, "namerepadd")]
        [InlineData(false, true, true, true, null, false, "rep", false, "add", true, "machine/namerepadd")]
        [InlineData(false, true, true, true, null, false, "rep", true, null, false, "name")]
        [InlineData(false, true, true, true, null, false, "rep", true, null, true, "machine/name")]
        [InlineData(false, true, true, true, null, false, "rep", true, "add", false, "nameadd")]
        [InlineData(false, true, true, true, null, false, "rep", true, "add", true, "machine/nameadd")]
        [InlineData(false, true, true, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, null, false, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, null, false, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, null, false, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, null, false, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, null, true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, null, true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, null, true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, null, true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", false, null, false, "machine_namenamerepmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(false, true, true, true, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, false, false, null, false, null, false, null, false, "name")]
        [InlineData(true, false, false, false, null, false, null, false, null, true, "name")]
        [InlineData(true, false, false, false, null, false, null, false, "add", false, "name")]
        [InlineData(true, false, false, false, null, false, null, false, "add", true, "name")]
        [InlineData(true, false, false, false, null, false, null, true, null, false, "name")]
        [InlineData(true, false, false, false, null, false, null, true, null, true, "name")]
        [InlineData(true, false, false, false, null, false, null, true, "add", false, "name")]
        [InlineData(true, false, false, false, null, false, null, true, "add", true, "name")]
        [InlineData(true, false, false, false, null, false, "rep", false, null, false, "name")]
        [InlineData(true, false, false, false, null, false, "rep", false, null, true, "name")]
        [InlineData(true, false, false, false, null, false, "rep", false, "add", false, "name")]
        [InlineData(true, false, false, false, null, false, "rep", false, "add", true, "name")]
        [InlineData(true, false, false, false, null, false, "rep", true, null, false, "name")]
        [InlineData(true, false, false, false, null, false, "rep", true, null, true, "name")]
        [InlineData(true, false, false, false, null, false, "rep", true, "add", false, "name")]
        [InlineData(true, false, false, false, null, false, "rep", true, "add", true, "name")]
        [InlineData(true, false, false, false, null, true, null, false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, null, false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, null, false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, null, false, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, null, true, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, null, true, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, null, true, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, null, true, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, "rep", false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, "rep", false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, "rep", false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, "rep", false, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, "rep", true, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, "rep", true, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, "rep", true, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, null, true, "rep", true, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, null, false, null, false, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, null, false, null, true, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, null, false, "add", false, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, null, false, "add", true, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, null, true, null, false, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, null, true, null, true, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, null, true, "add", false, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, null, true, "add", true, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, "rep", false, null, false, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, "rep", false, null, true, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, "rep", false, "add", false, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, "rep", false, "add", true, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, "rep", true, null, false, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, "rep", true, null, true, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, "rep", true, "add", false, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", false, "rep", true, "add", true, "name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, null, false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, null, false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, null, false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, null, false, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, null, true, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, null, true, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, null, true, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, null, true, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, "rep", false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, "rep", false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, "rep", false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, "rep", false, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, "rep", true, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, "rep", true, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, "rep", true, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, false, "%machine%_%name%", true, "rep", true, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, null, false, null, false, null, false, "\"name\"")]
        [InlineData(true, false, false, true, null, false, null, false, null, true, "\"machine/name\"")]
        [InlineData(true, false, false, true, null, false, null, false, "add", false, "\"nameadd\"")]
        [InlineData(true, false, false, true, null, false, null, false, "add", true, "\"machine/nameadd\"")]
        [InlineData(true, false, false, true, null, false, null, true, null, false, "\"name\"")]
        [InlineData(true, false, false, true, null, false, null, true, null, true, "\"machine/name\"")]
        [InlineData(true, false, false, true, null, false, null, true, "add", false, "\"nameadd\"")]
        [InlineData(true, false, false, true, null, false, null, true, "add", true, "\"machine/nameadd\"")]
        [InlineData(true, false, false, true, null, false, "rep", false, null, false, "\"namerep\"")]
        [InlineData(true, false, false, true, null, false, "rep", false, null, true, "\"machine/namerep\"")]
        [InlineData(true, false, false, true, null, false, "rep", false, "add", false, "\"namerepadd\"")]
        [InlineData(true, false, false, true, null, false, "rep", false, "add", true, "\"machine/namerepadd\"")]
        [InlineData(true, false, false, true, null, false, "rep", true, null, false, "\"name\"")]
        [InlineData(true, false, false, true, null, false, "rep", true, null, true, "\"machine/name\"")]
        [InlineData(true, false, false, true, null, false, "rep", true, "add", false, "\"nameadd\"")]
        [InlineData(true, false, false, true, null, false, "rep", true, "add", true, "\"machine/nameadd\"")]
        [InlineData(true, false, false, true, null, true, null, false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, null, false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, null, false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, null, false, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, null, true, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, null, true, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, null, true, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, null, true, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, "rep", false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, "rep", false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, "rep", false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, "rep", false, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, "rep", true, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, "rep", true, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, "rep", true, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, null, true, "rep", true, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, null, false, null, false, "machine_name\"name\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, null, false, null, true, "machine_name\"machine/name\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, null, false, "add", false, "machine_name\"nameadd\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, null, false, "add", true, "machine_name\"machine/nameadd\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, null, true, null, false, "machine_name\"name\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, null, true, null, true, "machine_name\"machine/name\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, null, true, "add", false, "machine_name\"nameadd\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, null, true, "add", true, "machine_name\"machine/nameadd\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", false, null, false, "machine_name\"namerep\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", false, null, true, "machine_name\"machine/namerep\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_name\"namerepadd\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_name\"machine/namerepadd\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_name\"name\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_name\"machine/name\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_name\"nameadd\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_name\"machine/nameadd\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, null, false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, null, false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, null, false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, null, false, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, null, true, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, null, true, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, null, true, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, null, true, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, "rep", false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, "rep", false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, "rep", false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, "rep", false, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, "rep", true, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, "rep", true, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, "rep", true, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, false, true, "%machine%_%name%", true, "rep", true, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, false, true, false, null, false, null, false, null, false, "name")]
        [InlineData(true, false, true, false, null, false, null, false, null, true, "name")]
        [InlineData(true, false, true, false, null, false, null, false, "add", false, "name")]
        [InlineData(true, false, true, false, null, false, null, false, "add", true, "name")]
        [InlineData(true, false, true, false, null, false, null, true, null, false, "name")]
        [InlineData(true, false, true, false, null, false, null, true, null, true, "name")]
        [InlineData(true, false, true, false, null, false, null, true, "add", false, "name")]
        [InlineData(true, false, true, false, null, false, null, true, "add", true, "name")]
        [InlineData(true, false, true, false, null, false, "rep", false, null, false, "name")]
        [InlineData(true, false, true, false, null, false, "rep", false, null, true, "name")]
        [InlineData(true, false, true, false, null, false, "rep", false, "add", false, "name")]
        [InlineData(true, false, true, false, null, false, "rep", false, "add", true, "name")]
        [InlineData(true, false, true, false, null, false, "rep", true, null, false, "name")]
        [InlineData(true, false, true, false, null, false, "rep", true, null, true, "name")]
        [InlineData(true, false, true, false, null, false, "rep", true, "add", false, "name")]
        [InlineData(true, false, true, false, null, false, "rep", true, "add", true, "name")]
        [InlineData(true, false, true, false, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, null, false, null, false, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, null, false, null, true, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, null, false, "add", false, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, null, false, "add", true, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, null, true, null, false, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, null, true, null, true, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, null, true, "add", false, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, null, true, "add", true, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, "rep", false, null, false, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, "rep", false, null, true, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, "rep", false, "add", false, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, "rep", false, "add", true, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, "rep", true, null, false, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, "rep", true, null, true, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, "rep", true, "add", false, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", false, "rep", true, "add", true, "name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, false, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, null, false, null, false, null, false, "name")]
        [InlineData(true, false, true, true, null, false, null, false, null, true, "machine/name")]
        [InlineData(true, false, true, true, null, false, null, false, "add", false, "nameadd")]
        [InlineData(true, false, true, true, null, false, null, false, "add", true, "machine/nameadd")]
        [InlineData(true, false, true, true, null, false, null, true, null, false, "name")]
        [InlineData(true, false, true, true, null, false, null, true, null, true, "machine/name")]
        [InlineData(true, false, true, true, null, false, null, true, "add", false, "nameadd")]
        [InlineData(true, false, true, true, null, false, null, true, "add", true, "machine/nameadd")]
        [InlineData(true, false, true, true, null, false, "rep", false, null, false, "namerep")]
        [InlineData(true, false, true, true, null, false, "rep", false, null, true, "machine/namerep")]
        [InlineData(true, false, true, true, null, false, "rep", false, "add", false, "namerepadd")]
        [InlineData(true, false, true, true, null, false, "rep", false, "add", true, "machine/namerepadd")]
        [InlineData(true, false, true, true, null, false, "rep", true, null, false, "name")]
        [InlineData(true, false, true, true, null, false, "rep", true, null, true, "machine/name")]
        [InlineData(true, false, true, true, null, false, "rep", true, "add", false, "nameadd")]
        [InlineData(true, false, true, true, null, false, "rep", true, "add", true, "machine/nameadd")]
        [InlineData(true, false, true, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, null, false, null, false, "machine_namenamemachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, null, false, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, null, false, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, null, false, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, null, true, null, false, "machine_namenamemachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, null, true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, null, true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, null, true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", false, null, false, "machine_namenamerepmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, false, true, true, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, false, false, null, false, null, false, null, false, "\"name\"")]
        [InlineData(true, true, false, false, null, false, null, false, null, true, "\"machine/name\"")]
        [InlineData(true, true, false, false, null, false, null, false, "add", false, "\"nameadd\"")]
        [InlineData(true, true, false, false, null, false, null, false, "add", true, "\"machine/nameadd\"")]
        [InlineData(true, true, false, false, null, false, null, true, null, false, "\"name\"")]
        [InlineData(true, true, false, false, null, false, null, true, null, true, "\"machine/name\"")]
        [InlineData(true, true, false, false, null, false, null, true, "add", false, "\"nameadd\"")]
        [InlineData(true, true, false, false, null, false, null, true, "add", true, "\"machine/nameadd\"")]
        [InlineData(true, true, false, false, null, false, "rep", false, null, false, "\"namerep\"")]
        [InlineData(true, true, false, false, null, false, "rep", false, null, true, "\"machine/namerep\"")]
        [InlineData(true, true, false, false, null, false, "rep", false, "add", false, "\"namerepadd\"")]
        [InlineData(true, true, false, false, null, false, "rep", false, "add", true, "\"machine/namerepadd\"")]
        [InlineData(true, true, false, false, null, false, "rep", true, null, false, "\"name\"")]
        [InlineData(true, true, false, false, null, false, "rep", true, null, true, "\"machine/name\"")]
        [InlineData(true, true, false, false, null, false, "rep", true, "add", false, "\"nameadd\"")]
        [InlineData(true, true, false, false, null, false, "rep", true, "add", true, "\"machine/nameadd\"")]
        [InlineData(true, true, false, false, null, true, null, false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, null, false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, null, false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, null, false, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, null, true, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, null, true, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, null, true, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, null, true, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, "rep", false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, "rep", false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, "rep", false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, "rep", false, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, "rep", true, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, "rep", true, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, "rep", true, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, null, true, "rep", true, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, null, false, null, false, "machine_name\"name\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, null, false, null, true, "machine_name\"machine/name\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, null, false, "add", false, "machine_name\"nameadd\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, null, false, "add", true, "machine_name\"machine/nameadd\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, null, true, null, false, "machine_name\"name\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, null, true, null, true, "machine_name\"machine/name\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, null, true, "add", false, "machine_name\"nameadd\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, null, true, "add", true, "machine_name\"machine/nameadd\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", false, null, false, "machine_name\"namerep\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", false, null, true, "machine_name\"machine/namerep\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", false, "add", false, "machine_name\"namerepadd\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", false, "add", true, "machine_name\"machine/namerepadd\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, null, false, "machine_name\"name\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, null, true, "machine_name\"machine/name\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_name\"nameadd\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_name\"machine/nameadd\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, null, false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, null, false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, null, false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, null, false, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, null, true, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, null, true, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, null, true, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, null, true, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, "rep", false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, "rep", false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, "rep", false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, "rep", false, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, "rep", true, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, "rep", true, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, "rep", true, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, false, "%machine%_%name%", true, "rep", true, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, null, false, null, false, null, false, "\"name\"")]
        [InlineData(true, true, false, true, null, false, null, false, null, true, "\"machine/name\"")]
        [InlineData(true, true, false, true, null, false, null, false, "add", false, "\"nameadd\"")]
        [InlineData(true, true, false, true, null, false, null, false, "add", true, "\"machine/nameadd\"")]
        [InlineData(true, true, false, true, null, false, null, true, null, false, "\"name\"")]
        [InlineData(true, true, false, true, null, false, null, true, null, true, "\"machine/name\"")]
        [InlineData(true, true, false, true, null, false, null, true, "add", false, "\"nameadd\"")]
        [InlineData(true, true, false, true, null, false, null, true, "add", true, "\"machine/nameadd\"")]
        [InlineData(true, true, false, true, null, false, "rep", false, null, false, "\"namerep\"")]
        [InlineData(true, true, false, true, null, false, "rep", false, null, true, "\"machine/namerep\"")]
        [InlineData(true, true, false, true, null, false, "rep", false, "add", false, "\"namerepadd\"")]
        [InlineData(true, true, false, true, null, false, "rep", false, "add", true, "\"machine/namerepadd\"")]
        [InlineData(true, true, false, true, null, false, "rep", true, null, false, "\"name\"")]
        [InlineData(true, true, false, true, null, false, "rep", true, null, true, "\"machine/name\"")]
        [InlineData(true, true, false, true, null, false, "rep", true, "add", false, "\"nameadd\"")]
        [InlineData(true, true, false, true, null, false, "rep", true, "add", true, "\"machine/nameadd\"")]
        [InlineData(true, true, false, true, null, true, null, false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, null, false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, null, false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, null, false, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, null, true, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, null, true, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, null, true, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, null, true, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, "rep", false, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, "rep", false, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, "rep", false, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, "rep", false, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, "rep", true, null, false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, "rep", true, null, true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, "rep", true, "add", false, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, null, true, "rep", true, "add", true, "\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, null, false, null, false, "machine_name\"name\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, null, false, null, true, "machine_name\"machine/name\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, null, false, "add", false, "machine_name\"nameadd\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, null, false, "add", true, "machine_name\"machine/nameadd\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, null, true, null, false, "machine_name\"name\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, null, true, null, true, "machine_name\"machine/name\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, null, true, "add", false, "machine_name\"nameadd\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, null, true, "add", true, "machine_name\"machine/nameadd\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", false, null, false, "machine_name\"namerep\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", false, null, true, "machine_name\"machine/namerep\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_name\"namerepadd\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_name\"machine/namerepadd\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, null, false, "machine_name\"name\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, null, true, "machine_name\"machine/name\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_name\"nameadd\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_name\"machine/nameadd\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, null, false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, null, false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, null, false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, null, false, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, null, true, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, null, true, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, null, true, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, null, true, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, "rep", false, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, "rep", false, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, "rep", false, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, "rep", false, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, "rep", true, null, false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, "rep", true, null, true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, "rep", true, "add", false, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, false, true, "%machine%_%name%", true, "rep", true, "add", true, "machine_name\"da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz\"machine_name")]
        [InlineData(true, true, true, false, null, false, null, false, null, false, "name")]
        [InlineData(true, true, true, false, null, false, null, false, null, true, "machine/name")]
        [InlineData(true, true, true, false, null, false, null, false, "add", false, "nameadd")]
        [InlineData(true, true, true, false, null, false, null, false, "add", true, "machine/nameadd")]
        [InlineData(true, true, true, false, null, false, null, true, null, false, "name")]
        [InlineData(true, true, true, false, null, false, null, true, null, true, "machine/name")]
        [InlineData(true, true, true, false, null, false, null, true, "add", false, "nameadd")]
        [InlineData(true, true, true, false, null, false, null, true, "add", true, "machine/nameadd")]
        [InlineData(true, true, true, false, null, false, "rep", false, null, false, "namerep")]
        [InlineData(true, true, true, false, null, false, "rep", false, null, true, "machine/namerep")]
        [InlineData(true, true, true, false, null, false, "rep", false, "add", false, "namerepadd")]
        [InlineData(true, true, true, false, null, false, "rep", false, "add", true, "machine/namerepadd")]
        [InlineData(true, true, true, false, null, false, "rep", true, null, false, "name")]
        [InlineData(true, true, true, false, null, false, "rep", true, null, true, "machine/name")]
        [InlineData(true, true, true, false, null, false, "rep", true, "add", false, "nameadd")]
        [InlineData(true, true, true, false, null, false, "rep", true, "add", true, "machine/nameadd")]
        [InlineData(true, true, true, false, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, null, false, null, false, "machine_namenamemachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, null, false, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, null, false, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, null, false, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, null, true, null, false, "machine_namenamemachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, null, true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, null, true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, null, true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", false, null, false, "machine_namenamerepmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, false, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, null, false, null, false, null, false, "name")]
        [InlineData(true, true, true, true, null, false, null, false, null, true, "machine/name")]
        [InlineData(true, true, true, true, null, false, null, false, "add", false, "nameadd")]
        [InlineData(true, true, true, true, null, false, null, false, "add", true, "machine/nameadd")]
        [InlineData(true, true, true, true, null, false, null, true, null, false, "name")]
        [InlineData(true, true, true, true, null, false, null, true, null, true, "machine/name")]
        [InlineData(true, true, true, true, null, false, null, true, "add", false, "nameadd")]
        [InlineData(true, true, true, true, null, false, null, true, "add", true, "machine/nameadd")]
        [InlineData(true, true, true, true, null, false, "rep", false, null, false, "namerep")]
        [InlineData(true, true, true, true, null, false, "rep", false, null, true, "machine/namerep")]
        [InlineData(true, true, true, true, null, false, "rep", false, "add", false, "namerepadd")]
        [InlineData(true, true, true, true, null, false, "rep", false, "add", true, "machine/namerepadd")]
        [InlineData(true, true, true, true, null, false, "rep", true, null, false, "name")]
        [InlineData(true, true, true, true, null, false, "rep", true, null, true, "machine/name")]
        [InlineData(true, true, true, true, null, false, "rep", true, "add", false, "nameadd")]
        [InlineData(true, true, true, true, null, false, "rep", true, "add", true, "machine/nameadd")]
        [InlineData(true, true, true, true, null, true, null, false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, null, false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, null, false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, null, false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, null, true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, null, true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, null, true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, null, true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, "rep", false, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, "rep", false, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, "rep", false, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, "rep", false, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, "rep", true, null, false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, "rep", true, null, true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, "rep", true, "add", false, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, null, true, "rep", true, "add", true, "da/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, null, false, null, false, "machine_namenamemachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, null, false, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, null, false, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, null, false, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, null, true, null, false, "machine_namenamemachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, null, true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, null, true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, null, true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", false, null, false, "machine_namenamerepmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", false, null, true, "machine_namemachine/namerepmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", false, "add", false, "machine_namenamerepaddmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", false, "add", true, "machine_namemachine/namerepaddmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, null, false, "machine_namenamemachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, null, true, "machine_namemachine/namemachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, "add", false, "machine_namenameaddmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", false, "rep", true, "add", true, "machine_namemachine/nameaddmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, null, false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, null, false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, null, false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, null, false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, null, true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, null, true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, null, true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, null, true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, "rep", false, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, "rep", false, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, "rep", false, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, "rep", false, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, "rep", true, null, false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, "rep", true, null, true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, "rep", true, "add", false, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        [InlineData(true, true, true, true, "%machine%_%name%", true, "rep", true, "add", true, "machine_nameda/39/a3/ee/da39a3ee5e6b4b0d3255bfef95601890afd80709.gzmachine_name")]
        public void ProcessItemNameTest(
            bool quotes,
            bool useRomName,
            bool forceRemoveQuotes,
            bool forceRomName,
            string? fix,
            bool depot,
            string? replaceExtension,
            bool removeExtension,
            string? addExtension,
            bool gameName,
            string expected)
        {
            Machine machine = new Machine { Name = "machine" };

            DatItem item = new Rom
            {
                Name = "name",
                SHA1 = HashType.SHA1.ZeroString
            };

            DatFile? datFile = new Logiqx(datFile: null, useGame: false);
            datFile.Modifiers.Prefix = fix;
            datFile.Modifiers.Postfix = fix;
            datFile.Modifiers.AddExtension = addExtension;
            datFile.Modifiers.RemoveExtension = removeExtension;
            datFile.Modifiers.ReplaceExtension = replaceExtension;
            datFile.Modifiers.GameName = gameName;
            datFile.Modifiers.Quotes = quotes;
            datFile.Modifiers.UseRomName = useRomName;
            if (depot)
                datFile.Modifiers.OutputDepot = new DepotInformation(isActive: true, depth: 4);

            datFile.ProcessItemName(item, machine, forceRemoveQuotes, forceRomName);
            string? actual = item.GetName()?.Replace('\\', '/');
            Assert.Equal(expected, actual);
        }

        #endregion

        #region FormatPrefixPostfix

        [Fact]
        public void FormatPrefixPostfix_EmptyFix()
        {
            string fix = string.Empty;
            string expected = string.Empty;

            Machine machine = new Machine
            {
                Category = ["category"],
                Manufacturer = "manufacturer",
                Name = "machine",
                Publisher = "publisher",
            };

            DatItem item = new Rom
            {
                Name = "name",
                Size = 12345,
                CRC16 = "crc16",
                CRC32 = "crc32",
                CRC64 = "crc64",
                MD2 = "md2",
                MD4 = "md4",
                MD5 = "md5",
                RIPEMD128 = "ripemd128",
                RIPEMD160 = "ripemd160",
                SHA1 = "sha1",
                SHA256 = "sha256",
                SHA384 = "sha384",
                SHA512 = "sha512",
                SpamSum = "spamsum"
            };

            string actual = DatFile.FormatPrefixPostfix(item, machine, fix);
            Assert.Equal(expected, actual);
        }

        [Fact]
        public void FormatPrefixPostfix_Disk()
        {
            string fix = "%game%_%machine%_%name%_%manufacturer%_%publisher%_%category%_%crc16%_%crc%_%crc64%_%md2%_%md4%_%md5%_%ripemd128%_%ripemd160%_%sha1%_%sha256%_%sha384%_%sha512%_%size%_%spamsum%";
            string expected = "machine_machine_name_manufacturer_publisher_category______md5___sha1_____";

            Machine machine = new Machine
            {
                Category = ["category"],
                Manufacturer = "manufacturer",
                Name = "machine",
                Publisher = "publisher"
            };

            DatItem item = new Disk
            {
                Name = "name",
                MD5 = "md5",
                SHA1 = "sha1",
            };

            string actual = DatFile.FormatPrefixPostfix(item, machine, fix);
            Assert.Equal(expected, actual);
        }

        [Fact]
        public void FormatPrefixPostfix_File()
        {
            string fix = "%game%_%machine%_%name%_%manufacturer%_%publisher%_%category%_%crc16%_%crc%_%crc64%_%md2%_%md4%_%md5%_%ripemd128%_%ripemd160%_%sha1%_%sha256%_%sha384%_%sha512%_%size%_%spamsum%";
            string expected = "machine_machine_name.bin_manufacturer_publisher_category__00000000____d41d8cd98f00b204e9800998ecf8427e___da39a3ee5e6b4b0d3255bfef95601890afd80709_e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855___12345_";

            Machine machine = new Machine
            {
                Category = ["category"],
                Manufacturer = "manufacturer",
                Name = "machine",
                Publisher = "publisher"
            };

            DatItem item = new DatItems.Formats.File
            {
                Id = "name",
                Extension = "bin",
                Size = 12345,
                CRC = HashType.CRC32.ZeroString,
                MD5 = HashType.MD5.ZeroString,
                SHA1 = HashType.SHA1.ZeroString,
                SHA256 = HashType.SHA256.ZeroString,
            };

            string actual = DatFile.FormatPrefixPostfix(item, machine, fix);
            Assert.Equal(expected, actual);
        }

        [Fact]
        public void FormatPrefixPostfix_Media()
        {
            string fix = "%game%_%machine%_%name%_%manufacturer%_%publisher%_%category%_%crc16%_%crc%_%crc64%_%md2%_%md4%_%md5%_%ripemd128%_%ripemd160%_%sha1%_%sha256%_%sha384%_%sha512%_%size%_%spamsum%";
            string expected = "machine_machine_name_manufacturer_publisher_category______md5___sha1_sha256____spamsum";

            Machine machine = new Machine
            {
                Category = ["category"],
                Manufacturer = "manufacturer",
                Name = "machine",
                Publisher = "publisher"
            };

            DatItem item = new Media
            {
                Name = "name",
                MD5 = "md5",
                SHA1 = "sha1",
                SHA256 = "sha256",
                SpamSum = "spamsum",
            };

            string actual = DatFile.FormatPrefixPostfix(item, machine, fix);
            Assert.Equal(expected, actual);
        }

        [Fact]
        public void FormatPrefixPostfix_Rom()
        {
            string fix = "%game%_%machine%_%name%_%manufacturer%_%publisher%_%category%_%crc16%_%crc%_%crc64%_%md2%_%md4%_%md5%_%ripemd128%_%ripemd160%_%sha1%_%sha256%_%sha384%_%sha512%_%size%_%spamsum%";
            string expected = "machine_machine_name_manufacturer_publisher_category_crc16_crc32_crc64_md2_md4_md5_ripemd128_ripemd160_sha1_sha256_sha384_sha512_12345_spamsum";

            Machine machine = new Machine
            {
                Category = ["category"],
                Manufacturer = "manufacturer",
                Name = "machine",
                Publisher = "publisher"
            };

            DatItem item = new Rom
            {
                Name = "name",
                Size = 12345,
                CRC16 = "crc16",
                CRC32 = "crc32",
                CRC64 = "crc64",
                MD2 = "md2",
                MD4 = "md4",
                MD5 = "md5",
                RIPEMD128 = "ripemd128",
                RIPEMD160 = "ripemd160",
                SHA1 = "sha1",
                SHA256 = "sha256",
                SHA384 = "sha384",
                SHA512 = "sha512",
                SpamSum = "spamsum"
            };

            string actual = DatFile.FormatPrefixPostfix(item, machine, fix);
            Assert.Equal(expected, actual);
        }

        #endregion

        #region ProcessNullifiedItem

        [Fact]
        public void ProcessNullifiedItem_SizeNonNull()
        {
            DatItem item = new Rom()
            {
                Size = 12345
            };

            DatItem actual = DatFile.ProcessNullifiedItem(item);
            Rom? rom = actual as Rom;
            Assert.NotNull(rom);
            Assert.Equal(12345, rom.Size);
            Assert.Null(rom.CRC16);
            Assert.Null(rom.CRC32);
            Assert.Null(rom.CRC64);
            Assert.Null(rom.MD2);
            Assert.Null(rom.MD4);
            Assert.Null(rom.MD5);
            Assert.Null(rom.RIPEMD128);
            Assert.Null(rom.RIPEMD160);
            Assert.Null(rom.SHA1);
            Assert.Null(rom.SHA256);
            Assert.Null(rom.SHA384);
            Assert.Null(rom.SHA512);
            Assert.Null(rom.SpamSum);
        }

        [Fact]
        public void ProcessNullifiedItem_CrcNonNull()
        {
            DatItem item = new Rom
            {
                CRC32 = HashType.CRC32.ZeroString
            };

            DatItem actual = DatFile.ProcessNullifiedItem(item);
            Rom? rom = actual as Rom;
            Assert.NotNull(rom);
            Assert.Null(rom.Size);
            Assert.Equal(HashType.CRC32.ZeroString, rom.CRC32);
            Assert.Null(rom.MD2);
            Assert.Null(rom.MD4);
            Assert.Null(rom.MD5);
            Assert.Null(rom.RIPEMD128);
            Assert.Null(rom.RIPEMD160);
            Assert.Null(rom.SHA1);
            Assert.Null(rom.SHA256);
            Assert.Null(rom.SHA384);
            Assert.Null(rom.SHA512);
            Assert.Null(rom.SpamSum);
        }

        [Fact]
        public void ProcessNullifiedItem_AllNull()
        {
            DatItem item = new Rom
            {
                CRC16 = "null",
                CRC32 = "null",
                CRC64 = "null",
                MD2 = "null",
                MD4 = "null",
                MD5 = "null",
                RIPEMD128 = "null",
                RIPEMD160 = "null",
                SHA1 = "null",
                SHA256 = "null",
                SHA384 = "null",
                SHA512 = "null",
                SpamSum = "null"
            };

            DatItem actual = DatFile.ProcessNullifiedItem(item);
            Rom? rom = actual as Rom;
            Assert.NotNull(rom);
            Assert.Equal(0, rom.Size);
            Assert.Equal(HashType.CRC16.ZeroString, rom.CRC16);
            Assert.Equal(HashType.CRC32.ZeroString, rom.CRC32);
            Assert.Equal(HashType.CRC64.ZeroString, rom.CRC64);
            Assert.Equal(HashType.MD2.ZeroString, rom.MD2);
            Assert.Equal(HashType.MD4.ZeroString, rom.MD4);
            Assert.Equal(HashType.MD5.ZeroString, rom.MD5);
            Assert.Equal(HashType.RIPEMD128.ZeroString, rom.RIPEMD128);
            Assert.Equal(HashType.RIPEMD160.ZeroString, rom.RIPEMD160);
            Assert.Equal(HashType.SHA1.ZeroString, rom.SHA1);
            Assert.Equal(HashType.SHA256.ZeroString, rom.SHA256);
            Assert.Equal(HashType.SHA384.ZeroString, rom.SHA384);
            Assert.Equal(HashType.SHA512.ZeroString, rom.SHA512);
            Assert.Equal(HashType.SpamSum.ZeroString, rom.SpamSum);
        }

        #endregion

        #region ContainsWritable

        [Fact]
        public void ContainsWritable_Empty_True()
        {
            List<DatItem> datItems = [];
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ContainsWritable(datItems);
            Assert.True(actual);
        }

        [Fact]
        public void ContainsWritable_NoWritable_False()
        {
            List<DatItem> datItems = [new Blank()];
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ContainsWritable(datItems);
            Assert.False(actual);
        }

        [Fact]
        public void ContainsWritable_Writable_True()
        {
            List<DatItem> datItems = [new Rom()];
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ContainsWritable(datItems);
            Assert.True(actual);
        }

        #endregion

        #region GetDuplicateSuffix

        [Fact]
        public void GetDuplicateSuffix_Disk_NoHash_Generic()
        {
            DatItem datItem = new Disk();
            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal("_1", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Disk_MD5()
        {
            string hash = "hash";
            DatItem datItem = new Disk { MD5 = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Disk_SHA1()
        {
            string hash = "hash";
            DatItem datItem = new Disk { SHA1 = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_File_NoHash_Generic()
        {
            DatItem datItem = new DatItems.Formats.File();
            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal("_1", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_File_CRC()
        {
            string hash = "deadbeef";
            DatItems.Formats.File datItem = new DatItems.Formats.File { CRC = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_File_MD5()
        {
            string hash = "000000000000000000000000deadbeef";
            DatItem datItem = new DatItems.Formats.File { MD5 = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_File_SHA1()
        {
            string hash = "00000000000000000000000000000000deadbeef";
            DatItem datItem = new DatItems.Formats.File { SHA1 = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_File_SHA256()
        {
            string hash = "00000000000000000000000000000000000000000000000000000000deadbeef";
            DatItem datItem = new DatItems.Formats.File { SHA256 = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Media_NoHash_Generic()
        {
            DatItem datItem = new Media();
            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal("_1", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Media_MD5()
        {
            string hash = "hash";
            DatItem datItem = new Media() { MD5 = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Media_SHA1()
        {
            string hash = "hash";
            DatItem datItem = new Media() { SHA1 = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Media_SHA256()
        {
            string hash = "hash";
            DatItem datItem = new Media() { SHA256 = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Media_SpamSum()
        {
            string hash = "hash";
            DatItem datItem = new Media() { SpamSum = hash };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_NoHash_Generic()
        {
            DatItem datItem = new Rom();
            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal("_1", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_CRC16()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                CRC16 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_CRC32()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                CRC32 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_CRC64()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                CRC64 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_MD2()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                MD2 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_MD4()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                MD4 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_MD5()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                MD5 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_RIPEMD128()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                RIPEMD128 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_RIPEMD160()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                RIPEMD160 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_SHA1()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                SHA1 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_SHA256()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                SHA256 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_SHA384()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                SHA384 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_SHA512()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                SHA512 = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Rom_SpamSum()
        {
            string hash = "hash";
            DatItem datItem = new Rom
            {
                SpamSum = hash
            };

            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal($"_{hash}", actual);
        }

        [Fact]
        public void GetDuplicateSuffix_Other_Generic()
        {
            DatItem datItem = new Sample();
            string actual = DatFile.GetDuplicateSuffix(datItem);
            Assert.Equal("_1", actual);
        }

        #endregion

        #region ResolveNames

        [Fact]
        public void ResolveNames_EmptyList_Empty()
        {
            List<DatItem> datItems = [];

            DatFile datFile = new Logiqx(null, useGame: false);

            List<DatItem> actual = datFile.ResolveNames(datItems);
            Assert.Empty(actual);
        }

        [Fact]
        public void ResolveNames_SingleItem_Single()
        {
            Machine machine = new Machine { Name = "machine" };

            Source source = new Source(0);

            Rom romA = new Rom
            {
                Name = "name",
                Size = 12345,
                CRC32 = "crc",
                Machine = (Machine)machine.Clone(),
                Source = (Source)source.Clone()
            };

            List<DatItem> datItems = [romA];

            DatFile datFile = new Logiqx(null, useGame: false);

            List<DatItem> actual = datFile.ResolveNames(datItems);
            DatItem actualItemA = Assert.Single(actual);
            Rom? actualRomA = actualItemA as Rom;
            Assert.NotNull(actualRomA);
            Assert.Equal("name", actualRomA.Name);
            Assert.Equal(12345, actualRomA.Size);
            Assert.Equal("crc", actualRomA.CRC32);
        }

        [Fact]
        public void ResolveNames_NonDuplicate_AllUntouched()
        {
            Machine machine = new Machine { Name = "machine" };

            Source source = new Source(0);

            Rom romA = new Rom
            {
                Name = "romA",
                Size = 12345,
                CRC32 = "crc",
                Machine = (Machine)machine.Clone(),
                Source = (Source)source.Clone()
            };

            Rom romB = new Rom
            {
                Name = "romB",
                Size = 23456,
                CRC32 = "crc2",
                Machine = (Machine)machine.Clone(),
                Source = (Source)source.Clone()
            };

            List<DatItem> datItems = [romA, romB];

            DatFile datFile = new Logiqx(null, useGame: false);

            List<DatItem> actual = datFile.ResolveNames(datItems);
            Assert.Equal(2, actual.Count);

            Rom? actualRomA = actual[0] as Rom;
            Assert.NotNull(actualRomA);
            Assert.Equal("romA", actualRomA.Name);
            Assert.Equal(12345, actualRomA.Size);
            Assert.Equal("crc", actualRomA.CRC32);

            Rom? actualRomB = actual[1] as Rom;
            Assert.NotNull(actualRomB);
            Assert.Equal("romB", actualRomB.Name);
            Assert.Equal(23456, actualRomB.Size);
            Assert.Equal("crc2", actualRomB.CRC32);
        }

        [Fact]
        public void ResolveNames_AllDuplicate_Single()
        {
            Machine machine = new Machine { Name = "machine" };

            Source source = new Source(0);

            Rom romA = new Rom
            {
                Name = "rom",
                Size = 12345,
                CRC32 = "crc",
                Machine = (Machine)machine.Clone(),
                Source = (Source)source.Clone()
            };

            Rom romB = new Rom
            {
                Name = "rom",
                Size = 12345,
                CRC32 = "crc",
                Machine = (Machine)machine.Clone(),
                Source = (Source)source.Clone()
            };

            List<DatItem> datItems = [romA, romB];

            DatFile datFile = new Logiqx(null, useGame: false);

            List<DatItem> actual = datFile.ResolveNames(datItems);
            DatItem actualItemA = Assert.Single(actual);
            Rom? actualRomA = actualItemA as Rom;
            Assert.NotNull(actualRomA);
            Assert.Equal("rom", actualRomA.Name);
            Assert.Equal(12345, actualRomA.Size);
            Assert.Equal("crc", actualRomA.CRC32);
        }

        [Fact]
        public void ResolveNames_NameMatch_SingleRenamed()
        {
            Machine machine = new Machine { Name = "machine" };

            Source source = new Source(0);

            Rom romA = new Rom
            {
                Name = "rom",
                Size = 12345,
                CRC32 = "crc",
                Machine = (Machine)machine.Clone(),
                Source = (Source)source.Clone()
            };

            Rom romB = new Rom
            {
                Name = "rom",
                Size = 23456,
                CRC32 = "crc2",
                Machine = (Machine)machine.Clone(),
                Source = (Source)source.Clone()
            };

            List<DatItem> datItems = [romA, romB];

            DatFile datFile = new Logiqx(null, useGame: false);

            List<DatItem> actual = datFile.ResolveNames(datItems);
            Assert.Equal(2, actual.Count);

            Rom? actualRomA = actual[0] as Rom;
            Assert.NotNull(actualRomA);
            Assert.Equal("rom", actualRomA.Name);
            Assert.Equal(12345, actualRomA.Size);
            Assert.Equal("crc", actualRomA.CRC32);

            Rom? actualRomB = actual[1] as Rom;
            Assert.NotNull(actualRomB);
            Assert.Equal("rom_crc2", actualRomB.Name);
            Assert.Equal(23456, actualRomB.Size);
            Assert.Equal("crc2", actualRomB.CRC32);
        }

        #endregion

        #region ResolveNamesDB

        [Fact]
        public void ResolveNamesDB_EmptyList_Empty()
        {
            List<KeyValuePair<long, DatItem>> mappings = [];

            DatFile datFile = new Logiqx(null, useGame: false);

            List<KeyValuePair<long, DatItem>> actual = datFile.ResolveNamesDB(mappings);
            Assert.Empty(actual);
        }

        [Fact]
        public void ResolveNamesDB_SingleItem_Single()
        {
            Machine machine = new Machine { Name = "machine" };

            Source source = new Source(0);

            Rom romA = new Rom
            {
                Name = "name",
                Size = 12345,
                CRC32 = "crc",
            };

            List<KeyValuePair<long, DatItem>> mappings =
            [
                new KeyValuePair<long, DatItem>(0, romA),
            ];
            DatFile datFile = new Logiqx(null, useGame: false);

            long sourceIndex = datFile.AddSourceDB(source);
            romA.SourceIndex = sourceIndex;
            long machineIndex = datFile.AddMachineDB(machine);
            romA.MachineIndex = machineIndex;

            List<KeyValuePair<long, DatItem>> actual = datFile.ResolveNamesDB(mappings);
            KeyValuePair<long, DatItem> actualItemA = Assert.Single(actual);
            Rom? actualRomA = actualItemA.Value as Rom;
            Assert.NotNull(actualRomA);
            Assert.Equal("name", actualRomA.Name);
            Assert.Equal(12345, actualRomA.Size);
            Assert.Equal("crc", actualRomA.CRC32);
        }

        [Fact]
        public void ResolveNamesDB_NonDuplicate_AllUntouched()
        {
            Machine machine = new Machine { Name = "machine" };

            Source source = new Source(0);

            Rom romA = new Rom
            {
                Name = "romA",
                Size = 12345,
                CRC32 = "crc",
            };

            Rom romB = new Rom
            {
                Name = "romB",
                Size = 23456,
                CRC32 = "crc2",
            };

            List<KeyValuePair<long, DatItem>> mappings =
            [
                new KeyValuePair<long, DatItem>(0, romA),
                new KeyValuePair<long, DatItem>(1, romB),
            ];
            DatFile datFile = new Logiqx(null, useGame: false);

            long sourceIndex = datFile.AddSourceDB(source);
            romA.SourceIndex = sourceIndex;
            romB.SourceIndex = sourceIndex;

            long machineIndex = datFile.AddMachineDB(machine);
            romA.MachineIndex = machineIndex;
            romB.MachineIndex = machineIndex;

            List<KeyValuePair<long, DatItem>> actual = datFile.ResolveNamesDB(mappings);
            Assert.Equal(2, actual.Count);

            Rom? actualRomA = actual[0].Value as Rom;
            Assert.NotNull(actualRomA);
            Assert.Equal("romA", actualRomA.Name);
            Assert.Equal(12345, actualRomA.Size);
            Assert.Equal("crc", actualRomA.CRC32);

            Rom? actualRomB = actual[1].Value as Rom;
            Assert.NotNull(actualRomB);
            Assert.Equal("romB", actualRomB.Name);
            Assert.Equal(23456, actualRomB.Size);
            Assert.Equal("crc2", actualRomB.CRC32);
        }

        [Fact]
        public void ResolveNamesDB_AllDuplicate_Single()
        {
            DatFile datFile = new Logiqx(null, useGame: false);

            Machine machine = new Machine { Name = "machine" };
            long machineIndex = datFile.AddMachineDB(machine);

            Source source = new Source(0);
            long sourceIndex = datFile.AddSourceDB(source);

            Rom romA = new Rom
            {
                SourceIndex = sourceIndex,
                MachineIndex = machineIndex,
                Name = "rom",
                Size = 12345,
                CRC32 = "crc"
            };
            long romAIndex = datFile.AddItemDB(romA, statsOnly: false);

            Rom romB = new Rom
            {
                SourceIndex = sourceIndex,
                MachineIndex = machineIndex,
                Name = "rom",
                Size = 12345,
                CRC32 = "crc"
            };
            long romBIndex = datFile.AddItemDB(romB, statsOnly: false);

            List<KeyValuePair<long, DatItem>> mappings =
            [
                new KeyValuePair<long, DatItem>(romAIndex, romA),
                new KeyValuePair<long, DatItem>(romBIndex, romB),
            ];

            List<KeyValuePair<long, DatItem>> actual = datFile.ResolveNamesDB(mappings);
            KeyValuePair<long, DatItem> actualItemA = Assert.Single(actual);
            Rom? actualRomA = actualItemA.Value as Rom;
            Assert.NotNull(actualRomA);
            Assert.Equal("rom", actualRomA.Name);
            Assert.Equal(12345, actualRomA.Size);
            Assert.Equal("crc", actualRomA.CRC32);
        }

        [Fact]
        public void ResolveNamesDB_NameMatch_SingleRenamed()
        {
            Machine machine = new Machine { Name = "machine" };

            Source source = new Source(0);

            Rom romA = new Rom
            {
                Name = "rom",
                Size = 12345,
                CRC32 = "crc",
            };

            Rom romB = new Rom
            {
                Name = "rom",
                Size = 23456,
                CRC32 = "crc2",
            };

            List<KeyValuePair<long, DatItem>> mappings =
            [
                new KeyValuePair<long, DatItem>(0, romA),
                new KeyValuePair<long, DatItem>(1, romB),
            ];
            DatFile datFile = new Logiqx(null, useGame: false);

            long sourceIndex = datFile.AddSourceDB(source);
            romA.SourceIndex = sourceIndex;
            romB.SourceIndex = sourceIndex;

            long machineIndex = datFile.AddMachineDB(machine);
            romA.MachineIndex = machineIndex;
            romB.MachineIndex = machineIndex;

            List<KeyValuePair<long, DatItem>> actual = datFile.ResolveNamesDB(mappings);
            Assert.Equal(2, actual.Count);

            Rom? actualRomA = actual[0].Value as Rom;
            Assert.NotNull(actualRomA);
            Assert.Equal("rom", actualRomA.Name);
            Assert.Equal(12345, actualRomA.Size);
            Assert.Equal("crc", actualRomA.CRC32);

            Rom? actualRomB = actual[1].Value as Rom;
            Assert.NotNull(actualRomB);
            Assert.Equal("rom_crc2", actualRomB.Name);
            Assert.Equal(23456, actualRomB.Size);
            Assert.Equal("crc2", actualRomB.CRC32);
        }

        #endregion

        #region ShouldIgnore

        [Fact]
        public void ShouldIgnore_NullItem_True()
        {
            DatItem? datItem = null;
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ShouldIgnore(datItem, ignoreBlanks: true);
            Assert.True(actual);
        }

        [Fact]
        public void ShouldIgnore_RemoveSet_True()
        {
            DatItem? datItem = new Rom { RemoveFlag = true };
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ShouldIgnore(datItem, ignoreBlanks: true);
            Assert.True(actual);
        }

        [Fact]
        public void ShouldIgnore_Blank_True()
        {
            DatItem? datItem = new Blank();
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ShouldIgnore(datItem, ignoreBlanks: true);
            Assert.True(actual);
        }

        [Fact]
        public void ShouldIgnore_IgnoreBlanksZeroRom_True()
        {
            DatItem? datItem = new Rom();
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ShouldIgnore(datItem, ignoreBlanks: true);
            Assert.True(actual);
        }

        [Fact]
        public void ShouldIgnore_NoIgnoreBlanksZeroRom_False()
        {
            DatItem? datItem = new Rom
            {
                Name = "name",
                Size = 12345,
                CRC32 = "crc"
            };
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ShouldIgnore(datItem, ignoreBlanks: false);
            Assert.False(actual);
        }

        [Fact]
        public void ShouldIgnore_UnsupportedType_True()
        {
            DatItem? datItem = new DatItems.Formats.SoftwareList();
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ShouldIgnore(datItem, ignoreBlanks: true);
            Assert.True(actual);
        }

        [Fact]
        public void ShouldIgnore_MissingRequired_True()
        {
            DatItem? datItem = new Rom
            {
                Name = "name",
                Size = 12345,
            };
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ShouldIgnore(datItem, ignoreBlanks: true);
            Assert.True(actual);
        }

        [Fact]
        public void ShouldIgnore_AllVerified_False()
        {
            DatItem? datItem = new Rom
            {
                Name = "name",
                Size = 12345,
                CRC32 = "crc",
                MD2 = "crc",
                MD4 = "crc",
                MD5 = "crc",
                RIPEMD128 = "crc",
                RIPEMD160 = "crc",
                SHA1 = "crc",
                SHA256 = "crc",
                SHA384 = "crc",
                SHA512 = "crc",
                SpamSum = "crc"
            };
            DatFile datFile = new Logiqx(null, useGame: false);

            bool actual = datFile.ShouldIgnore(datItem, ignoreBlanks: true);
            Assert.False(actual);
        }

        #endregion
    }
}
