Skip to content

Commit

Permalink
upgrade to 0.5.3
Browse files Browse the repository at this point in the history
  • Loading branch information
Kentalot committed Sep 13, 2023
1 parent ac2d5f4 commit 22de758
Show file tree
Hide file tree
Showing 34 changed files with 585 additions and 388 deletions.
49 changes: 25 additions & 24 deletions Ilmn.Das.App.Wittyer.Test/OverlapUtilsTest.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using Bio.Util;
using Ilmn.Das.App.Wittyer.Input;
using Ilmn.Das.App.Wittyer.Results;
using Ilmn.Das.App.Wittyer.Utilities;
Expand Down Expand Up @@ -39,10 +38,10 @@ public class OverlapUtilsTest
//public static readonly IContigAndInterval SecondaryContigAndInterval

[Theory] //1001, 1500, 5001, 5600
[InlineData(true, 900, 1100, 5200, 5700, true, FailedReason.Unset, MatchEnum.Coordinate, MatchEnum.Allele, MatchEnum.Genotype)]
[InlineData(false, 800, 900, 5500, 5555, true, FailedReason.BordersTooFarOff, MatchEnum.Coordinate, MatchEnum.Genotype)]
[InlineData(false, 100, 110, 5110, 5200, false, FailedReason.BordersTooFarOff, MatchEnum.Coordinate)]
[InlineData(true, 1000, 1200, 5100, 5700, false, FailedReason.GtMismatch, MatchEnum.Coordinate, MatchEnum.Allele)]
[InlineData(true, 900, 1100, 5200, 5700, true, FailedReason.Unset, MatchEnum.Coordinate, MatchEnum.Allele, MatchEnum.Genotype, MatchEnum.Length)]
[InlineData(false, 800, 900, 5500, 5555, true, FailedReason.BordersTooFarOff, MatchEnum.Coordinate, MatchEnum.Genotype, MatchEnum.Length)]
[InlineData(false, 100, 110, 5110, 5200, false, FailedReason.BordersTooFarOff, MatchEnum.Coordinate, MatchEnum.Length)]
[InlineData(true, 1000, 1200, 5100, 5700, false, FailedReason.GtMismatch, MatchEnum.Coordinate, MatchEnum.Allele, MatchEnum.Length)]
public void GenerateWhatAndWhyWorksForWittyerVariant(bool isAlleleMatch, uint posStart, uint posEnd, uint endStart, uint endEnd,
bool isGtMatch, FailedReason reasonResult, params MatchEnum[] matchResults)
{
Expand All @@ -65,20 +64,21 @@ public void GenerateWhatAndWhyWorksForWittyerVariant(bool isAlleleMatch, uint po

otherVariant.SetupGet(v => v.Sample).Returns(otherSample.Object);
var failedReasons = new List<FailedReason>();
var (what, why) = OverlappingUtils.GenerateWhatAndWhy(otherVariant.Object, failedReasons,
var (what, why, _, __) = OverlappingUtils.GenerateWhatAndWhy(otherVariant.Object, failedReasons,
originalVariant, OverlappingUtils.VariantMatch, false, false,
DefaultTandemRepeatSpec);
Assert.Equal(reasonResult, why);
Assert.True(what.SetEquals(matchResults));
Assert.Equal(matchResults.OrderBy(it => (int)it).StringJoin(","),
what.OrderBy(it => (int)it).StringJoin(","));
}

[Theory]
[InlineData(true, 900, 1100, 5200, 5700, true, 3, FailedReason.Unset, MatchEnum.Coordinate, MatchEnum.Allele, MatchEnum.Genotype)]
[InlineData(true, 900, 1100, 5200, 5700, true, 2, FailedReason.CnMismatch, MatchEnum.Coordinate, MatchEnum.Genotype)]
[InlineData(false, 800, 900, 5500, 5555, true, 3, FailedReason.BordersTooFarOff, MatchEnum.Coordinate, MatchEnum.Genotype)]
[InlineData(false, 100, 110, 5110, 5200, false, 1, FailedReason.BordersTooFarOff, MatchEnum.Coordinate)]
[InlineData(true, 1000, 1200, 5100, 5700, false, 3, FailedReason.GtMismatch, MatchEnum.Coordinate, MatchEnum.Allele)]
[InlineData(true, 1000, 1200, 5100, 5700, false, 1, FailedReason.CnMismatch, MatchEnum.Coordinate)]
[InlineData(true, 900, 1100, 5200, 5700, true, 3, FailedReason.Unset, MatchEnum.Coordinate, MatchEnum.Allele, MatchEnum.Genotype, MatchEnum.Length)]
[InlineData(true, 900, 1100, 5200, 5700, true, 2, FailedReason.CnMismatch, MatchEnum.Coordinate, MatchEnum.Genotype, MatchEnum.Length)]
[InlineData(false, 800, 900, 5500, 5555, true, 3, FailedReason.BordersTooFarOff, MatchEnum.Coordinate, MatchEnum.Genotype, MatchEnum.Length)]
[InlineData(false, 100, 110, 5110, 5200, false, 1, FailedReason.BordersTooFarOff, MatchEnum.Coordinate, MatchEnum.Length)]
[InlineData(true, 1000, 1200, 5100, 5700, false, 3, FailedReason.GtMismatch, MatchEnum.Coordinate, MatchEnum.Allele, MatchEnum.Length)]
[InlineData(true, 1000, 1200, 5100, 5700, false, 1, FailedReason.CnMismatch, MatchEnum.Coordinate, MatchEnum.Length)]
public void GenerateWhatAndWhyWorksWithCnSample(bool isAlleleMatch, uint posStart, uint posEnd, uint endStart, uint endEnd,
bool isGtMatch, uint cn, FailedReason reasonResult, params MatchEnum[] matchResults)
{
Expand All @@ -99,7 +99,7 @@ public void GenerateWhatAndWhyWorksWithCnSample(bool isAlleleMatch, uint posStar

otherVariant.SetupGet(v => v.Sample).Returns(otherSample.Object);

var (what, why) = OverlappingUtils.GenerateWhatAndWhy(otherVariant.Object, new List<FailedReason>(),
var (what, why, _, __) = OverlappingUtils.GenerateWhatAndWhy(otherVariant.Object, new List<FailedReason>(),
originalVariant, OverlappingUtils.VariantMatch, false, false,
DefaultTandemRepeatSpec);

Expand Down Expand Up @@ -133,6 +133,7 @@ private static Mock<IWittyerVariant> SetupBasicVariant(IContigAndInterval contig
variant.SetupGet(v => v.IsStartInclusive).Returns(contigAndInterval.IsStartInclusive);
variant.SetupGet(v => v.IsStopInclusive).Returns(contigAndInterval.IsStopInclusive);
variant.SetupGet(v => v.VariantType).Returns(WittyerType.CopyNumberGain);
variant.SetupGet(v => v.SvLenInterval).Returns(contigAndInterval);
return variant;
}

Expand Down Expand Up @@ -175,8 +176,8 @@ public void OverlapWorks_Dup(string truthVar, string queryVar, bool isTp)
Assert.Equal(WittyerType.Duplication, truthV.VariantType);
Assert.Equal(WittyerType.Duplication, queryV.VariantType);
OverlappingUtils.DoOverlapping(tree.VariantTrees, queryV, OverlappingUtils.VariantMatch, isCrossTypeOn, true);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches, null);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches, null);
Assert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalsePositive, queryV.Sample.Wit);
Assert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalseNegative, truthV.Sample.Wit);
}
Expand Down Expand Up @@ -233,8 +234,8 @@ public void OverlapWorks_Del(string truthVar, string queryVar, bool isTp)
Assert.Equal(WittyerType.Deletion, truthV.VariantType);
Assert.Equal(WittyerType.Deletion, queryV.VariantType);
OverlappingUtils.DoOverlapping(tree.VariantTrees, queryV, OverlappingUtils.VariantMatch, isCrossTypeOn, true);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches, null);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches, null);
Assert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalsePositive, queryV.Sample.Wit);
Assert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalseNegative, truthV.Sample.Wit);
}
Expand Down Expand Up @@ -272,8 +273,8 @@ public void OverlapWorks_Inv(string truthVar, string queryVar, bool isTp)
Assert.Equal(WittyerType.Inversion, truthV.VariantType);
Assert.Equal(WittyerType.Inversion, queryV.VariantType);
OverlappingUtils.DoOverlapping(tree.VariantTrees, queryV, OverlappingUtils.VariantMatch, isCrossTypeOn, true);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches, null);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches, null);
Assert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalsePositive, queryV.Sample.Wit);
Assert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalseNegative, truthV.Sample.Wit);
}
Expand Down Expand Up @@ -324,8 +325,8 @@ public void OverlapWorks_Vntr(string truthVar, string queryVar, bool isTp, int c
MultiAssert.Equal(WittyerType.CopyNumberTandemRepeat, truthV.VariantType);
MultiAssert.Equal(WittyerType.CopyNumberTandemRepeat, queryV.VariantType);
OverlappingUtils.DoOverlapping(tree.VariantTrees, queryV, OverlappingUtils.VariantMatch, isCrossTypeOn, true);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.GenotypeMatching, null, DefaultMaxMatches);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.GenotypeMatching, null, DefaultMaxMatches);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.GenotypeMatching, null, DefaultMaxMatches, null);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.GenotypeMatching, null, DefaultMaxMatches, null);
MultiAssert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalsePositive, queryV.Sample.Wit);
MultiAssert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalseNegative, truthV.Sample.Wit);
}
Expand Down Expand Up @@ -405,8 +406,8 @@ public void OverlapWorks_InsBnd(string truthVar, string queryVar, string type, b
{
OverlappingUtils.DoOverlapping(tree.BpInsTrees, queryV, OverlappingUtils.MatchBnd,
isCrossTypeOn, true, similarityThreshold: 0.85);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches);
queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches, null);
truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.CrossTypeAndSimpleCounting, null, DefaultMaxMatches, null);
if ((isTp ? WitDecision.TruePositive : WitDecision.FalsePositive) != queryV.Sample.Wit)
Assert.Equal(MatchSet.AlleleMatch.Select(it => it.ToStringDescription()).StringJoin("|"), queryV.Sample.What.StringJoin(","));
if ((isTp ? WitDecision.TruePositive : WitDecision.FalseNegative) != truthV.Sample.Wit)
Expand Down
1 change: 0 additions & 1 deletion Ilmn.Das.App.Wittyer.Test/SkipBinsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Ilmn.Das.App.Wittyer.Infrastructure;
using Ilmn.Das.App.Wittyer.Input;
using Ilmn.Das.App.Wittyer.Stats;
using Ilmn.Das.App.Wittyer.Utilities.Enums;
using Ilmn.Das.App.Wittyer.Vcf.Variants;
using Ilmn.Das.Core.Tries.Extensions;
using Ilmn.Das.Std.AppUtils.Collections;
Expand Down
1 change: 0 additions & 1 deletion Ilmn.Das.App.Wittyer.Test/TinyTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Ilmn.Das.App.Wittyer.Infrastructure;
using Ilmn.Das.App.Wittyer.Input;
using Ilmn.Das.App.Wittyer.Stats;
using Ilmn.Das.App.Wittyer.Utilities.Enums;
using Ilmn.Das.Core.Tries.Extensions;
using Ilmn.Das.Std.AppUtils.Misc;
using Ilmn.Das.Std.XunitUtils;
Expand Down
36 changes: 23 additions & 13 deletions Ilmn.Das.App.Wittyer.Test/VntrTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Ilmn.Das.App.Wittyer.Infrastructure;
using Ilmn.Das.App.Wittyer.Input;
using Ilmn.Das.App.Wittyer.Stats;
using Ilmn.Das.App.Wittyer.Utilities.Enums;
using Ilmn.Das.App.Wittyer.Vcf.Variants;
using Ilmn.Das.Core.Tries.Extensions;
using Ilmn.Das.Std.AppUtils.Misc;
Expand All @@ -28,7 +27,9 @@ public class VntrTest
public void VntrVsTruth_CrossType_Works()
{
var outputDirectory = Path.GetRandomFileName().ToDirectoryInfo();
var inputSpecs = InputSpec.GenerateDefaultInputSpecs(true).Select(i => InputSpec.Create(i.VariantType, i.BinSizes,
var inputSpecs = InputSpec.GenerateDefaultInputSpecs(true)
// .Where(it => it.VariantType != WittyerType.CopyNumberTandemReference)
.Select(i => InputSpec.Create(i.VariantType, i.BinSizes,
i.BasepairDistance, i.PercentThreshold, i.ExcludedFilters, i.IncludedFilters, IncludeBedFile.CreateFromBedFile(Bed)))
.ToDictionary(i => i.VariantType, i => i);
var wittyerSettings = WittyerSettings.Create(outputDirectory,
Expand All @@ -43,36 +44,42 @@ public void VntrVsTruth_CrossType_Works()
.GenerateSampleMetrics(truth, query, false, inputSpecs, true);
var cnTrStats = results.DetailedStats[Category.Create(WittyerType.CopyNumberTandemRepeat)].OverallStats[StatsType.Event];
// entries have been spot checked so these stats are assumed to be correct
MultiAssert.Equal(145U, cnTrStats.QueryStats.FalseCount);
MultiAssert.Equal(272U, cnTrStats.QueryStats.TrueCount);
MultiAssert.Equal(66U, cnTrStats.QueryStats.FalseCount);
MultiAssert.Equal(238U, cnTrStats.QueryStats.TrueCount);
MultiAssert.Equal(0U, cnTrStats.TruthStats.TrueCount);
MultiAssert.Equal(0U, cnTrStats.TruthStats.FalseCount);
var cnTrefStats = results.DetailedStats[Category.Create(WittyerType.CopyNumberTandemReference)].OverallStats[StatsType.Event];
// entries have been spot checked so these stats are assumed to be correct
MultiAssert.Equal(0U, cnTrefStats.QueryStats.FalseCount);
MultiAssert.Equal(113U, cnTrefStats.QueryStats.TrueCount);
MultiAssert.Equal(0U, cnTrefStats.TruthStats.TrueCount);
MultiAssert.Equal(0U, cnTrefStats.TruthStats.FalseCount);
var insertionStats = results.DetailedStats[Category.Create(WittyerType.Insertion)].OverallStats[StatsType.Event];
MultiAssert.Equal(206U, insertionStats.TruthStats.TrueCount);
MultiAssert.Equal(197U, insertionStats.TruthStats.FalseCount);
MultiAssert.Equal(244U, insertionStats.TruthStats.TrueCount);
MultiAssert.Equal(159U, insertionStats.TruthStats.FalseCount);
var deletionStats = results.DetailedStats[Category.Create(WittyerType.Deletion)].OverallStats[StatsType.Event];
MultiAssert.Equal(142U, deletionStats.TruthStats.TrueCount);
MultiAssert.Equal(195U, deletionStats.TruthStats.FalseCount);
MultiAssert.Equal(180U, deletionStats.TruthStats.TrueCount);
MultiAssert.Equal(157U, deletionStats.TruthStats.FalseCount);
var dupStats = results.DetailedStats[Category.Create(WittyerType.Duplication)].OverallStats[StatsType.Event];
MultiAssert.Equal(0U, dupStats.TruthStats.TrueCount);
MultiAssert.Equal(0U, dupStats.TruthStats.FalseCount);
MultiAssert.Equal(
new[] { Quantify.DelAndCnTrLossCategory, Quantify.InsAndCnTrGainCategory, Quantify.RefAndCnTrCategory }.Sum(it =>
new[] { Quantify.DelAndCnTrLossCategory, Quantify.InsAndCnTrGainCategory, Quantify.RefAndCnTrefCategory }.Sum(it =>
results.DetailedStats[it].OverallStats[StatsType.Event].TruthStats.TrueCount),
new[] { WittyerType.Deletion, WittyerType.Insertion, WittyerType.CopyNumberTandemRepeat }.Sum(it =>
results.DetailedStats[Category.Create(it)].OverallStats[StatsType.Event].TruthStats.TrueCount));
MultiAssert.Equal(
new[] { Quantify.DelAndCnTrLossCategory, Quantify.InsAndCnTrGainCategory, Quantify.RefAndCnTrCategory }.Sum(it =>
new[] { Quantify.DelAndCnTrLossCategory, Quantify.InsAndCnTrGainCategory, Quantify.RefAndCnTrefCategory }.Sum(it =>
results.DetailedStats[it].OverallStats[StatsType.Event].TruthStats.FalseCount),
new[] { WittyerType.Deletion, WittyerType.Insertion, WittyerType.CopyNumberTandemRepeat }.Sum(it =>
results.DetailedStats[Category.Create(it)].OverallStats[StatsType.Event].TruthStats.FalseCount));
MultiAssert.Equal(
new[] { Quantify.DelAndCnTrLossCategory, Quantify.InsAndCnTrGainCategory, Quantify.RefAndCnTrCategory }.Sum(it =>
new[] { Quantify.DelAndCnTrLossCategory, Quantify.InsAndCnTrGainCategory, Quantify.RefAndCnTrefCategory }.Sum(it =>
results.DetailedStats[it].OverallStats[StatsType.Event].QueryStats.TrueCount),
new[] { WittyerType.Deletion, WittyerType.Insertion, WittyerType.CopyNumberTandemRepeat }.Sum(it =>
results.DetailedStats[Category.Create(it)].OverallStats[StatsType.Event].QueryStats.TrueCount));
MultiAssert.Equal(
new[] { Quantify.DelAndCnTrLossCategory, Quantify.InsAndCnTrGainCategory, Quantify.RefAndCnTrCategory }.Sum(it =>
new[] { Quantify.DelAndCnTrLossCategory, Quantify.InsAndCnTrGainCategory, Quantify.RefAndCnTrefCategory }.Sum(it =>
results.DetailedStats[it].OverallStats[StatsType.Event].QueryStats.FalseCount),
new[] { WittyerType.Deletion, WittyerType.Insertion, WittyerType.CopyNumberTandemRepeat }.Sum(it =>
results.DetailedStats[Category.Create(it)].OverallStats[StatsType.Event].QueryStats.FalseCount));
Expand All @@ -83,7 +90,9 @@ public void VntrVsTruth_CrossType_Works()
public void VntrVsTruth_CrossType_Off_Works()
{
var outputDirectory = Path.GetRandomFileName().ToDirectoryInfo();
var inputSpecs = InputSpec.GenerateDefaultInputSpecs(false).Select(i => InputSpec.Create(i.VariantType, i.BinSizes,
var inputSpecs = InputSpec.GenerateDefaultInputSpecs(false)
.Where(it => it.VariantType != WittyerType.CopyNumberTandemReference)
.Select(i => InputSpec.Create(i.VariantType, i.BinSizes,
i.BasepairDistance, i.PercentThreshold, i.ExcludedFilters, i.IncludedFilters, IncludeBedFile.CreateFromBedFile(Bed)))
.ToDictionary(i => i.VariantType, i => i);
var wittyerSettings = WittyerSettings.Create(outputDirectory,
Expand Down Expand Up @@ -119,6 +128,7 @@ public void VntrVsVntr_Works()
{
var outputDirectory = Path.GetRandomFileName().ToDirectoryInfo();
var inputSpecs = InputSpec.GenerateDefaultInputSpecs(true)
.Where(it => it.VariantType != WittyerType.CopyNumberTandemReference)
.ToDictionary(i => i.VariantType, i => i);
var wittyerSettings = WittyerSettings.Create(outputDirectory, Truth, Query,
ImmutableList<ISamplePair>.Empty, EvaluationMode.CrossTypeAndSimpleCounting,
Expand Down
2 changes: 1 addition & 1 deletion Ilmn.Das.App.Wittyer.Test/WittyerVariantTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public static void WittyerVariantCreateCorrectly(string variant, uint posStart,

MultiAssert.Equal(expectedStart, wittyerVariant.PosInterval);
MultiAssert.Equal(expectedEnd, wittyerVariant.EndInterval);
MultiAssert.Equal(winner, wittyerVariant.Win.ToString());
MultiAssert.Equal(winner, wittyerVariant.Win.ToWinTag(wittyerVariant.VariantType));
MultiAssert.AssertAll();
}

Expand Down
1 change: 0 additions & 1 deletion Ilmn.Das.App.Wittyer.Test/WittyerVcfWriterTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
using Ilmn.Das.Std.AppUtils.Collections;
using Ilmn.Das.Std.AppUtils.Misc;
using Ilmn.Das.Std.BioinformaticUtils.Contigs;
using Ilmn.Das.Std.VariantUtils.SimpleVariants;
using Ilmn.Das.Std.VariantUtils.Vcf;
using Ilmn.Das.Std.VariantUtils.Vcf.Headers;
using Xunit;
Expand Down
1 change: 1 addition & 0 deletions Ilmn.Das.App.Wittyer.sln
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ReleaseNotes", "ReleaseNote
docs\release-notes\v0.5.0.md = docs\release-notes\v0.5.0.md
docs\release-notes\v0.5.1.md = docs\release-notes\v0.5.1.md
docs\release-notes\v0.5.2.md = docs\release-notes\v0.5.2.md
docs\release-notes\v0.5.3.md = docs\release-notes\v0.5.3.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{3CCBABA0-BF50-4691-86B3-B2AC662A4F30}"
Expand Down
Loading

0 comments on commit 22de758

Please sign in to comment.