static async Task Run(Dictionary <State, string> dictionary, string sourceJsonPath, string targetJsonPath)
    {
        var features = JsonSerializer.DeserializeGeo(sourceJsonPath);

        foreach (var stateUrl in dictionary)
        {
            var state = stateUrl.Key;
            RemoveStateFromFeatures(features, state);

            var targetPath = Path.Combine(DataLocations.TempPath, $"{state}.zip");
            await Downloader.DownloadFile(targetPath, stateUrl.Value);

            var extractDirectory = Path.Combine(DataLocations.TempPath, $"{state}_extract");
            ZipFile.ExtractToDirectory(targetPath, extractDirectory);
            StatisticalAreaCleaner.DeleteStatisticalAreaFiles(extractDirectory);
            var featureCollection = WriteState(state, IoHelpers.FindFile(extractDirectory, "shp"));
            features.Features.AddRange(featureCollection.Features);
            File.Delete(targetPath);
            Directory.Delete(extractDirectory, true);
        }

        features.FixBoundingBox();
        JsonSerializer.SerializeGeo(features, targetJsonPath);
    }