Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce runtime for and allocations from BaseConsoleLogger.IndentString #8934

Merged

Conversation

jdrobison
Copy link
Contributor

@jdrobison jdrobison commented Jun 22, 2023

Fixes Bug 1828095: [GCPauseWatson] MSBuild: BaseConsoleLogger.IndentString uses String.Split and StringBuilder to create an indented string

GCPauseWatson telemetry showed that BaseConsoleLogger.IndentString is responsible for allocating 1.99 GB of memory in VS at the 95th percentile. This change aims to address that by replacing the multiple allocations of String.Split and StringBuilder with code that makes a single allocation of a right-sized string and then builds the indented string directly in the new string's buffer.

Benchmarking shows that -- depending on the target framework -- the new algorithm runs in 50-75% of the time of the code it replaces, and allocates 15-30% of the memory. The optimizations have more of an impact on net472 than on net7.0 due to the String and StringBuilder optimizations included in net7.0.

``` BenchmarkDotNet=v0.13.5, OS=Windows 11 (10.0.22631.1900) Intel Core i9-10900 CPU 2.80GHz, 1 CPU, 20 logical and 10 physical cores [Host] : .NET Framework 4.8.1 (4.8.9166.0), X64 RyuJIT VectorSize=256 .NET 7.0 : .NET 7.0.7 (7.0.723.27404), X64 RyuJIT AVX2 .NET Framework 4.7.2 : .NET Framework 4.8.1 (4.8.9166.0), X64 RyuJIT VectorSize=256
Method Runtime StringCount Mean Ratio Gen0 Gen1 Allocated Alloc Ratio
Original .NET 7.0 2 1,165.9 ns 1.00 0.3052 - 3192 B 1.00
Optimized .NET 7.0 2 803.1 ns 0.69 0.0925 - 976 B 0.31
Original .NET Framework 4.7.2 2 1,832.6 ns 1.00 1.0567 0.0038 6660 B 1.00
Optimized .NET Framework 4.7.2 2 909.1 ns 0.50 0.1554 - 979 B 0.15
Original .NET 7.0 4 1,857.7 ns 1.00 0.5150 - 5400 B 1.00
Optimized .NET 7.0 4 1,383.5 ns 0.74 0.1545 - 1632 B 0.30
Original .NET Framework 4.7.2 4 3,119.1 ns 1.00 1.7738 0.0038 11177 B 1.00
Optimized .NET Framework 4.7.2 4 1,603.1 ns 0.51 0.2613 - 1653 B 0.15
Original .NET 7.0 8 3,642.3 ns 1.00 0.9766 - 10232 B 1.00
Optimized .NET 7.0 8 2,716.4 ns 0.75 0.2937 - 3096 B 0.30
Original .NET Framework 4.7.2 8 5,984.5 ns 1.00 3.3417 0.0076 21070 B 1.00
Optimized .NET Framework 4.7.2 8 3,130.6 ns 0.52 0.4997 - 3145 B 0.15
Original .NET 7.0 16 6,457.6 ns 1.00 1.7242 - 18096 B 1.00
Optimized .NET 7.0 16 4,698.2 ns 0.73 0.5188 - 5424 B 0.30
Original .NET Framework 4.7.2 16 10,747.7 ns 1.00 5.8136 0.0153 36628 B 1.00
Optimized .NET Framework 4.7.2 16 5,735.8 ns 0.53 0.8698 - 5504 B 0.15
Original .NET 7.0 32 12,028.4 ns 1.00 3.1891 - 33360 B 1.00
Optimized .NET 7.0 32 9,267.4 ns 0.77 0.9460 - 9920 B 0.30
Original .NET Framework 4.7.2 32 20,126.2 ns 1.00 10.6201 0.0305 66918 B 1.00
Optimized .NET Framework 4.7.2 32 10,968.9 ns 0.54 1.6022 - 10102 B 0.15
Original .NET 7.0 64 24,792.3 ns 1.00 6.3477 - 66552 B 1.00
Optimized .NET 7.0 64 18,397.9 ns 0.74 1.8921 - 19832 B 0.30
Original .NET Framework 4.7.2 64 40,532.2 ns 1.00 21.1792 - 133610 B 1.00
Optimized .NET Framework 4.7.2 64 22,522.4 ns 0.56 3.1738 - 20131 B 0.15
Original .NET 7.0 128 50,012.8 ns 1.00 12.2681 - 128672 B 1.00
Optimized .NET 7.0 128 37,066.0 ns 0.74 3.6011 - 38136 B 0.30
Original .NET Framework 4.7.2 128 78,969.9 ns 1.00 40.7715 - 256999 B 1.00
Optimized .NET Framework 4.7.2 128 44,377.9 ns 0.56 6.1646 - 38827 B 0.15
Original .NET 7.0 256 95,493.7 ns 1.00 23.6816 - 248544 B 1.00
Optimized .NET 7.0 256 71,305.1 ns 0.75 6.9580 - 73360 B 0.30
Original .NET Framework 4.7.2 256 151,293.4 ns 1.00 78.1250 - 492317 B 1.00
Optimized .NET Framework 4.7.2 256 86,210.2 ns 0.57 11.8408 - 74645 B 0.15
Original .NET 7.0 512 190,107.9 ns 1.00 47.1191 - 494032 B 1.00
Optimized .NET 7.0 512 142,247.7 ns 0.75 13.9160 - 145728 B 0.29
Original .NET Framework 4.7.2 512 301,655.3 ns 1.00 155.2734 - 978898 B 1.00
Optimized .NET Framework 4.7.2 512 177,835.2 ns 0.59 23.4375 - 148296 B 0.15
</details>

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
@danmoseley
Copy link
Member

danmoseley commented Jun 22, 2023

@stephentoub do we officially support writing directly into a string like this (it is newly created)? I know we do it in StringBuilder but that's corelib.
Also do you see any opportunities to make the change in this PR more efficient still? Just for my edification

@stephentoub
Copy link
Member

stephentoub commented Jun 22, 2023

do we officially support writing directly into a string like this (it is newly created)?

Most definitely no. It will work today. Zero guarantees about it working tomorrow.

@danmoseley
Copy link
Member

I guess then it should use StringBuilder and then ToString(), which is allowed to do it😊
And string.Create if multi targeting

@danmoseley
Copy link
Member

Zero guarantees about it working tomorrow.

Just curious, how could it break? Assuming it's a fresh string, not interned, no other references, it's fixed and they stay inside it.
Ah - because a future implementation could allocate on a ro page?

@stephentoub
Copy link
Member

Ah - because a future implementation could allocate on a ro page?

For example, yes. Or it could intern it and hand the same instance out to someone else who created a string of the same length and contents as provided to the ctor. Or other such things.

@davkean
Copy link
Member

davkean commented Jun 22, 2023

Most definitely no. It will work today. Zero guarantees about it working tomorrow.

There is no way this can be broken on .NET Framework given how many places this is done. This would break a lot. All usage I've seen over the years is via string that the person just created.

@danmoseley
Copy link
Member

Is a pooled StringBuilder less desirable?

Either way there's no reason to do it on .NET Core.

@davkean
Copy link
Member

davkean commented Jun 22, 2023

Agreed on .NET Core, I personally missed that these APIs were added.

A pooled string builder could be a replacement, but not always convenient in larger strings where you don't want to put the resulting builder back into the pool to avoid leaking. It also chunks in 8K blocks for reasons I don't understand.

@rainersigwald
Copy link
Member

Can you share your benchmark code please?

@danmoseley
Copy link
Member

It also chunks in 8K blocks for reasons I don't understand.

To avoid copies on resize and LOH I guess. Something we might consider in future is adding a mechanism to give a SB its buffers so we can pool nicely sized ones.

@danmoseley
Copy link
Member

danmoseley commented Jun 22, 2023

Of course this change could add such a thing locally.

@davkean
Copy link
Member

davkean commented Jun 22, 2023

It is sized to be under LOH, but LOH is 85K. :)

Anyway, if StringBuilder pooling was good enough, String.Create wouldn't be needed.

@danmoseley
Copy link
Member

Pooling has a cost, and also assumes it will be used again. String create is just straight line cost.

@rainersigwald
Copy link
Member

For this case, I'd really like to see benchmarks on the much more maintainable approach of avoiding String.Split in favor of using StringBuilder.Append(fullstring, startIndex, count) with a pooled StringBuilder.

@davkean
Copy link
Member

davkean commented Jun 22, 2023

Sure, I'm sure Jeff can provide that, I've added a link to the telemetry data in the bug, at its worse this path allocates 358 MB/s over a 60 second period, 70% of which ends up on the LOH. Anything is better than String.Split.

@ryanmolden
Copy link

For this case, I'd really like to see benchmarks on the much more maintainable approach of avoiding String.Split in favor of using StringBuilder.Append(fullstring, startIndex, count) with a pooled StringBuilder.

StringBuilder is kind of terrible for these kinds of situations as it copies the incoming strings into char[]'s just to then allocate a .NET string off them, which means memory will be 2x the incoming string length (actually likely more due to how StringBuilder works internally).

When you are processing an incoming string and returning the result within the same call, in hot path areas (as GCPauseWatson has shown this to be), we are well past the point where we can choose the easiest solution, as we have ample evidence (i.e. thousands of results in GCPauseWatson of users experiencing long GC pauses due to heavy allocation activity in short time spans) showing it simply doesn't scale.

Simply eliminating String.Split is a definite win either way, but creating unnecessary char[]s that cause GC pressure and more frequent long duration GCs is not a winning strategy.

@jdrobison
Copy link
Contributor Author

jdrobison commented Jun 23, 2023

Benchmark source is here.

TL;DR

CachedStringBuilder is very slightly slower and more memory hungry than Optimized, but still a substantial improvement over Original.

Summary

I added a new benchmark, CachedStringBuilder. It uses StringBuilder.Append(string s, int startIndex, int count) and caches the builder it uses until the builder's capacity becomes too big. For the purposes of the benchmark, "too big" is 512 characters. Since none of the test data we feed the benchmarks is big enough to make the capacity too big, I added code to the benchmark to artificially inflate the builder's capacity to double the threshold every 100th time it's used, causing it to be discarded.

Full results below, but to summarize:

Method Runtime CPU Ratio Alloc Ratio
Original .NET 7.0 1.00 1.00
Optimized .NET 7.0 0.66-0.76 0.29-0.31
CachedStringBuilder .NET 7.0 0.77-0.92 0.34-0.36
Original .NET Framework 4.7.2 1.00 1.00
Optimized .NET Framework 4.7.2 0.45-0.53 0.15-0.15
CachedStringBuilder .NET Framework 4.7.2 0.55-0.71 0.16-0.19

Proposal

I propose using CachedStringBuilder in the product instead of Optimized, since I think the maintainability gain outweighs the small perf loss. I welcome feedback on the 512 character (1024 byte) upper bound on the cached builder's capacity.

Results

``` BenchmarkDotNet=v0.13.5, OS=Windows 11 (10.0.22631.1900) Intel Core i9-10900 CPU 2.80GHz, 1 CPU, 20 logical and 10 physical cores [Host] : .NET Framework 4.8.1 (4.8.9166.0), X64 RyuJIT VectorSize=256 .NET 7.0 : .NET 7.0.7 (7.0.723.27404), X64 RyuJIT AVX2 .NET Framework 4.7.2 : .NET Framework 4.8.1 (4.8.9166.0), X64 RyuJIT VectorSize=256
Method Runtime StringCount Mean Ratio Gen0 Gen1 Allocated Alloc Ratio
Original .NET 7.0 2 1,199.2 ns 1.00 0.3052 - 3192 B 1.00
Optimized .NET 7.0 2 793.0 ns 0.66 0.0925 - 976 B 0.31
CachedStringBuilder .NET 7.0 2 924.6 ns 0.77 0.1030 0.0010 1086 B 0.34
Original .NET Framework 4.7.2 2 1,877.7 ns 1.00 1.0567 0.0038 6660 B 1.00
Optimized .NET Framework 4.7.2 2 839.7 ns 0.45 0.1554 - 979 B 0.15
CachedStringBuilder .NET Framework 4.7.2 2 1,034.1 ns 0.55 0.1717 - 1089 B 0.16
Original .NET 7.0 4 1,872.6 ns 1.00 0.5150 - 5400 B 1.00
Optimized .NET 7.0 4 1,356.8 ns 0.72 0.1545 - 1632 B 0.30
CachedStringBuilder .NET 7.0 4 1,596.9 ns 0.85 0.1755 - 1852 B 0.34
Original .NET Framework 4.7.2 4 3,140.2 ns 1.00 1.7738 0.0038 11177 B 1.00
Optimized .NET Framework 4.7.2 4 1,435.2 ns 0.46 0.2613 - 1653 B 0.15
CachedStringBuilder .NET Framework 4.7.2 4 1,866.6 ns 0.59 0.2975 0.0019 1873 B 0.17
Original .NET 7.0 8 3,672.4 ns 1.00 0.9766 - 10232 B 1.00
Optimized .NET 7.0 8 2,632.1 ns 0.72 0.2937 - 3096 B 0.30
CachedStringBuilder .NET 7.0 8 3,121.8 ns 0.85 0.3395 - 3568 B 0.35
Original .NET Framework 4.7.2 8 6,044.8 ns 1.00 3.3417 0.0076 21070 B 1.00
Optimized .NET Framework 4.7.2 8 2,815.4 ns 0.47 0.4997 - 3145 B 0.15
CachedStringBuilder .NET Framework 4.7.2 8 3,692.9 ns 0.61 0.5722 0.0038 3619 B 0.17
Original .NET 7.0 16 6,517.9 ns 1.00 1.7242 - 18096 B 1.00
Optimized .NET 7.0 16 4,822.1 ns 0.74 0.5188 - 5424 B 0.30
CachedStringBuilder .NET 7.0 16 5,845.4 ns 0.90 0.6104 - 6384 B 0.35
Original .NET Framework 4.7.2 16 11,076.8 ns 1.00 5.8136 0.0153 36628 B 1.00
Optimized .NET Framework 4.7.2 16 5,215.0 ns 0.47 0.8698 - 5504 B 0.15
CachedStringBuilder .NET Framework 4.7.2 16 6,967.4 ns 0.63 1.0223 0.0076 6467 B 0.18
Original .NET 7.0 32 12,254.0 ns 1.00 3.1891 - 33360 B 1.00
Optimized .NET 7.0 32 9,225.7 ns 0.75 0.9460 - 9920 B 0.30
CachedStringBuilder .NET 7.0 32 11,226.0 ns 0.92 1.1292 - 11914 B 0.36
Original .NET Framework 4.7.2 32 20,412.8 ns 1.00 10.6201 0.0305 66918 B 1.00
Optimized .NET Framework 4.7.2 32 10,235.6 ns 0.50 1.6022 - 10102 B 0.15
CachedStringBuilder .NET Framework 4.7.2 32 13,646.6 ns 0.67 1.9226 0.0153 12102 B 0.18
Original .NET 7.0 64 25,430.1 ns 1.00 6.3477 - 66552 B 1.00
Optimized .NET 7.0 64 19,275.0 ns 0.76 1.8921 - 19832 B 0.30
CachedStringBuilder .NET 7.0 64 23,348.2 ns 0.92 2.2888 - 23946 B 0.36
Original .NET Framework 4.7.2 64 42,402.2 ns 1.00 21.1792 - 133610 B 1.00
Optimized .NET Framework 4.7.2 64 20,796.4 ns 0.49 3.1738 - 20131 B 0.15
CachedStringBuilder .NET Framework 4.7.2 64 28,076.8 ns 0.67 3.8452 0.0305 24257 B 0.18
Original .NET 7.0 128 50,468.3 ns 1.00 12.2681 - 128672 B 1.00
Optimized .NET 7.0 128 36,541.1 ns 0.72 3.6011 - 38136 B 0.30
CachedStringBuilder .NET 7.0 128 45,419.6 ns 0.90 4.4556 - 46663 B 0.36
Original .NET Framework 4.7.2 128 80,274.4 ns 1.00 40.7715 - 256999 B 1.00
Optimized .NET Framework 4.7.2 128 41,302.9 ns 0.51 6.1646 - 38827 B 0.15
CachedStringBuilder .NET Framework 4.7.2 128 55,773.9 ns 0.69 7.5073 0.0610 47380 B 0.18
Original .NET 7.0 256 99,474.4 ns 1.00 23.6816 - 248544 B 1.00
Optimized .NET 7.0 256 74,680.4 ns 0.75 6.9580 - 73360 B 0.30
CachedStringBuilder .NET 7.0 256 91,031.4 ns 0.92 8.5449 - 89679 B 0.36
Original .NET Framework 4.7.2 256 158,569.1 ns 1.00 78.1250 - 492317 B 1.00
Optimized .NET Framework 4.7.2 256 82,461.7 ns 0.51 11.8408 - 74645 B 0.15
CachedStringBuilder .NET Framework 4.7.2 256 109,993.1 ns 0.68 14.4043 0.1221 91011 B 0.18
Original .NET 7.0 512 195,960.4 ns 1.00 47.1191 - 494032 B 1.00
Optimized .NET 7.0 512 143,676.0 ns 0.73 13.9160 - 145728 B 0.29
CachedStringBuilder .NET 7.0 512 178,509.9 ns 0.91 16.8457 - 178479 B 0.36
Original .NET Framework 4.7.2 512 309,862.3 ns 1.00 155.2734 - 978901 B 1.00
Optimized .NET Framework 4.7.2 512 163,128.3 ns 0.53 23.4375 - 148296 B 0.15
CachedStringBuilder .NET Framework 4.7.2 512 218,736.3 ns 0.71 28.5645 0.2441 181142 B 0.19
</details>

@danmoseley
Copy link
Member

@stephentoub i wonder what we could do (in .NET Core only, of course) to help make it possible to get closer to the unsafe/unsupported performance seen here.

@davkean
Copy link
Member

davkean commented Jun 23, 2023

Does Benchmark.net show LOH? There were traces with LOH contribution here, so strings splits were greater than 42KB that you might want to check.

@stephentoub
Copy link
Member

stephentoub commented Jun 23, 2023

@stephentoub i wonder what we could do (in .NET Core only, of course) to help make it possible to get closer to the unsafe/unsupported performance seen here.

What are these words could and closer you're using?

Method StringCount Mean Ratio Allocated
Nerdsnipe 2 263.6 ns 0.29 976 B
Optimized 2 900.4 ns 1.00 976 B
Nerdsnipe 4 434.8 ns 0.29 1632 B
Optimized 4 1,516.7 ns 1.00 1632 B
Nerdsnipe 8 870.5 ns 0.29 3096 B
Optimized 8 2,982.0 ns 1.00 3096 B
Nerdsnipe 16 1,629.6 ns 0.31 5424 B
Optimized 16 5,285.3 ns 1.00 5424 B
Nerdsnipe 32 3,093.2 ns 0.30 9920 B
Optimized 32 10,215.0 ns 1.00 9920 B
Nerdsnipe 64 6,506.3 ns 0.32 19832 B
Optimized 64 21,003.1 ns 1.00 19832 B
Nerdsnipe 128 12,650.7 ns 0.30 38136 B
Optimized 128 42,192.0 ns 1.00 38136 B
Nerdsnipe 256 27,386.6 ns 0.33 73360 B
Optimized 256 82,771.1 ns 1.00 73360 B
Nerdsnipe 512 67,021.5 ns 0.39 145728 B
Optimized 512 170,661.7 ns 1.00 145728 B
using System;
using System.Buffers;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Running;

#pragma warning disable CS8500
#nullable enable

// Sanity check same results
var indenter = new MsBuildIndent() { StringCount = 10 };
foreach (string s in MsBuildIndent._fixedStringsToIndent)
{
    string[] first = indenter.Nerdsnipe().ToArray();
    string[] second = indenter.Optimized().ToArray();
    if (!first.SequenceEqual(second)) throw new Exception("Not equal");
}

// Run benchmarks
BenchmarkRunner.Run<MsBuildIndent>();

[MemoryDiagnoser]
[SimpleJob(RuntimeMoniker.Net80)]
public class MsBuildIndent
{
    private readonly List<string> _list = new();
    private const int Indent = 5;

    [Params(2, 4, 8, 16, 32, 64, 128, 256, 512)]
    public int StringCount { get; set; }

    private string[] _stringsToIndent = _fixedStringsToIndent;

    private List<string> Run(Func<string, int, string> indent)
    {
        List<string> results = _list;
        results.Clear();

        for (int i = 0; i < StringCount; i++)
        {
            results.Add(indent(_stringsToIndent[i], Indent));
        }

        return results;
    }





    [Benchmark]
    public List<string> Nerdsnipe() => Run(NerdsnipeStringIndenter.IndentString);

    private static unsafe class NerdsnipeStringIndenter
    {
        [SkipLocalsInit]
        internal static string IndentString(string? s, int indent)
        {
            if (s is null)
            {
                return string.Empty;
            }

            Span<StringSegment> segments = GetStringSegments(s, stackalloc StringSegment[128], out StringSegment[]? pooledArray);

            int indentedStringLength = segments.Length * (Environment.NewLine.Length + indent);
            foreach (StringSegment segment in segments)
            {
                indentedStringLength += segment.Length;
            }

            string result = string.Create(indentedStringLength, (s, (IntPtr)(&segments), indent), static (output, state) =>
            {
                ReadOnlySpan<char> input = state.s;
                foreach (StringSegment segment in *(Span<StringSegment>*)state.Item2)
                {
                    // Append indent
                    output.Slice(0, state.indent).Fill(' ');
                    output = output.Slice(state.indent);

                    // Append string segment
                    input.Slice(0, segment.Length).CopyTo(output);
                    input = input.Slice(segment.TotalLength);
                    output = output.Slice(segment.Length);

                    // Append newline
                    Environment.NewLine.CopyTo(output);
                    output = output.Slice(Environment.NewLine.Length);
                }
            });

            if (pooledArray is not null)
            {
                ArrayPool<StringSegment>.Shared.Return(pooledArray);
            }

            return result;
        }

        private static Span<StringSegment> GetStringSegments(ReadOnlySpan<char> input, Span<StringSegment> segments, out StringSegment[]? pooledArray)
        {
            if (input.IsEmpty)
            {
                segments = segments.Slice(0, 1);
                segments[0] = new StringSegment(0, 0);
                pooledArray = null;
                return segments;
            }

            int segmentCount = 1 + input.Count('\n');

            if (segmentCount <= segments.Length)
            {
                pooledArray = null;
                segments = segments.Slice(0, segmentCount);
            }
            else
            {
                pooledArray = ArrayPool<StringSegment>.Shared.Rent(segments.Length);
                segments = pooledArray.AsSpan(0, segmentCount);
            }

            for (int i = 0; i < segments.Length; i++)
            {
                int index = input.IndexOf('\n');
                if (index < 0)
                {
                    segments[i] = new StringSegment(input.Length, 0);
                    break;
                }

                int newLineLength = 1;
                if (index > 0 && input[index - 1] == '\r')
                {
                    newLineLength++;
                    index--;
                }

                segments[i] = new StringSegment(index, newLineLength);

                input = input.Slice(index + newLineLength);
            }

            return segments;
        }

        private readonly record struct StringSegment(int Length, int NewLineLength)
        {
            public int TotalLength => Length + NewLineLength;
        }
    }








    [Benchmark(Baseline = true)]
    public List<string> Optimized() => Run(OptimizedStringIndenter.IndentString);

    private static class OptimizedStringIndenter
    {
        internal static string IndentString(string? s, int indent)
        {
            if (s is null)
            {
                return string.Empty;
            }

            string newLine = Environment.NewLine;

            using PooledSpan<StringSegment> segments = GetStringSegments(s);
            int indentedStringLength = ComputeIndentedStringLength(segments, newLine, indent);
            string indented = new string('\0', indentedStringLength);

            unsafe
            {
                fixed (char* pInput = s)
                fixed (char* pIndented = indented)
                {
                    char* pSegment = pInput;
                    char* pOutput = pIndented;

                    foreach (var segment in segments)
                    {
                        // append indent
                        for (int i = 0; i < indent; i++)
                        {
                            *pOutput++ = ' ';
                        }

                        // append string segment
                        int byteCount = segment.Length * sizeof(char);
                        Buffer.MemoryCopy(pSegment, pOutput, byteCount, byteCount);
                        pOutput += segment.Length;

                        // append newLine
                        for (int i = 0; i < newLine.Length; i++)
                        {
                            *pOutput++ = newLine[i];
                        }

                        // move to next segment
                        pSegment += segment.TotalLength;
                    }
                }
            }

            return indented;

            // local method
            static int ComputeIndentedStringLength(PooledSpan<StringSegment> segments, string newLine, int indent)
            {
                int indentedLength = segments.Length * (newLine.Length + indent);

                foreach (var segment in segments)
                {
                    indentedLength += segment.Length;
                }

                return indentedLength;
            }
        }

        private static PooledSpan<StringSegment> GetStringSegments(string input)
        {
            if (input.Length == 0)
            {
                PooledSpan<StringSegment> emptyResult = new(1);
                emptyResult.Span[0] = new StringSegment(0, 0);
                return emptyResult;
            }

            int segmentCount = 1;
            for (int i = 0; i < input.Length; i++)
            {
                if (input[i] == '\n')
                {
                    segmentCount++;
                }
            }

            PooledSpan<StringSegment> segments = new(segmentCount);
            int start = 0;
            int index = 0;

            for (int i = 0; i < segmentCount; i++)
            {
                while (index < input.Length && input[index] != '\n')
                {
                    index++;
                }

                // the input string didn't end with a newline
                if (index == input.Length)
                {
                    segments[i] = new StringSegment(index - start, 0);
                    break;
                }

                int newLineLength = 1;
                bool endedWithReturnNewline = (index > 0) && (input[index - 1] == '\r');

                if (endedWithReturnNewline)
                {
                    newLineLength++;
                    index--;
                }

                segments[i] = new StringSegment(index - start, newLineLength);

                start = index += newLineLength;
            }

            return segments;
        }

        private readonly record struct StringSegment(int Length, int NewLineLength)
        {
            public int TotalLength => Length + NewLineLength;
        }

        private ref struct PooledSpan<T>
        {
            private static readonly ArrayPool<T> Pool = ArrayPool<T>.Shared;
            private readonly T[] _pooledArray;

            public PooledSpan(int length)
            {
                _pooledArray = Pool.Rent(length);
                Array.Clear(_pooledArray, 0, length);
                Span = _pooledArray.AsSpan(0, length);
            }

            public void Dispose()
            {
                Pool.Return(_pooledArray);
            }

            public Span<T> Span { get; }
            public int Length => Span.Length;
            public Span<T>.Enumerator GetEnumerator() => Span.GetEnumerator();

            public T this[int index]
            {
                get => Span[index];
                set => Span[index] = value;
            }
        }
    }

    internal static readonly string[] _fixedStringsToIndent = new string[]
    {
        "c:\\Windows\\System32\\0\r\nc:\\Windows\\System32\\07409496-a423-4a3e-b620-2cfb01a9318d_HyperV-ComputeNetwork.dll\nc:\\Windows\\System32\\0ae3b998-9a38-4b72-a4c4-06849441518d_Servicing-Stack.dll\r\n",
        "c:\\Windows\\System32\\4545ffe2-0dc4-4df4-9d02-299ef204635e_hvsocket.dll\r\nc:\\Windows\\System32\\69fe178f-26e7-43a9-aa7d-2b616b672dde_eventlogservice.dll\nc:\\Windows\\System32\\6bea57fb-8dfb-4177-9ae8-42e8b3529933_RuntimeDeviceInstall.dll\n",
        "c:\\Windows\\System32\\@AdvancedKeySettingsNotification.png\r\nc:\\Windows\\System32\\@AppHelpToast.png\r\nc:\\Windows\\System32\\@AudioToastIcon.png",
        "c:\\Windows\\System32\\@BackgroundAccessToastIcon.png\nc:\\Windows\\System32\\@bitlockertoastimage.png\nc:\\Windows\\System32\\@edptoastimage.png",
        "c:\\Windows\\System32\\@EnrollmentToastIcon.png\nc:\\Windows\\System32\\@facial-recognition-windows-hello.gif\r\nc:\\Windows\\System32\\@language_notification_icon.png",
        "c:\\Windows\\System32\\@optionalfeatures.png\r\nc:\\Windows\\System32\\@StorageSenseToastIcon.png\r\nc:\\Windows\\System32\\@VpnToastIcon.png\n",
        "c:\\Windows\\System32\\@WindowsHelloFaceToastIcon.png\nc:\\Windows\\System32\\@WindowsUpdateToastIcon.contrast-black.png\r\nc:\\Windows\\System32\\@WindowsUpdateToastIcon.contrast-white.png\n",
        "c:\\Windows\\System32\\@WindowsUpdateToastIcon.png\nc:\\Windows\\System32\\@WirelessDisplayToast.png\r\nc:\\Windows\\System32\\@WLOGO_96x96.png\n",
        "c:\\Windows\\System32\\aadauthhelper.dll\r\nc:\\Windows\\System32\\aadcloudap.dll\r\nc:\\Windows\\System32\\aadjcsp.dll\r\n",
        "c:\\Windows\\System32\\aadtb.dll\r\nc:\\Windows\\System32\\aadWamExtension.dll\nc:\\Windows\\System32\\AarSvc.dll",
        "c:\\Windows\\System32\\AboutSettingsHandlers.dll\r\nc:\\Windows\\System32\\AboveLockAppHost.dll\r\nc:\\Windows\\System32\\accessibilitycpl.dll\n",
        "c:\\Windows\\System32\\accountaccessor.dll\r\nc:\\Windows\\System32\\AccountsRt.dll\r\nc:\\Windows\\System32\\AcGenral.dll",
        "c:\\Windows\\System32\\AcLayers.dll\r\nc:\\Windows\\System32\\acledit.dll\r\nc:\\Windows\\System32\\aclui.dll\n",
        "c:\\Windows\\System32\\acmigration.dll\nc:\\Windows\\System32\\ACPBackgroundManagerPolicy.dll\r\nc:\\Windows\\System32\\acppage.dll\r\n",
        "c:\\Windows\\System32\\acproxy.dll\nc:\\Windows\\System32\\AcSpecfc.dll\nc:\\Windows\\System32\\ActionCenter.dll\r\n",
        "c:\\Windows\\System32\\ActionCenterCPL.dll\r\nc:\\Windows\\System32\\ActionQueue.dll\r\nc:\\Windows\\System32\\ActivationClient.dll\r\n",
        "c:\\Windows\\System32\\ActivationManager.dll\nc:\\Windows\\System32\\ActivationVdev.dll\nc:\\Windows\\System32\\activeds.dll\n",
        "c:\\Windows\\System32\\activeds.tlb\nc:\\Windows\\System32\\ActiveHours.png\nc:\\Windows\\System32\\ActiveSyncCsp.dll\r\n",
        "c:\\Windows\\System32\\ActiveSyncProvider.dll\nc:\\Windows\\System32\\actxprxy.dll\nc:\\Windows\\System32\\AcWinRT.dll\r\n",
        "c:\\Windows\\System32\\AcXtrnal.dll\r\nc:\\Windows\\System32\\adal.dll\r\nc:\\Windows\\System32\\AdaptiveCards.dll\r\n",
        "c:\\Windows\\System32\\AddressParser.dll\nc:\\Windows\\System32\\adhapi.dll\r\nc:\\Windows\\System32\\adhsvc.dll\n",
        "c:\\Windows\\System32\\AdmTmpl.dll\r\nc:\\Windows\\System32\\adprovider.dll\nc:\\Windows\\System32\\adrclient.dll",
        "c:\\Windows\\System32\\adsldp.dll\r\nc:\\Windows\\System32\\adsldpc.dll\nc:\\Windows\\System32\\adsmsext.dll\n",
        "c:\\Windows\\System32\\adsnt.dll\r\nc:\\Windows\\System32\\adtschema.dll\r\nc:\\Windows\\System32\\AdvancedEmojiDS.dll\r\n",
        "c:\\Windows\\System32\\advapi32.dll\r\nc:\\Windows\\System32\\advapi32res.dll\nc:\\Windows\\System32\\advpack.dll",
        "c:\\Windows\\System32\\aeevts.dll\nc:\\Windows\\System32\\aeinv.dll\r\nc:\\Windows\\System32\\aepic.dll",
        "c:\\Windows\\System32\\agentactivationruntime.dll\nc:\\Windows\\System32\\agentactivationruntimestarter.exe\nc:\\Windows\\System32\\agentactivationruntimewindows.dll\r\n",
        "c:\\Windows\\System32\\AgentService.exe\r\nc:\\Windows\\System32\\AggregatorHost.exe\nc:\\Windows\\System32\\aitstatic.exe",
        "c:\\Windows\\System32\\AJRouter.dll\nc:\\Windows\\System32\\alg.exe\nc:\\Windows\\System32\\amcompat.tlb",
        "c:\\Windows\\System32\\amsi.dll\r\nc:\\Windows\\System32\\amsiproxy.dll\r\nc:\\Windows\\System32\\amstream.dll",
        "c:\\Windows\\System32\\Analog.Shell.Broker.dll\nc:\\Windows\\System32\\AnalogCommonProxyStub.dll\r\nc:\\Windows\\System32\\apds.dll\r\n",
        "c:\\Windows\\System32\\APHostClient.dll\r\nc:\\Windows\\System32\\APHostRes.dll\nc:\\Windows\\System32\\APHostService.dll",
        "c:\\Windows\\System32\\apisampling.dll\r\nc:\\Windows\\System32\\ApiSetHost.AppExecutionAlias.dll\r\nc:\\Windows\\System32\\apisetschema.dll",
        "c:\\Windows\\System32\\APMon.dll\r\nc:\\Windows\\System32\\APMonUI.dll\r\nc:\\Windows\\System32\\AppContracts.dll\n",
        "c:\\Windows\\System32\\AppExtension.dll\r\nc:\\Windows\\System32\\apphelp.dll\nc:\\Windows\\System32\\Apphlpdm.dll\r\n",
        "c:\\Windows\\System32\\AppHostRegistrationVerifier.exe\r\nc:\\Windows\\System32\\appidapi.dll\r\nc:\\Windows\\System32\\appidcertstorecheck.exe\r\n",
        "c:\\Windows\\System32\\appidpolicyconverter.exe\r\nc:\\Windows\\System32\\AppIdPolicyEngineApi.dll\nc:\\Windows\\System32\\appidsvc.dll",
        "c:\\Windows\\System32\\appidtel.exe\r\nc:\\Windows\\System32\\appinfo.dll\r\nc:\\Windows\\System32\\appinfoext.dll",
        "c:\\Windows\\System32\\AppInstallerBackgroundUpdate.exe\r\nc:\\Windows\\System32\\AppInstallerPrompt.Desktop.dll\nc:\\Windows\\System32\\ApplicationControlCSP.dll\r\n",
        "c:\\Windows\\System32\\ApplicationFrame.dll\nc:\\Windows\\System32\\ApplicationFrameHost.exe\r\nc:\\Windows\\System32\\AppListBackupLauncher.dll",
        "c:\\Windows\\System32\\AppLockerCSP.dll\r\nc:\\Windows\\System32\\ApplySettingsTemplateCatalog.exe\r\nc:\\Windows\\System32\\ApplyTrustOffline.exe",
        "c:\\Windows\\System32\\AppManagementConfiguration.dll\nc:\\Windows\\System32\\appmgmts.dll\r\nc:\\Windows\\System32\\appmgr.dll\n",
        "c:\\Windows\\System32\\AppMon.dll\r\nc:\\Windows\\System32\\AppointmentActivation.dll\r\nc:\\Windows\\System32\\AppointmentApis.dll\n",
        "c:\\Windows\\System32\\appraiser.dll\nc:\\Windows\\System32\\AppReadiness.dll\r\nc:\\Windows\\System32\\apprepapi.dll",
        "c:\\Windows\\System32\\AppResolver.dll\r\nc:\\Windows\\System32\\ApproveChildRequest.exe\r\nc:\\Windows\\System32\\appsruprov.dll",
        "c:\\Windows\\System32\\AppVCatalog.dll\nc:\\Windows\\System32\\AppVClient.exe\r\nc:\\Windows\\System32\\AppvClientEventLog.dll",
        "c:\\Windows\\System32\\AppVClientPS.dll\r\nc:\\Windows\\System32\\AppVDllSurrogate.exe\r\nc:\\Windows\\System32\\AppVEntStreamingManager.dll\r\n",
        "c:\\Windows\\System32\\AppVEntSubsystemController.dll\nc:\\Windows\\System32\\AppVEntSubsystems64.dll\nc:\\Windows\\System32\\AppVEntVirtualization.dll\r\n",
        "c:\\Windows\\System32\\appverif.chm\r\nc:\\Windows\\System32\\appverif.exe\r\nc:\\Windows\\System32\\appverif.ico",
        "c:\\Windows\\System32\\appverifUI.dll\r\nc:\\Windows\\System32\\appvetwclientres.dll\nc:\\Windows\\System32\\appvetwsharedperformance.dll\r\n",
        "c:\\Windows\\System32\\appvetwstreamingux.dll\r\nc:\\Windows\\System32\\AppVFileSystemMetadata.dll\nc:\\Windows\\System32\\AppVIntegration.dll\r\n",
        "c:\\Windows\\System32\\AppVManifest.dll\nc:\\Windows\\System32\\AppVNice.exe\nc:\\Windows\\System32\\AppVOrchestration.dll",
        "c:\\Windows\\System32\\AppVPolicy.dll\nc:\\Windows\\System32\\AppVPublishing.dll\nc:\\Windows\\System32\\AppVReporting.dll",
        "c:\\Windows\\System32\\AppVScripting.dll\r\nc:\\Windows\\System32\\AppVSentinel.dll\nc:\\Windows\\System32\\AppVShNotify.exe\n",
        "c:\\Windows\\System32\\AppVStreamingUX.dll\nc:\\Windows\\System32\\AppVStreamMap.dll\nc:\\Windows\\System32\\AppVTerminator.dll\n",
        "c:\\Windows\\System32\\appwiz.cpl\nc:\\Windows\\System32\\AppxAllUserStore.dll\r\nc:\\Windows\\System32\\AppXApplicabilityBlob.dll",
        "c:\\Windows\\System32\\AppxApplicabilityEngine.dll\nc:\\Windows\\System32\\AppXDeploymentClient.dll\r\nc:\\Windows\\System32\\AppXDeploymentExtensions.desktop.dll",
        "c:\\Windows\\System32\\AppXDeploymentExtensions.onecore.dll\nc:\\Windows\\System32\\AppXDeploymentServer.dll\r\nc:\\Windows\\System32\\AppxPackaging.dll",
        "c:\\Windows\\System32\\AppxProvisioning.xml\r\nc:\\Windows\\System32\\AppxSip.dll\r\nc:\\Windows\\System32\\AppxStreamingDataSourcePS.dll\n",
        "c:\\Windows\\System32\\AppxSysprep.dll\r\nc:\\Windows\\System32\\Apx01000.dll\r\nc:\\Windows\\System32\\archiveint.dll",
        "c:\\Windows\\System32\\ARP.EXE\nc:\\Windows\\System32\\asferror.dll\nc:\\Windows\\System32\\aspnet_counters.dll\n",
        "c:\\Windows\\System32\\AssignedAccessCsp.dll\nc:\\Windows\\System32\\AssignedAccessGuard.exe\nc:\\Windows\\System32\\AssignedAccessManager.dll",
        "c:\\Windows\\System32\\assignedaccessmanagersvc.dll\nc:\\Windows\\System32\\assignedaccessproviderevents.dll\nc:\\Windows\\System32\\AssignedAccessRuntime.dll",
        "c:\\Windows\\System32\\AssignedAccessShellProxy.dll\nc:\\Windows\\System32\\asycfilt.dll\nc:\\Windows\\System32\\at.exe\r\n",
        "c:\\Windows\\System32\\AtBroker.exe\nc:\\Windows\\System32\\atl.dll\nc:\\Windows\\System32\\atlthunk.dll\n",
        "c:\\Windows\\System32\\atmlib.dll\nc:\\Windows\\System32\\AttestationWmiProvider.dll\r\nc:\\Windows\\System32\\attrib.exe\n",
        "c:\\Windows\\System32\\audiodg.exe\r\nc:\\Windows\\System32\\AudioEndpointBuilder.dll\r\nc:\\Windows\\System32\\AudioEng.dll",
        "c:\\Windows\\System32\\AudioHandlers.dll\r\nc:\\Windows\\System32\\AUDIOKSE.dll\r\nc:\\Windows\\System32\\audioresourceregistrar.dll",
        "c:\\Windows\\System32\\AudioSes.dll\r\nc:\\Windows\\System32\\audiosrv.dll\r\nc:\\Windows\\System32\\AudioSrvPolicyManager.dll\r\n",
        "c:\\Windows\\System32\\auditcse.dll\nc:\\Windows\\System32\\AuditNativeSnapIn.dll\nc:\\Windows\\System32\\auditpol.exe\r\n",
        "c:\\Windows\\System32\\auditpolcore.dll\r\nc:\\Windows\\System32\\AuditPolicyGPInterop.dll\nc:\\Windows\\System32\\auditpolmsg.dll",
        "c:\\Windows\\System32\\AuthBroker.dll\nc:\\Windows\\System32\\AuthBrokerUI.dll\r\nc:\\Windows\\System32\\authentication.dll\r\n",
        "c:\\Windows\\System32\\AuthExt.dll\nc:\\Windows\\System32\\authfwcfg.dll\r\nc:\\Windows\\System32\\AuthFWGP.dll",
        "c:\\Windows\\System32\\AuthFWSnapin.dll\r\nc:\\Windows\\System32\\AuthFWWizFwk.dll\r\nc:\\Windows\\System32\\AuthHost.exe\n",
        "c:\\Windows\\System32\\AuthHostProxy.dll\r\nc:\\Windows\\System32\\authui.dll\nc:\\Windows\\System32\\authz.dll\r\n",
        "c:\\Windows\\System32\\autochk.exe\r\nc:\\Windows\\System32\\autopilot.dll\r\nc:\\Windows\\System32\\autopilotdiag.dll\n",
        "c:\\Windows\\System32\\autoplay.dll\nc:\\Windows\\System32\\autotimesvc.dll\r\nc:\\Windows\\System32\\AverageRoom.bin",
        "c:\\Windows\\System32\\avicap32.dll\r\nc:\\Windows\\System32\\avifil32.dll\r\nc:\\Windows\\System32\\avrt.dll",
        "c:\\Windows\\System32\\AxInstSv.dll\nc:\\Windows\\System32\\AxInstUI.exe\nc:\\Windows\\System32\\azman.msc\r\n",
        "c:\\Windows\\System32\\azroles.dll\nc:\\Windows\\System32\\azroleui.dll\r\nc:\\Windows\\System32\\AzSqlExt.dll\n",
        "c:\\Windows\\System32\\baaupdate.exe\nc:\\Windows\\System32\\BackgroundMediaPolicy.dll\nc:\\Windows\\System32\\backgroundTaskHost.exe",
        "c:\\Windows\\System32\\BackgroundTransferHost.exe\r\nc:\\Windows\\System32\\BamSettingsClient.dll\r\nc:\\Windows\\System32\\BarcodeProvisioningPlugin.dll",
        "c:\\Windows\\System32\\basecsp.dll\r\nc:\\Windows\\System32\\basesrv.dll\r\nc:\\Windows\\System32\\batmeter.dll",
        "c:\\Windows\\System32\\bcastdvr.proxy.dll\nc:\\Windows\\System32\\BcastDVRBroker.dll\r\nc:\\Windows\\System32\\BcastDVRClient.dll",
        "c:\\Windows\\System32\\BcastDVRCommon.dll\r\nc:\\Windows\\System32\\bcastdvruserservice.dll\r\nc:\\Windows\\System32\\bcd.dll",
        "c:\\Windows\\System32\\bcdboot.exe\nc:\\Windows\\System32\\bcdedit.exe\r\nc:\\Windows\\System32\\bcdprov.dll\r\n",
        "c:\\Windows\\System32\\bcdsrv.dll\nc:\\Windows\\System32\\BCP47Langs.dll\nc:\\Windows\\System32\\BCP47mrm.dll",
        "c:\\Windows\\System32\\bcrypt.dll\nc:\\Windows\\System32\\bcryptprimitives.dll\r\nc:\\Windows\\System32\\bdaplgin.ax\n",
        "c:\\Windows\\System32\\bdechangepin.exe\nc:\\Windows\\System32\\BdeHdCfg.exe\nc:\\Windows\\System32\\BdeHdCfgLib.dll",
        "c:\\Windows\\System32\\bderepair.dll\nc:\\Windows\\System32\\bdesvc.dll\nc:\\Windows\\System32\\BdeSysprep.dll\r\n",
        "c:\\Windows\\System32\\bdeui.dll\r\nc:\\Windows\\System32\\BdeUISrv.exe\r\nc:\\Windows\\System32\\bdeunlock.exe\r\n",
        "c:\\Windows\\System32\\BFE.DLL\r\nc:\\Windows\\System32\\bi.dll\nc:\\Windows\\System32\\bidispl.dll\n",
        "c:\\Windows\\System32\\bindfltapi.dll\nc:\\Windows\\System32\\BingASDS.dll\r\nc:\\Windows\\System32\\BingFilterDS.dll\r\n",
        "c:\\Windows\\System32\\BingMaps.dll\r\nc:\\Windows\\System32\\BingOnlineServices.dll\nc:\\Windows\\System32\\BioCredProv.dll",
        "c:\\Windows\\System32\\BioIso.exe\nc:\\Windows\\System32\\bisrv.dll\nc:\\Windows\\System32\\BitLockerCsp.dll\n",
        "c:\\Windows\\System32\\BitLockerDeviceEncryption.exe\r\nc:\\Windows\\System32\\BitLockerWizard.exe\nc:\\Windows\\System32\\BitLockerWizardElev.exe",
        "c:\\Windows\\System32\\bitsadmin.exe\r\nc:\\Windows\\System32\\bitsigd.dll\nc:\\Windows\\System32\\bitsperf.dll",
        "c:\\Windows\\System32\\BitsProxy.dll\r\nc:\\Windows\\System32\\biwinrt.dll\nc:\\Windows\\System32\\BlbEvents.dll",
        "c:\\Windows\\System32\\blbres.dll\nc:\\Windows\\System32\\blb_ps.dll\r\nc:\\Windows\\System32\\BluetoothApis.dll\n",
        "c:\\Windows\\System32\\BluetoothDesktopHandlers.dll\r\nc:\\Windows\\System32\\BluetoothPairingSystemToastIcon.contrast-black.png\r\nc:\\Windows\\System32\\BluetoothPairingSystemToastIcon.contrast-high.png",
        "c:\\Windows\\System32\\BluetoothPairingSystemToastIcon.contrast-white.png\nc:\\Windows\\System32\\BluetoothPairingSystemToastIcon.png\r\nc:\\Windows\\System32\\BluetoothSystemToastIcon.contrast-white.png\r\n",
        "c:\\Windows\\System32\\BluetoothSystemToastIcon.png\r\nc:\\Windows\\System32\\bnmanager.dll\nc:\\Windows\\System32\\boot.sdi",
        "c:\\Windows\\System32\\bootim.exe\r\nc:\\Windows\\System32\\BootMenuUX.dll\r\nc:\\Windows\\System32\\bootsect.exe",
        "c:\\Windows\\System32\\bootstr.dll\r\nc:\\Windows\\System32\\bootsvc.dll\nc:\\Windows\\System32\\bootux.dll",
        "c:\\Windows\\System32\\BOOTVID.DLL\r\nc:\\Windows\\System32\\bopomofo.uce\nc:\\Windows\\System32\\bridgeres.dll\n",
        "c:\\Windows\\System32\\bridgeunattend.exe\r\nc:\\Windows\\System32\\BrokerFileDialog.dat\nc:\\Windows\\System32\\BrokerFileDialog.dll",
        "c:\\Windows\\System32\\BrokerLib.dll\nc:\\Windows\\System32\\browcli.dll\nc:\\Windows\\System32\\browser.dll",
        "c:\\Windows\\System32\\browserbroker.dll\nc:\\Windows\\System32\\browserexport.exe\r\nc:\\Windows\\System32\\browser_broker.exe",
        "c:\\Windows\\System32\\browseui.dll\r\nc:\\Windows\\System32\\BTAGService.dll\nc:\\Windows\\System32\\BthAvctpSvc.dll\r\n",
        "c:\\Windows\\System32\\BthAvrcp.dll\r\nc:\\Windows\\System32\\BthAvrcpAppSvc.dll\nc:\\Windows\\System32\\bthci.dll\n",
        "c:\\Windows\\System32\\BthMtpContextHandler.dll\nc:\\Windows\\System32\\bthpanapi.dll\nc:\\Windows\\System32\\BthpanContextHandler.dll\r\n",
        "c:\\Windows\\System32\\bthprops.cpl\r\nc:\\Windows\\System32\\BthRadioMedia.dll\nc:\\Windows\\System32\\bthserv.dll",
        "c:\\Windows\\System32\\BthTelemetry.dll\r\nc:\\Windows\\System32\\bthudtask.exe\r\nc:\\Windows\\System32\\btpanui.dll\r\n",
        "c:\\Windows\\System32\\Bubbles.scr\r\nc:\\Windows\\System32\\BWContextHandler.dll\nc:\\Windows\\System32\\ByteCodeGenerator.exe\r\n",
        "c:\\Windows\\System32\\c4d66f00-b6f0-4439-ac9b-c5ea13fe54d7_HyperV-ComputeCore.dll\r\nc:\\Windows\\System32\\cabapi.dll\r\nc:\\Windows\\System32\\cabinet.dll",
        "c:\\Windows\\System32\\cabview.dll\nc:\\Windows\\System32\\cacls.exe\nc:\\Windows\\System32\\calc.exe",
        "c:\\Windows\\System32\\CallButtons.dll\r\nc:\\Windows\\System32\\CallButtons.ProxyStub.dll\nc:\\Windows\\System32\\CallHistoryClient.dll",
        "c:\\Windows\\System32\\CameraCaptureUI.dll\nc:\\Windows\\System32\\CameraSettingsUIHost.exe\r\nc:\\Windows\\System32\\camext.dll\r\n",
        "c:\\Windows\\System32\\CapabilityAccessHandlers.dll\nc:\\Windows\\System32\\CapabilityAccessManager.dll\nc:\\Windows\\System32\\CapabilityAccessManagerClient.dll\r\n",
        "c:\\Windows\\System32\\capauthz.dll\nc:\\Windows\\System32\\capiprovider.dll\r\nc:\\Windows\\System32\\capisp.dll",
        "c:\\Windows\\System32\\CaptureService.dll\nc:\\Windows\\System32\\CastingShellExt.dll\nc:\\Windows\\System32\\CastLaunch.dll",
        "c:\\Windows\\System32\\CastSrv.exe\nc:\\Windows\\System32\\catsrv.dll\nc:\\Windows\\System32\\catsrvps.dll\r\n",
        "c:\\Windows\\System32\\catsrvut.dll\r\nc:\\Windows\\System32\\CBDHSvc.dll\r\nc:\\Windows\\System32\\cca.dll\n",
        "c:\\Windows\\System32\\ccmcore.dll\r\nc:\\Windows\\System32\\CcmFramework.h\nc:\\Windows\\System32\\CcmFramework.ini",
        "c:\\Windows\\System32\\ccmperf.dll\r\nc:\\Windows\\System32\\CcmUsrCse.dll\nc:\\Windows\\System32\\cdd.dll\r\n",
        "c:\\Windows\\System32\\cdosys.dll\nc:\\Windows\\System32\\cdp.dll\nc:\\Windows\\System32\\cdprt.dll\r\n",
        "c:\\Windows\\System32\\cdpsvc.dll\r\nc:\\Windows\\System32\\cdpusersvc.dll\r\nc:\\Windows\\System32\\cellulardatacapabilityhandler.dll",
        "c:\\Windows\\System32\\cemapi.dll\r\nc:\\Windows\\System32\\cero.rs\nc:\\Windows\\System32\\certca.dll",
        "c:\\Windows\\System32\\certcli.dll\r\nc:\\Windows\\System32\\certCredProvider.dll\r\nc:\\Windows\\System32\\certenc.dll\n",
        "c:\\Windows\\System32\\CertEnroll.dll\nc:\\Windows\\System32\\CertEnrollCtrl.exe\nc:\\Windows\\System32\\CertEnrollUI.dll\r\n",
        "c:\\Windows\\System32\\certlm.msc\nc:\\Windows\\System32\\certmgr.dll\r\nc:\\Windows\\System32\\certmgr.msc",
        "c:\\Windows\\System32\\CertPKICmdlet.dll\nc:\\Windows\\System32\\CertPolEng.dll\r\nc:\\Windows\\System32\\certprop.dll",
        "c:\\Windows\\System32\\certreq.exe\r\nc:\\Windows\\System32\\certutil.exe\nc:\\Windows\\System32\\cewmdm.dll\r\n",
        "c:\\Windows\\System32\\cfgbkend.dll\nc:\\Windows\\System32\\cfgmgr32.dll\r\nc:\\Windows\\System32\\CfgSPCellular.dll",
        "c:\\Windows\\System32\\CfgSPPolicy.dll\r\nc:\\Windows\\System32\\cflapi.dll\nc:\\Windows\\System32\\cfmifs.dll",
        "c:\\Windows\\System32\\cfmifsproxy.dll\r\nc:\\Windows\\System32\\Chakra.dll\r\nc:\\Windows\\System32\\Chakradiag.dll",
        "c:\\Windows\\System32\\Chakrathunk.dll\nc:\\Windows\\System32\\change.exe\nc:\\Windows\\System32\\changepk.exe\n",
        "c:\\Windows\\System32\\charmap.exe\nc:\\Windows\\System32\\chartv.dll\r\nc:\\Windows\\System32\\ChatApis.dll",
        "c:\\Windows\\System32\\chcp.com\r\nc:\\Windows\\System32\\CheckNetIsolation.exe\r\nc:\\Windows\\System32\\chglogon.exe",
        "c:\\Windows\\System32\\chgport.exe\nc:\\Windows\\System32\\chgusr.exe\r\nc:\\Windows\\System32\\chkdsk.exe\n",
        "c:\\Windows\\System32\\chkntfs.exe\nc:\\Windows\\System32\\choice.exe\nc:\\Windows\\System32\\ChsStrokeDS.dll\n",
        "c:\\Windows\\System32\\chs_singlechar_pinyin.dat\nc:\\Windows\\System32\\ChtBopomofoDS.dll\r\nc:\\Windows\\System32\\ChtCangjieDS.dll",
        "c:\\Windows\\System32\\ChtHkStrokeDS.dll\nc:\\Windows\\System32\\ChtQuickDS.dll\nc:\\Windows\\System32\\ChxAPDS.dll",
        "c:\\Windows\\System32\\ChxDecoder.dll\nc:\\Windows\\System32\\ChxHAPDS.dll\nc:\\Windows\\System32\\chxinputrouter.dll",
        "c:\\Windows\\System32\\chxranker.dll\nc:\\Windows\\System32\\CHxReadingStringIME.dll\r\nc:\\Windows\\System32\\ci.dll\r\n",
        "c:\\Windows\\System32\\cic.dll\nc:\\Windows\\System32\\CIDiag.exe\r\nc:\\Windows\\System32\\cimfs.dll\r\n",
        "c:\\Windows\\System32\\cipher.exe\nc:\\Windows\\System32\\CIRCoInst.dll\nc:\\Windows\\System32\\CiTool.exe\r\n",
        "c:\\Windows\\System32\\CIWmi.dll\r\nc:\\Windows\\System32\\clbcatq.dll\nc:\\Windows\\System32\\cldapi.dll",
        "c:\\Windows\\System32\\cleanmgr.exe\r\nc:\\Windows\\System32\\CleanPCCSP.dll\nc:\\Windows\\System32\\clfsw32.dll\n",
        "c:\\Windows\\System32\\cliconfg.dll\r\nc:\\Windows\\System32\\cliconfg.exe\r\nc:\\Windows\\System32\\cliconfg.rll\r\n",
        "c:\\Windows\\System32\\clip.exe\r\nc:\\Windows\\System32\\ClipboardServer.dll\r\nc:\\Windows\\System32\\Clipc.dll\n",
        "c:\\Windows\\System32\\ClipDLS.exe\nc:\\Windows\\System32\\ClipRenew.exe\r\nc:\\Windows\\System32\\ClipSVC.dll\r\n",
        "c:\\Windows\\System32\\ClipUp.exe\r\nc:\\Windows\\System32\\clipwinrt.dll\r\nc:\\Windows\\System32\\cloudAP.dll",
        "c:\\Windows\\System32\\CloudDomainJoinAUG.dll\r\nc:\\Windows\\System32\\CloudDomainJoinDataModelServer.dll\r\nc:\\Windows\\System32\\CloudExperienceHost.dll\n",
        "c:\\Windows\\System32\\CloudExperienceHostBroker.dll\nc:\\Windows\\System32\\CloudExperienceHostBroker.exe\r\nc:\\Windows\\System32\\CloudExperienceHostCommon.dll\n",
        "c:\\Windows\\System32\\CloudExperienceHostRedirection.dll\r\nc:\\Windows\\System32\\CloudExperienceHostUser.dll\r\nc:\\Windows\\System32\\cloudidsvc.dll\r\n",
        "c:\\Windows\\System32\\CloudIdWxhExtension.dll\nc:\\Windows\\System32\\CloudNotifications.exe\nc:\\Windows\\System32\\CloudRecoveryDownloadTool.dll\n",
        "c:\\Windows\\System32\\CloudRestoreLauncher.dll\nc:\\Windows\\System32\\clrhost.dll\nc:\\Windows\\System32\\clusapi.dll",
        "c:\\Windows\\System32\\cmcfg32.dll\r\nc:\\Windows\\System32\\cmd.exe\r\nc:\\Windows\\System32\\cmdext.dll\n",
        "c:\\Windows\\System32\\cmdial32.dll\nc:\\Windows\\System32\\cmdkey.exe\nc:\\Windows\\System32\\cmdl32.exe",
        "c:\\Windows\\System32\\cmgrcspps.dll\nc:\\Windows\\System32\\cmifw.dll\r\nc:\\Windows\\System32\\cmintegrator.dll\r\n",
        "c:\\Windows\\System32\\cmlua.dll\r\nc:\\Windows\\System32\\cmmon32.exe\nc:\\Windows\\System32\\cmpbk32.dll",
        "c:\\Windows\\System32\\cmstp.exe\r\nc:\\Windows\\System32\\cmstplua.dll\r\nc:\\Windows\\System32\\cmutil.dll",
        "c:\\Windows\\System32\\cngcredui.dll\r\nc:\\Windows\\System32\\cngprovider.dll\r\nc:\\Windows\\System32\\cnvfat.dll\n",
        "c:\\Windows\\System32\\cob-au.rs\r\nc:\\Windows\\System32\\CodeIntegrityAggregator.dll\nc:\\Windows\\System32\\cofire.exe\n",
        "c:\\Windows\\System32\\cofiredm.dll\r\nc:\\Windows\\System32\\colbact.dll\nc:\\Windows\\System32\\COLORCNV.DLL\n",
        "c:\\Windows\\System32\\colorcpl.exe\nc:\\Windows\\System32\\colorui.dll\nc:\\Windows\\System32\\combase.dll",
        "c:\\Windows\\System32\\comcat.dll\nc:\\Windows\\System32\\comctl32.dll\nc:\\Windows\\System32\\comdlg32.dll",
        "c:\\Windows\\System32\\comexp.msc\nc:\\Windows\\System32\\coml2.dll\nc:\\Windows\\System32\\comp.exe\r\n",
        "c:\\Windows\\System32\\compact.exe\nc:\\Windows\\System32\\CompatAggregator.dll\r\nc:\\Windows\\System32\\CompatTelRunner.exe\n",
        "c:\\Windows\\System32\\compmgmt.msc\r\nc:\\Windows\\System32\\CompMgmtLauncher.exe\nc:\\Windows\\System32\\ComposableShellProxyStub.dll\r\n",
        "c:\\Windows\\System32\\ComposerFramework.dll\nc:\\Windows\\System32\\CompPkgSrv.exe\r\nc:\\Windows\\System32\\CompPkgSup.dll",
        "c:\\Windows\\System32\\compstui.dll\nc:\\Windows\\System32\\computecore.dll\r\nc:\\Windows\\System32\\computelibeventlog.dll\r\n",
        "c:\\Windows\\System32\\computenetwork.dll\nc:\\Windows\\System32\\ComputerDefaults.exe\nc:\\Windows\\System32\\ComputerToastIcon.contrast-white.png\r\n",
        "c:\\Windows\\System32\\ComputerToastIcon.png\nc:\\Windows\\System32\\computestorage.dll\nc:\\Windows\\System32\\comrepl.dll",
        "c:\\Windows\\System32\\comres.dll\nc:\\Windows\\System32\\comsnap.dll\nc:\\Windows\\System32\\comsvcs.dll\r\n",
        "c:\\Windows\\System32\\comuid.dll\nc:\\Windows\\System32\\concrt140.dll\r\nc:\\Windows\\System32\\concrt140d.dll",
        "c:\\Windows\\System32\\configmanager2.dll\nc:\\Windows\\System32\\ConfigureExpandedStorage.dll\nc:\\Windows\\System32\\conhost.exe\r\n",
        "c:\\Windows\\System32\\ConhostV1.dll\nc:\\Windows\\System32\\connect.dll\nc:\\Windows\\System32\\ConnectedAccountState.dll\r\n",
        "c:\\Windows\\System32\\consent.exe\r\nc:\\Windows\\System32\\ConsentExperienceCommon.dll\r\nc:\\Windows\\System32\\ConsentUX.dll",
        "c:\\Windows\\System32\\ConsentUxClient.dll\nc:\\Windows\\System32\\console.dll\nc:\\Windows\\System32\\ConsoleLogon.dll\n",
        "c:\\Windows\\System32\\ConstraintIndex.Search.dll\r\nc:\\Windows\\System32\\ContactActivation.dll\r\nc:\\Windows\\System32\\ContactApis.dll\r\n",
        "c:\\Windows\\System32\\ContactHarvesterDS.dll\nc:\\Windows\\System32\\container.dll\nc:\\Windows\\System32\\containerdevicemanagement.dll\r\n",
        "c:\\Windows\\System32\\ContentDeliveryManager.Utilities.dll\nc:\\Windows\\System32\\control.exe\r\nc:\\Windows\\System32\\convert.exe\n",
        "c:\\Windows\\System32\\convertvhd.exe\nc:\\Windows\\System32\\coreaudiopolicymanagerext.dll\nc:\\Windows\\System32\\coredpus.dll",
        "c:\\Windows\\System32\\coredpussvr.exe\r\nc:\\Windows\\System32\\coreglobconfig.dll\nc:\\Windows\\System32\\CoreMas.dll\n",
        "c:\\Windows\\System32\\CoreMessaging.dll\nc:\\Windows\\System32\\CoreMmRes.dll\nc:\\Windows\\System32\\CorePrivacySettingsStore.dll\r\n",
        "c:\\Windows\\System32\\CoreShell.dll\r\nc:\\Windows\\System32\\CoreShellAPI.dll\nc:\\Windows\\System32\\CoreShellExtFramework.dll",
        "c:\\Windows\\System32\\CoreUIComponents.dll\r\nc:\\Windows\\System32\\correngine.dll\nc:\\Windows\\System32\\CourtesyEngine.dll",
        "c:\\Windows\\System32\\CPFilters.dll\nc:\\Windows\\System32\\CredDialogBroker.dll\r\nc:\\Windows\\System32\\CredentialEnrollmentManager.exe",
        "c:\\Windows\\System32\\CredentialEnrollmentManagerForUser.dll\nc:\\Windows\\System32\\CredentialUIBroker.exe\nc:\\Windows\\System32\\CredProv2faHelper.dll",
        "c:\\Windows\\System32\\CredProvCommonCore.dll\nc:\\Windows\\System32\\CredProvDataModel.dll\r\nc:\\Windows\\System32\\CredProvHelper.dll",
        "c:\\Windows\\System32\\credprovhost.dll\r\nc:\\Windows\\System32\\credprovs.dll\r\nc:\\Windows\\System32\\credprovslegacy.dll",
        "c:\\Windows\\System32\\credssp.dll\r\nc:\\Windows\\System32\\credui.dll\nc:\\Windows\\System32\\credwiz.exe\n",
        "c:\\Windows\\System32\\crypt32.dll\nc:\\Windows\\System32\\cryptbase.dll\nc:\\Windows\\System32\\cryptcatsvc.dll",
        "c:\\Windows\\System32\\cryptdlg.dll\nc:\\Windows\\System32\\cryptdll.dll\r\nc:\\Windows\\System32\\cryptext.dll",
        "c:\\Windows\\System32\\cryptnet.dll\nc:\\Windows\\System32\\cryptngc.dll\r\nc:\\Windows\\System32\\CryptoWinRT.dll",
        "c:\\Windows\\System32\\cryptsp.dll\r\nc:\\Windows\\System32\\cryptsvc.dll\nc:\\Windows\\System32\\crypttpmeksvc.dll\n",
        "c:\\Windows\\System32\\cryptui.dll\nc:\\Windows\\System32\\cryptuiwizard.dll\r\nc:\\Windows\\System32\\cryptxml.dll\r\n",
        "c:\\Windows\\System32\\cscapi.dll\nc:\\Windows\\System32\\cscdll.dll\nc:\\Windows\\System32\\CscMig.dll\n",
        "c:\\Windows\\System32\\cscobj.dll\r\nc:\\Windows\\System32\\cscript.exe\r\nc:\\Windows\\System32\\cscsvc.dll",
        "c:\\Windows\\System32\\cscui.dll\nc:\\Windows\\System32\\CspCellularSettings.dll\r\nc:\\Windows\\System32\\csplte.dll\n",
        "c:\\Windows\\System32\\CspProxy.dll\r\nc:\\Windows\\System32\\csrr.rs\nc:\\Windows\\System32\\csrsrv.dll\n",
        "c:\\Windows\\System32\\csrss.exe\r\nc:\\Windows\\System32\\CSystemEventsBrokerClient.dll\nc:\\Windows\\System32\\ctac.json",
        "c:\\Windows\\System32\\ctfmon.exe\r\nc:\\Windows\\System32\\cttune.exe\nc:\\Windows\\System32\\cttunesvr.exe\n",
        "c:\\Windows\\System32\\curl.exe\nc:\\Windows\\System32\\CustomInstallExec.exe\r\nc:\\Windows\\System32\\CustomShellHost.exe",
        "c:\\Windows\\System32\\cuzzapi.dll\nc:\\Windows\\System32\\cxcredprov.dll\r\nc:\\Windows\\System32\\CXHProvisioningServer.dll",
        "c:\\Windows\\System32\\C_037.NLS\nc:\\Windows\\System32\\C_10000.NLS\r\nc:\\Windows\\System32\\C_10001.NLS\r\n",
        "c:\\Windows\\System32\\C_10002.NLS\nc:\\Windows\\System32\\C_10003.NLS\r\nc:\\Windows\\System32\\C_10004.NLS",
        "c:\\Windows\\System32\\C_10005.NLS\nc:\\Windows\\System32\\C_10006.NLS\nc:\\Windows\\System32\\C_10007.NLS",
        "c:\\Windows\\System32\\C_10008.NLS\r\nc:\\Windows\\System32\\C_10010.NLS\nc:\\Windows\\System32\\C_10017.NLS",
        "c:\\Windows\\System32\\C_10021.NLS\nc:\\Windows\\System32\\C_10029.NLS\r\nc:\\Windows\\System32\\C_10079.NLS",
        "c:\\Windows\\System32\\C_10081.NLS\r\nc:\\Windows\\System32\\C_10082.NLS\nc:\\Windows\\System32\\C_1026.NLS",
        "c:\\Windows\\System32\\C_1047.NLS\r\nc:\\Windows\\System32\\C_1140.NLS\r\nc:\\Windows\\System32\\C_1141.NLS\r\n",
        "c:\\Windows\\System32\\C_1142.NLS\nc:\\Windows\\System32\\C_1143.NLS\nc:\\Windows\\System32\\C_1144.NLS",
        "c:\\Windows\\System32\\C_1145.NLS\r\nc:\\Windows\\System32\\C_1146.NLS\nc:\\Windows\\System32\\C_1147.NLS\n",
        "c:\\Windows\\System32\\C_1148.NLS\nc:\\Windows\\System32\\C_1149.NLS\r\nc:\\Windows\\System32\\C_1250.NLS",
        "c:\\Windows\\System32\\C_1251.NLS\nc:\\Windows\\System32\\C_1252.NLS\nc:\\Windows\\System32\\C_1253.NLS",
        "c:\\Windows\\System32\\C_1254.NLS\r\nc:\\Windows\\System32\\C_1255.NLS\r\nc:\\Windows\\System32\\C_1256.NLS",
        "c:\\Windows\\System32\\C_1257.NLS\r\nc:\\Windows\\System32\\C_1258.NLS\r\nc:\\Windows\\System32\\C_1361.NLS",
        "c:\\Windows\\System32\\C_20000.NLS\r\nc:\\Windows\\System32\\C_20001.NLS\nc:\\Windows\\System32\\C_20002.NLS\r\n",
        "c:\\Windows\\System32\\C_20003.NLS\nc:\\Windows\\System32\\C_20004.NLS\r\nc:\\Windows\\System32\\C_20005.NLS\r\n",
        "c:\\Windows\\System32\\C_20105.NLS\r\nc:\\Windows\\System32\\C_20106.NLS\r\nc:\\Windows\\System32\\C_20107.NLS",
        "c:\\Windows\\System32\\C_20108.NLS\nc:\\Windows\\System32\\C_20127.NLS\nc:\\Windows\\System32\\C_20261.NLS",
        "c:\\Windows\\System32\\C_20269.NLS\r\nc:\\Windows\\System32\\C_20273.NLS\r\nc:\\Windows\\System32\\C_20277.NLS\n",
        "c:\\Windows\\System32\\C_20278.NLS\r\nc:\\Windows\\System32\\C_20280.NLS\nc:\\Windows\\System32\\C_20284.NLS",
        "c:\\Windows\\System32\\C_20285.NLS\r\nc:\\Windows\\System32\\C_20290.NLS\r\nc:\\Windows\\System32\\C_20297.NLS\n",
        "c:\\Windows\\System32\\C_20420.NLS\r\nc:\\Windows\\System32\\C_20423.NLS\nc:\\Windows\\System32\\C_20424.NLS\n",
        "c:\\Windows\\System32\\C_20833.NLS\nc:\\Windows\\System32\\C_20838.NLS\nc:\\Windows\\System32\\C_20866.NLS\n",
        "c:\\Windows\\System32\\C_20871.NLS\r\nc:\\Windows\\System32\\C_20880.NLS\nc:\\Windows\\System32\\C_20905.NLS\r\n",
        "c:\\Windows\\System32\\C_20924.NLS\nc:\\Windows\\System32\\C_20932.NLS\r\nc:\\Windows\\System32\\C_20936.NLS\n",
        "c:\\Windows\\System32\\C_20949.NLS\nc:\\Windows\\System32\\C_21025.NLS\r\nc:\\Windows\\System32\\C_21027.NLS",
        "c:\\Windows\\System32\\C_21866.NLS\nc:\\Windows\\System32\\C_28591.NLS\nc:\\Windows\\System32\\C_28592.NLS\r\n",
        "c:\\Windows\\System32\\C_28593.NLS\nc:\\Windows\\System32\\C_28594.NLS\nc:\\Windows\\System32\\C_28595.NLS\n",
        "c:\\Windows\\System32\\C_28596.NLS\r\nc:\\Windows\\System32\\C_28597.NLS\r\nc:\\Windows\\System32\\C_28598.NLS\n",
        "c:\\Windows\\System32\\C_28599.NLS\nc:\\Windows\\System32\\c_28603.nls\r\nc:\\Windows\\System32\\C_28605.NLS",
        "c:\\Windows\\System32\\C_437.NLS\nc:\\Windows\\System32\\C_500.NLS\r\nc:\\Windows\\System32\\C_708.NLS",
        "c:\\Windows\\System32\\C_720.NLS\nc:\\Windows\\System32\\C_737.NLS\nc:\\Windows\\System32\\C_775.NLS\n",
        "c:\\Windows\\System32\\C_850.NLS\r\nc:\\Windows\\System32\\C_852.NLS\nc:\\Windows\\System32\\C_855.NLS",
        "c:\\Windows\\System32\\C_857.NLS\nc:\\Windows\\System32\\C_858.NLS\r\nc:\\Windows\\System32\\C_860.NLS",
        "c:\\Windows\\System32\\C_861.NLS\nc:\\Windows\\System32\\C_862.NLS\nc:\\Windows\\System32\\C_863.NLS\n",
        "c:\\Windows\\System32\\C_864.NLS\r\nc:\\Windows\\System32\\C_865.NLS\nc:\\Windows\\System32\\C_866.NLS\n",
        "c:\\Windows\\System32\\C_869.NLS\nc:\\Windows\\System32\\C_870.NLS\nc:\\Windows\\System32\\C_874.NLS\n",
        "c:\\Windows\\System32\\C_875.NLS\nc:\\Windows\\System32\\C_932.NLS\r\nc:\\Windows\\System32\\C_936.NLS\r\n",
        "c:\\Windows\\System32\\C_949.NLS\nc:\\Windows\\System32\\C_950.NLS\r\nc:\\Windows\\System32\\C_G18030.DLL",
        "c:\\Windows\\System32\\c_GSM7.DLL\nc:\\Windows\\System32\\C_IS2022.DLL\nc:\\Windows\\System32\\C_ISCII.DLL\n",
        "c:\\Windows\\System32\\d2d1.dll\nc:\\Windows\\System32\\d2d1debug3.dll\r\nc:\\Windows\\System32\\d3d10.dll",
        "c:\\Windows\\System32\\d3d10core.dll\r\nc:\\Windows\\System32\\d3d10level9.dll\r\nc:\\Windows\\System32\\d3d10ref.dll",
        "c:\\Windows\\System32\\d3d10sdklayers.dll\r\nc:\\Windows\\System32\\d3d10warp.dll\r\nc:\\Windows\\System32\\d3d10_1.dll\n",
        "c:\\Windows\\System32\\d3d10_1core.dll\r\nc:\\Windows\\System32\\d3d11.dll\nc:\\Windows\\System32\\d3d11on12.dll\r\n",
        "c:\\Windows\\System32\\d3d11_3SDKLayers.dll\nc:\\Windows\\System32\\D3D12.dll\nc:\\Windows\\System32\\D3D12Core.dll\n",
        "c:\\Windows\\System32\\d3d12SDKLayers.dll\nc:\\Windows\\System32\\d3d8thk.dll\nc:\\Windows\\System32\\d3d9.dll",
        "c:\\Windows\\System32\\d3d9on12.dll\nc:\\Windows\\System32\\D3DCompiler_47.dll\nc:\\Windows\\System32\\d3dconfig.exe",
        "c:\\Windows\\System32\\d3dref9.dll\r\nc:\\Windows\\System32\\D3DSCache.dll\r\nc:\\Windows\\System32\\d4d78066-e6db-44b7-b5cd-2eb82dce620c_HyperV-ComputeLegacy.dll",
        "c:\\Windows\\System32\\dab.dll\nc:\\Windows\\System32\\dabapi.dll\nc:\\Windows\\System32\\DAConn.dll\r\n",
        "c:\\Windows\\System32\\dafAspInfraProvider.dll\r\nc:\\Windows\\System32\\dafBth.dll\nc:\\Windows\\System32\\DafDnsSd.dll\n",
        "c:\\Windows\\System32\\dafDockingProvider.dll\r\nc:\\Windows\\System32\\DAFESCL.dll\r\nc:\\Windows\\System32\\DafGip.dll\r\n",
        "c:\\Windows\\System32\\DAFIoT.dll\r\nc:\\Windows\\System32\\DAFIPP.dll\nc:\\Windows\\System32\\DAFMCP.dll\r\n",
        "c:\\Windows\\System32\\dafpos.dll\r\nc:\\Windows\\System32\\DafPrintProvider.dll\r\nc:\\Windows\\System32\\dafupnp.dll\n",
        "c:\\Windows\\System32\\dafWCN.dll\r\nc:\\Windows\\System32\\dafWfdProvider.dll\r\nc:\\Windows\\System32\\DAFWiProv.dll\n",
        "c:\\Windows\\System32\\DAFWSD.dll\nc:\\Windows\\System32\\DAMediaManager.dll\nc:\\Windows\\System32\\DAMM.dll",
        "c:\\Windows\\System32\\DaOtpCredentialProvider.dll\nc:\\Windows\\System32\\das.dll\r\nc:\\Windows\\System32\\dasHost.exe",
        "c:\\Windows\\System32\\dataclen.dll\nc:\\Windows\\System32\\DataExchange.dll\r\nc:\\Windows\\System32\\DataExchangeHost.exe",
        "c:\\Windows\\System32\\DataStoreCacheDumpTool.exe\r\nc:\\Windows\\System32\\datusage.dll\r\nc:\\Windows\\System32\\davclnt.dll",
        "c:\\Windows\\System32\\davhlpr.dll\nc:\\Windows\\System32\\DavSyncProvider.dll\nc:\\Windows\\System32\\daxexec.dll\r\n",
        "c:\\Windows\\System32\\dbgcore.dll\r\nc:\\Windows\\System32\\dbgeng.dll\nc:\\Windows\\System32\\dbghelp.dll\n",
        "c:\\Windows\\System32\\DbgModel.dll\nc:\\Windows\\System32\\dbnetlib.dll\r\nc:\\Windows\\System32\\dbnmpntw.dll",
        "c:\\Windows\\System32\\dccw.exe\r\nc:\\Windows\\System32\\dciman32.dll\nc:\\Windows\\System32\\dcntel.dll\r\n",
        "c:\\Windows\\System32\\dcomcnfg.exe\nc:\\Windows\\System32\\dcomp.dll\r\nc:\\Windows\\System32\\dcsvc.dll",
        "c:\\Windows\\System32\\DDACLSys.dll\nc:\\Windows\\System32\\DdcClaimsApi.dll\nc:\\Windows\\System32\\DdcComImplementationsDesktop.dll",
        "c:\\Windows\\System32\\DDDS.dll\nc:\\Windows\\System32\\ddisplay.dll\r\nc:\\Windows\\System32\\ddodiag.exe\n",
        "c:\\Windows\\System32\\DDOIProxy.dll\r\nc:\\Windows\\System32\\DDORes.dll\r\nc:\\Windows\\System32\\ddpchunk.dll",
        "c:\\Windows\\System32\\ddptrace.dll\r\nc:\\Windows\\System32\\ddputils.dll\nc:\\Windows\\System32\\ddp_ps.dll",
        "c:\\Windows\\System32\\ddraw.dll\r\nc:\\Windows\\System32\\ddrawex.dll\r\nc:\\Windows\\System32\\declaredconfiguration.dll",
        "c:\\Windows\\System32\\DefaultAccountTile.png\r\nc:\\Windows\\System32\\DefaultDeviceManager.dll\nc:\\Windows\\System32\\DefaultHrtfs.bin\n",
        "c:\\Windows\\System32\\DefaultPrinterProvider.dll\nc:\\Windows\\System32\\DefaultQuestions.json\nc:\\Windows\\System32\\Defrag.exe",
        "c:\\Windows\\System32\\defragproxy.dll\nc:\\Windows\\System32\\defragres.dll\nc:\\Windows\\System32\\defragsvc.dll\r\n",
        "c:\\Windows\\System32\\delegatorprovider.dll\nc:\\Windows\\System32\\DeliveryOptimizationMIProv.mof\r\nc:\\Windows\\System32\\DeliveryOptimizationMIProvUninstall.mof",
        "c:\\Windows\\System32\\deploymentcsphelper.exe\r\nc:\\Windows\\System32\\deploymentcsps.dll\r\nc:\\Windows\\System32\\desk.cpl\n",
        "c:\\Windows\\System32\\deskadp.dll\nc:\\Windows\\System32\\deskmon.dll\nc:\\Windows\\System32\\desktopimgdownldr.exe\r\n",
        "c:\\Windows\\System32\\DesktopShellAppStateContract.dll\r\nc:\\Windows\\System32\\DesktopShellExt.dll\r\nc:\\Windows\\System32\\DesktopSwitcherDataModel.dll",
        "c:\\Windows\\System32\\DesktopView.Internal.Broker.dll\nc:\\Windows\\System32\\DesktopView.Internal.Broker.ProxyStub.dll\r\nc:\\Windows\\System32\\DetailedReading-Default.xml",
        "c:\\Windows\\System32\\DevDispItemProvider.dll\r\nc:\\Windows\\System32\\DeveloperOptionsSettingsHandlers.dll\nc:\\Windows\\System32\\devenum.dll",
        "c:\\Windows\\System32\\deviceaccess.dll\nc:\\Windows\\System32\\deviceassociation.dll\nc:\\Windows\\System32\\DeviceCensus.exe",
        "c:\\Windows\\System32\\DeviceCenter.dll\nc:\\Windows\\System32\\DeviceCompanionAppInstall.dll\nc:\\Windows\\System32\\DeviceCredential.dll\n",
        "c:\\Windows\\System32\\DeviceCredentialDeployment.exe\r\nc:\\Windows\\System32\\DeviceDirectoryClient.dll\nc:\\Windows\\System32\\DeviceDisplayStatusManager.dll",
        "c:\\Windows\\System32\\DeviceDriverRetrievalClient.dll\nc:\\Windows\\System32\\DeviceEject.exe\nc:\\Windows\\System32\\DeviceElementSource.dll",
        "c:\\Windows\\System32\\DeviceEnroller.exe\r\nc:\\Windows\\System32\\DeviceFlows.DataModel.dll\r\nc:\\Windows\\System32\\DeviceMetadataRetrievalClient.dll\n",
        "c:\\Windows\\System32\\devicengccredprov.dll\nc:\\Windows\\System32\\DevicePairing.dll\r\nc:\\Windows\\System32\\DevicePairingExperienceMEM.dll",
        "c:\\Windows\\System32\\DevicePairingFolder.dll\nc:\\Windows\\System32\\DevicePairingProxy.dll\r\nc:\\Windows\\System32\\DevicePairingWizard.exe",
        "c:\\Windows\\System32\\DeviceProperties.exe\nc:\\Windows\\System32\\DeviceReactivation.dll\r\nc:\\Windows\\System32\\deviceregistration.dll\n",
        "c:\\Windows\\System32\\DeviceSetupManager.dll\r\nc:\\Windows\\System32\\DeviceSetupManagerAPI.dll\nc:\\Windows\\System32\\DeviceSetupStatusProvider.dll\r\n",
        "c:\\Windows\\System32\\DevicesFlowBroker.dll\nc:\\Windows\\System32\\DeviceSoftwareInstallationClient.dll\nc:\\Windows\\System32\\DeviceUpdateAgent.dll",
        "c:\\Windows\\System32\\DeviceUpdateCenterCsp.dll\r\nc:\\Windows\\System32\\DeviceUxRes.dll\nc:\\Windows\\System32\\devinv.dll",
        "c:\\Windows\\System32\\devmgmt.msc\nc:\\Windows\\System32\\devmgr.dll\r\nc:\\Windows\\System32\\DevModeRunAsUserConfig.msc",
        "c:\\Windows\\System32\\devobj.dll\r\nc:\\Windows\\System32\\DevPropMgr.dll\nc:\\Windows\\System32\\DevQueryBroker.dll",
        "c:\\Windows\\System32\\devrtl.dll\nc:\\Windows\\System32\\dfdts.dll\r\nc:\\Windows\\System32\\DFDWiz.exe\n",
        "c:\\Windows\\System32\\dfrgui.exe\r\nc:\\Windows\\System32\\dfscli.dll\r\nc:\\Windows\\System32\\dfshim.dll",
        "c:\\Windows\\System32\\DfsShlEx.dll\nc:\\Windows\\System32\\dggpext.dll\nc:\\Windows\\System32\\dhcpcmonitor.dll",
        "c:\\Windows\\System32\\dhcpcore.dll\nc:\\Windows\\System32\\dhcpcore6.dll\nc:\\Windows\\System32\\dhcpcsvc.dll\n",
        "c:\\Windows\\System32\\dhcpcsvc6.dll\r\nc:\\Windows\\System32\\dhcpsapi.dll\r\nc:\\Windows\\System32\\DHolographicDisplay.dll\r\n",
        "c:\\Windows\\System32\\DiagCpl.dll\nc:\\Windows\\System32\\diagnosticdataquery.dll\r\nc:\\Windows\\System32\\DiagnosticDataSettings.dll",
        "c:\\Windows\\System32\\DiagnosticInvoker.dll\r\nc:\\Windows\\System32\\DiagnosticLogCSP.dll\r\nc:\\Windows\\System32\\diagperf.dll\n",
        "c:\\Windows\\System32\\DiagSvc.dll\nc:\\Windows\\System32\\diagtrack.dll\r\nc:\\Windows\\System32\\dialclient.dll",
        "c:\\Windows\\System32\\dialer.exe\nc:\\Windows\\System32\\DialogBlockerProc.dll\r\nc:\\Windows\\System32\\DialogBlockingManager.dll\n",
        "c:\\Windows\\System32\\DialogBlockingService.dll\r\nc:\\Windows\\System32\\dialserver.dll\nc:\\Windows\\System32\\DictationManager.dll\r\n",
        "c:\\Windows\\System32\\difxapi.dll\r\nc:\\Windows\\System32\\dimsjob.dll\nc:\\Windows\\System32\\dimsroam.dll",
        "c:\\Windows\\System32\\dinput.dll\nc:\\Windows\\System32\\dinput8.dll\r\nc:\\Windows\\System32\\Direct2DDesktop.dll",
        "c:\\Windows\\System32\\directmanipulation.dll\nc:\\Windows\\System32\\DirectML.Debug.dll\nc:\\Windows\\System32\\directml.dll\r\n",
        "c:\\Windows\\System32\\directxdatabasehelper.dll\r\nc:\\Windows\\System32\\directxdatabaseupdater.exe\r\nc:\\Windows\\System32\\discan.dll\r\n",
        "c:\\Windows\\System32\\diskmgmt.msc\nc:\\Windows\\System32\\diskpart.exe\r\nc:\\Windows\\System32\\diskperf.exe",
        "c:\\Windows\\System32\\diskraid.exe\nc:\\Windows\\System32\\DiskSnapshot.conf\nc:\\Windows\\System32\\DiskSnapshot.exe",
        "c:\\Windows\\System32\\diskusage.exe\r\nc:\\Windows\\System32\\Dism.exe\r\nc:\\Windows\\System32\\DismApi.dll",
        "c:\\Windows\\System32\\DispBroker.Desktop.dll\r\nc:\\Windows\\System32\\DispBroker.dll\nc:\\Windows\\System32\\dispdiag.exe",
        "c:\\Windows\\System32\\dispex.dll\nc:\\Windows\\System32\\Display.dll\nc:\\Windows\\System32\\DisplayManager.dll",
        "c:\\Windows\\System32\\DisplaySwitch.exe\r\nc:\\Windows\\System32\\DisplaySystemToastIcon.contrast-white.png\nc:\\Windows\\System32\\DisplaySystemToastIcon.png\n",
        "c:\\Windows\\System32\\djctq.rs\nc:\\Windows\\System32\\djoin.exe\r\nc:\\Windows\\System32\\dllhost.exe",
        "c:\\Windows\\System32\\dllhst3g.exe\r\nc:\\Windows\\System32\\dlnashext.dll\nc:\\Windows\\System32\\DMAlertListener.ProxyStub.dll",
        "c:\\Windows\\System32\\DmApiSetExtImplDesktop.dll\r\nc:\\Windows\\System32\\DMAppsRes.dll\nc:\\Windows\\System32\\dmcertinst.exe",
        "c:\\Windows\\System32\\dmcfghost.exe\r\nc:\\Windows\\System32\\dmcfgutils.dll\nc:\\Windows\\System32\\dmclient.exe",
        "c:\\Windows\\System32\\dmcmnutils.dll\r\nc:\\Windows\\System32\\dmcommandlineutils.dll\r\nc:\\Windows\\System32\\dmcsps.dll\r\n",
        "c:\\Windows\\System32\\dmdlgs.dll\nc:\\Windows\\System32\\dmdskmgr.dll\nc:\\Windows\\System32\\dmdskres.dll\r\n",
        "c:\\Windows\\System32\\dmdskres2.dll\nc:\\Windows\\System32\\dmenrollengine.dll\r\nc:\\Windows\\System32\\dmenterprisediagnostics.dll\r\n",
        "c:\\Windows\\System32\\dmintf.dll\nc:\\Windows\\System32\\dmiso8601utils.dll\nc:\\Windows\\System32\\dmloader.dll\n",
        "c:\\Windows\\System32\\DmNotificationBroker.exe\nc:\\Windows\\System32\\dmocx.dll\nc:\\Windows\\System32\\dmoleaututils.dll",
        "c:\\Windows\\System32\\DmOmaCpMo.exe\r\nc:\\Windows\\System32\\dmprocessxmlfiltered.dll\nc:\\Windows\\System32\\dmpushproxy.dll\n",
        "c:\\Windows\\System32\\DMPushRouterCore.dll\r\nc:\\Windows\\System32\\DMRCDecoder.dll\r\nc:\\Windows\\System32\\DMRServer.dll",
        "c:\\Windows\\System32\\dmsynth.dll\nc:\\Windows\\System32\\dmusic.dll\r\nc:\\Windows\\System32\\dmutil.dll",
        "c:\\Windows\\System32\\dmvdsitf.dll\nc:\\Windows\\System32\\dmview.ocx\r\nc:\\Windows\\System32\\dmwappushsvc.dll",
        "c:\\Windows\\System32\\dmwmicsp.dll\nc:\\Windows\\System32\\dmxmlhelputils.dll\r\nc:\\Windows\\System32\\dnsapi.dll",
        "c:\\Windows\\System32\\dnscacheugc.exe\nc:\\Windows\\System32\\dnscmmc.dll\nc:\\Windows\\System32\\dnsext.dll",
        "c:\\Windows\\System32\\dnshc.dll\nc:\\Windows\\System32\\dnsrslvr.dll\nc:\\Windows\\System32\\Docking.VirtualInput.dll\r\n",
        "c:\\Windows\\System32\\DockInterface.ProxyStub.dll\r\nc:\\Windows\\System32\\doclient.dll\r\nc:\\Windows\\System32\\docprop.dll",
        "c:\\Windows\\System32\\DocumentPerformanceEvents.dll\r\nc:\\Windows\\System32\\DolbyDecMFT.dll\nc:\\Windows\\System32\\domgmt.dll\r\n",
        "c:\\Windows\\System32\\domiprov.dll\r\nc:\\Windows\\System32\\dosettings.dll\r\nc:\\Windows\\System32\\doskey.exe",
        "c:\\Windows\\System32\\dosvc.dll\r\nc:\\Windows\\System32\\dot3api.dll\r\nc:\\Windows\\System32\\dot3cfg.dll\n",
        "c:\\Windows\\System32\\Dot3Conn.dll\nc:\\Windows\\System32\\dot3dlg.dll\r\nc:\\Windows\\System32\\dot3gpclnt.dll",
        "c:\\Windows\\System32\\dot3gpui.dll\r\nc:\\Windows\\System32\\dot3hc.dll\nc:\\Windows\\System32\\dot3mm.dll\r\n",
        "c:\\Windows\\System32\\dot3msm.dll\nc:\\Windows\\System32\\dot3svc.dll\nc:\\Windows\\System32\\dot3ui.dll\r\n",
        "c:\\Windows\\System32\\dpapi.dll\r\nc:\\Windows\\System32\\dpapimig.exe\nc:\\Windows\\System32\\dpapiprovider.dll",
        "c:\\Windows\\System32\\dpapisrv.dll\r\nc:\\Windows\\System32\\DpiScaling.exe\r\nc:\\Windows\\System32\\dplcsp.dll\n",
        "c:\\Windows\\System32\\dpnaddr.dll\r\nc:\\Windows\\System32\\dpnathlp.dll\r\nc:\\Windows\\System32\\dpnet.dll\r\n",
        "c:\\Windows\\System32\\dpnhpast.dll\r\nc:\\Windows\\System32\\dpnhupnp.dll\nc:\\Windows\\System32\\dpnlobby.dll\n",
        "c:\\Windows\\System32\\dpnsvr.exe\nc:\\Windows\\System32\\dps.dll\r\nc:\\Windows\\System32\\dpx.dll",
        "c:\\Windows\\System32\\DragDropExperienceCommon.dll\nc:\\Windows\\System32\\DragDropExperienceDataExchangeDelegated.dll\nc:\\Windows\\System32\\driverquery.exe",
        "c:\\Windows\\System32\\drprov.dll\r\nc:\\Windows\\System32\\drt.dll\r\nc:\\Windows\\System32\\DrtmAuthTxt.wim\n",
        "c:\\Windows\\System32\\drtprov.dll\nc:\\Windows\\System32\\drttransport.dll\nc:\\Windows\\System32\\drvinst.exe",
        "c:\\Windows\\System32\\drvsetup.dll\nc:\\Windows\\System32\\drvstore.dll\r\nc:\\Windows\\System32\\dsauth.dll\n",
        "c:\\Windows\\System32\\DscCore.dll\nc:\\Windows\\System32\\DscCoreConfProv.dll\r\nc:\\Windows\\System32\\dsclient.dll\r\n",
        "c:\\Windows\\System32\\dscproxy.dll\r\nc:\\Windows\\System32\\DscTimer.dll\r\nc:\\Windows\\System32\\dsdmo.dll",
        "c:\\Windows\\System32\\dskquota.dll\r\nc:\\Windows\\System32\\dskquoui.dll\r\nc:\\Windows\\System32\\DsmUserTask.exe\n",
        "c:\\Windows\\System32\\dsound.dll\nc:\\Windows\\System32\\dsparse.dll\nc:\\Windows\\System32\\dsprop.dll",
        "c:\\Windows\\System32\\dsquery.dll\nc:\\Windows\\System32\\dsreg.dll\nc:\\Windows\\System32\\dsregcmd.exe",
        "c:\\Windows\\System32\\dsregtask.dll\r\nc:\\Windows\\System32\\dsrole.dll\nc:\\Windows\\System32\\dssec.dat\n",
        "c:\\Windows\\System32\\dssec.dll\nc:\\Windows\\System32\\dssenh.dll\nc:\\Windows\\System32\\dssvc.dll\n",
        "c:\\Windows\\System32\\dstokenclean.exe\nc:\\Windows\\System32\\Dsui.dll\r\nc:\\Windows\\System32\\dsuiext.dll\n",
        "c:\\Windows\\System32\\dswave.dll\r\nc:\\Windows\\System32\\dtdump.exe\r\nc:\\Windows\\System32\\dtsh.dll\n",
        "c:\\Windows\\System32\\DuCsps.dll\nc:\\Windows\\System32\\dui70.dll\r\nc:\\Windows\\System32\\duser.dll",
        "c:\\Windows\\System32\\dusmapi.dll\nc:\\Windows\\System32\\dusmsvc.dll\nc:\\Windows\\System32\\dusmtask.exe\r\n",
        "c:\\Windows\\System32\\dvdplay.exe\nc:\\Windows\\System32\\dwm.exe\nc:\\Windows\\System32\\dwmapi.dll\n",
        "c:\\Windows\\System32\\dwmcore.dll\r\nc:\\Windows\\System32\\dwmghost.dll\nc:\\Windows\\System32\\dwminit.dll\n",
        "c:\\Windows\\System32\\dwmredir.dll\nc:\\Windows\\System32\\dwmscene.dll\nc:\\Windows\\System32\\DWrite.dll\r\n",
        "c:\\Windows\\System32\\DWWIN.EXE\r\nc:\\Windows\\System32\\DXCap.exe\r\nc:\\Windows\\System32\\DXCaptureReplay.dll",
        "c:\\Windows\\System32\\DXCore.dll\r\nc:\\Windows\\System32\\DXCpl.exe\nc:\\Windows\\System32\\dxdiag.exe\r\n",
        "c:\\Windows\\System32\\dxdiagn.dll\nc:\\Windows\\System32\\dxgi.dll\r\nc:\\Windows\\System32\\dxgiadaptercache.exe",
        "c:\\Windows\\System32\\DXGIDebug.dll\nc:\\Windows\\System32\\dxgwdi.dll\r\nc:\\Windows\\System32\\dxilconv.dll",
        "c:\\Windows\\System32\\dxmasf.dll\r\nc:\\Windows\\System32\\DXP.dll\nc:\\Windows\\System32\\dxpps.dll\r\n",
        "c:\\Windows\\System32\\Dxpserver.exe\r\nc:\\Windows\\System32\\DxpTaskSync.dll\nc:\\Windows\\System32\\dxtmsft.dll",
        "c:\\Windows\\System32\\DXToolsMonitor.dll\nc:\\Windows\\System32\\DXToolsOfflineAnalysis.dll\nc:\\Windows\\System32\\DxToolsReportGenerator.dll\r\n",
        "c:\\Windows\\System32\\DXToolsReporting.dll\r\nc:\\Windows\\System32\\dxtrans.dll\nc:\\Windows\\System32\\dxva2.dll",
        "c:\\Windows\\System32\\DynamicLong.bin\r\nc:\\Windows\\System32\\DynamicMedium.bin\r\nc:\\Windows\\System32\\DynamicShort.bin\r\n",
        "c:\\Windows\\System32\\dynamoapi.dll\nc:\\Windows\\System32\\EAMProgressHandler.dll\nc:\\Windows\\System32\\Eap3Host.exe",
        "c:\\Windows\\System32\\eapp3hst.dll\r\nc:\\Windows\\System32\\eappcfg.dll\r\nc:\\Windows\\System32\\eappcfgui.dll",
        "c:\\Windows\\System32\\eappgnui.dll\r\nc:\\Windows\\System32\\eapphost.dll\nc:\\Windows\\System32\\eappprxy.dll",
        "c:\\Windows\\System32\\eapprovp.dll\r\nc:\\Windows\\System32\\eapputil.dll\nc:\\Windows\\System32\\eapsimextdesktop.dll\r\n",
        "c:\\Windows\\System32\\eapsvc.dll\nc:\\Windows\\System32\\EapTeapAuth.dll\nc:\\Windows\\System32\\EapTeapConfig.dll",
        "c:\\Windows\\System32\\EapTeapExt.dll\r\nc:\\Windows\\System32\\EarbudsSystemToastIcon.contrast-white.png\nc:\\Windows\\System32\\EarbudsSystemToastIcon.png\n",
        "c:\\Windows\\System32\\easconsent.dll\nc:\\Windows\\System32\\EaseOfAccessDialog.exe\nc:\\Windows\\System32\\easinvoker.exe\r\n",
        "c:\\Windows\\System32\\easinvoker.proxystub.dll\nc:\\Windows\\System32\\EASPolicyManagerBrokerHost.exe\nc:\\Windows\\System32\\EasPolicyManagerBrokerPS.dll\n",
        "c:\\Windows\\System32\\easwrt.dll\nc:\\Windows\\System32\\edgeangle.dll\r\nc:\\Windows\\System32\\EdgeContent.dll\r\n",
        "c:\\Windows\\System32\\edgehtml.dll\nc:\\Windows\\System32\\edgeIso.dll\r\nc:\\Windows\\System32\\EdgeManager.dll",
        "c:\\Windows\\System32\\EdgeResetPlugin.dll\nc:\\Windows\\System32\\EditBufferTestHook.dll\nc:\\Windows\\System32\\EditionUpgradeHelper.dll\r\n",
        "c:\\Windows\\System32\\EditionUpgradeManagerObj.dll\r\nc:\\Windows\\System32\\edpauditapi.dll\nc:\\Windows\\System32\\EDPCleanup.exe\n",
        "c:\\Windows\\System32\\edpcsp.dll\r\nc:\\Windows\\System32\\edpnotify.exe\r\nc:\\Windows\\System32\\edptask.dll",
        "c:\\Windows\\System32\\edputil.dll\r\nc:\\Windows\\System32\\EduPrintProv.exe\r\nc:\\Windows\\System32\\eeprov.dll",
        "c:\\Windows\\System32\\eeutil.dll\nc:\\Windows\\System32\\efsadu.dll\nc:\\Windows\\System32\\efscore.dll\r\n",
        "c:\\Windows\\System32\\efsext.dll\nc:\\Windows\\System32\\efslsaext.dll\nc:\\Windows\\System32\\efssvc.dll",
        "c:\\Windows\\System32\\efsui.exe\nc:\\Windows\\System32\\efsutil.dll\r\nc:\\Windows\\System32\\efswrt.dll",
        "c:\\Windows\\System32\\EhStorAPI.dll\r\nc:\\Windows\\System32\\EhStorAuthn.exe\nc:\\Windows\\System32\\EhStorPwdMgr.dll",
        "c:\\Windows\\System32\\EhStorShell.dll\r\nc:\\Windows\\System32\\els.dll\nc:\\Windows\\System32\\ELSCore.dll\r\n",
        "c:\\Windows\\System32\\elshyph.dll\r\nc:\\Windows\\System32\\elslad.dll\nc:\\Windows\\System32\\elsTrans.dll",
        "c:\\Windows\\System32\\EmailApis.dll\r\nc:\\Windows\\System32\\embeddedmodesvc.dll\r\nc:\\Windows\\System32\\embeddedmodesvcapi.dll",
        "c:\\Windows\\System32\\EmojiDS.dll\r\nc:\\Windows\\System32\\encapi.dll\r\nc:\\Windows\\System32\\energy.dll",
        "c:\\Windows\\System32\\energyprov.dll\r\nc:\\Windows\\System32\\energytask.dll\r\nc:\\Windows\\System32\\enrollmentapi.dll",
        "c:\\Windows\\System32\\EnterpriseAPNCsp.dll\r\nc:\\Windows\\System32\\EnterpriseAppMgmtClient.dll\nc:\\Windows\\System32\\EnterpriseAppMgmtSvc.dll",
        "c:\\Windows\\System32\\EnterpriseAppVMgmtCSP.dll\nc:\\Windows\\System32\\enterprisecsps.dll\r\nc:\\Windows\\System32\\EnterpriseDesktopAppMgmtCSP.dll",
        "c:\\Windows\\System32\\enterpriseetw.dll\nc:\\Windows\\System32\\EnterpriseModernAppMgmtCSP.dll\nc:\\Windows\\System32\\enterpriseresourcemanager.dll\n",
        "c:\\Windows\\System32\\EoAExperiences.exe\r\nc:\\Windows\\System32\\eqossnap.dll\r\nc:\\Windows\\System32\\ErrorDetails.dll",
        "c:\\Windows\\System32\\ErrorDetailsCore.dll\r\nc:\\Windows\\System32\\es.dll\nc:\\Windows\\System32\\EsclProtocol.dll",
        "c:\\Windows\\System32\\EsclScan.dll\nc:\\Windows\\System32\\EsclWiaDriver.dll\r\nc:\\Windows\\System32\\EsdSip.dll\r\n",
        "c:\\Windows\\System32\\esent.dll\r\nc:\\Windows\\System32\\esentprf.dll\nc:\\Windows\\System32\\esentutl.exe\n",
        "c:\\Windows\\System32\\esevss.dll\nc:\\Windows\\System32\\eShims.dll\r\nc:\\Windows\\System32\\esimtool.exe",
        "c:\\Windows\\System32\\esrb.rs\nc:\\Windows\\System32\\EthernetMediaManager.dll\nc:\\Windows\\System32\\ETWCoreUIComponentsResources.dll",
        "c:\\Windows\\System32\\ETWESEProviderResources.dll\nc:\\Windows\\System32\\EtwRundown.dll\nc:\\Windows\\System32\\eudcedit.exe",
        "c:\\Windows\\System32\\eUICCsCSP.dll\nc:\\Windows\\System32\\EULA.Microsoft.Application.Verifier.rtf\r\nc:\\Windows\\System32\\EventAggregation.dll",
        "c:\\Windows\\System32\\eventcls.dll\nc:\\Windows\\System32\\eventcreate.exe\nc:\\Windows\\System32\\EventViewer_EventDetails.xsl\r\n",
        "c:\\Windows\\System32\\eventvwr.exe\r\nc:\\Windows\\System32\\eventvwr.msc\r\nc:\\Windows\\System32\\evr.dll\n",
        "c:\\Windows\\System32\\ExecModelClient.dll\r\nc:\\Windows\\System32\\execmodelproxy.dll\nc:\\Windows\\System32\\expand.exe\n",
        "c:\\Windows\\System32\\ExplorerFrame.dll\r\nc:\\Windows\\System32\\ExSMime.dll\nc:\\Windows\\System32\\extrac32.exe",
        "c:\\Windows\\System32\\ExtrasXmlParser.dll\nc:\\Windows\\System32\\f1db7d81-95be-4911-935a-8ab71629112a_HyperV-IsolatedVM.dll\nc:\\Windows\\System32\\f3ahvoas.dll",
        "c:\\Windows\\System32\\f989b52d-f928-44a3-9bf1-bf0c1da6a0d6_HyperV-DeviceVirtualization.dll\nc:\\Windows\\System32\\facecredentialprovider.dll\nc:\\Windows\\System32\\Facilitator.dll",
        "c:\\Windows\\System32\\Family.Authentication.dll\r\nc:\\Windows\\System32\\Family.Cache.dll\r\nc:\\Windows\\System32\\Family.Client.dll\r\n",
        "c:\\Windows\\System32\\Family.SyncEngine.dll\nc:\\Windows\\System32\\FamilySafetyExt.dll\r\nc:\\Windows\\System32\\Faultrep.dll",
        "c:\\Windows\\System32\\FaxPrinterInstaller.dll\nc:\\Windows\\System32\\fc.exe\nc:\\Windows\\System32\\fclip.exe\r\n",
        "c:\\Windows\\System32\\fcon.dll\r\nc:\\Windows\\System32\\fdBth.dll\nc:\\Windows\\System32\\fdBthProxy.dll",
        "c:\\Windows\\System32\\FdDevQuery.dll\nc:\\Windows\\System32\\fde.dll\nc:\\Windows\\System32\\fdeploy.dll\n",
        "c:\\Windows\\System32\\fdPHost.dll\nc:\\Windows\\System32\\fdPnp.dll\nc:\\Windows\\System32\\fdprint.dll",
        "c:\\Windows\\System32\\fdProxy.dll\r\nc:\\Windows\\System32\\FDResPub.dll\nc:\\Windows\\System32\\fdSSDP.dll",
        "c:\\Windows\\System32\\fdWCN.dll\nc:\\Windows\\System32\\fdWNet.dll\r\nc:\\Windows\\System32\\fdWSD.dll\r\n",
        "c:\\Windows\\System32\\FeatureToastBulldogImg.png\r\nc:\\Windows\\System32\\FeatureToastDlpImg.png\r\nc:\\Windows\\System32\\feclient.dll",
        "c:\\Windows\\System32\\ffbroker.dll\r\nc:\\Windows\\System32\\fhcat.dll\nc:\\Windows\\System32\\fhcfg.dll",
        "c:\\Windows\\System32\\fhcleanup.dll\nc:\\Windows\\System32\\fhcpl.dll\nc:\\Windows\\System32\\fhengine.dll\r\n",
        "c:\\Windows\\System32\\fhevents.dll\r\nc:\\Windows\\System32\\fhmanagew.exe\r\nc:\\Windows\\System32\\fhsettingsprovider.dll",
        "c:\\Windows\\System32\\fhshl.dll\nc:\\Windows\\System32\\fhsrchapi.dll\nc:\\Windows\\System32\\fhsrchph.dll",
        "c:\\Windows\\System32\\fhsvc.dll\r\nc:\\Windows\\System32\\fhsvcctl.dll\nc:\\Windows\\System32\\fhtask.dll",
        "c:\\Windows\\System32\\fhuxadapter.dll\nc:\\Windows\\System32\\fhuxapi.dll\nc:\\Windows\\System32\\fhuxcommon.dll",
        "c:\\Windows\\System32\\fhuxgraphics.dll\nc:\\Windows\\System32\\fhuxpresentation.dll\nc:\\Windows\\System32\\fidocredprov.dll",
        "c:\\Windows\\System32\\FileAppxStreamingDataSource.dll\nc:\\Windows\\System32\\FileDialogBroker.exe\r\nc:\\Windows\\System32\\FileHistory.exe\n",
        "c:\\Windows\\System32\\filemgmt.dll\r\nc:\\Windows\\System32\\FilterDS.dll\r\nc:\\Windows\\System32\\find.exe\r\n",
        "c:\\Windows\\System32\\findnetprinters.dll\r\nc:\\Windows\\System32\\findstr.exe\nc:\\Windows\\System32\\finger.exe",
        "c:\\Windows\\System32\\fingerprintcredential.dll\r\nc:\\Windows\\System32\\Firewall.cpl\nc:\\Windows\\System32\\FirewallAPI.dll",
        "c:\\Windows\\System32\\FirewallControlPanel.dll\nc:\\Windows\\System32\\FirmwareAttestationServerProxyStub.dll\r\nc:\\Windows\\System32\\fixmapi.exe\r\n",
        "c:\\Windows\\System32\\FlightSettings.dll\nc:\\Windows\\System32\\fltLib.dll\nc:\\Windows\\System32\\fltMC.exe",
        "c:\\Windows\\System32\\FluencyDS.dll\r\nc:\\Windows\\System32\\fmapi.dll\nc:\\Windows\\System32\\fmifs.dll\r\n",
        "c:\\Windows\\System32\\fms.dll\nc:\\Windows\\System32\\FNTCACHE.DAT\nc:\\Windows\\System32\\FntCache.dll",
        "c:\\Windows\\System32\\fodhelper.exe\r\nc:\\Windows\\System32\\Fondue.exe\r\nc:\\Windows\\System32\\fontdrvhost.exe\r\n",
        "c:\\Windows\\System32\\fontext.dll\nc:\\Windows\\System32\\FontGlyphAnimator.dll\r\nc:\\Windows\\System32\\fontgroupsoverride.dll",
        "c:\\Windows\\System32\\FontProvider.dll\nc:\\Windows\\System32\\fontsub.dll\nc:\\Windows\\System32\\fontview.exe\r\n",
        "c:\\Windows\\System32\\forfiles.exe\nc:\\Windows\\System32\\format.com\nc:\\Windows\\System32\\fpb.rs\r\n",
        "c:\\Windows\\System32\\fphc.dll\nc:\\Windows\\System32\\framedyn.dll\r\nc:\\Windows\\System32\\framedynos.dll\r\n",
        "c:\\Windows\\System32\\FrameServer.dll\r\nc:\\Windows\\System32\\FrameServerClient.dll\nc:\\Windows\\System32\\FrameServerMonitor.dll",
        "c:\\Windows\\System32\\FrameServerMonitorClient.dll\nc:\\Windows\\System32\\FrameworkPerf.dll\nc:\\Windows\\System32\\frprov.dll",
        "c:\\Windows\\System32\\fsavailux.exe\r\nc:\\Windows\\System32\\FsIso.exe\r\nc:\\Windows\\System32\\fsmgmt.msc",
        "c:\\Windows\\System32\\FsNVSDeviceSource.dll\r\nc:\\Windows\\System32\\fsquirt.exe\nc:\\Windows\\System32\\fsutil.exe",
        "c:\\Windows\\System32\\fsutilext.dll\nc:\\Windows\\System32\\fthsvc.dll\r\nc:\\Windows\\System32\\ftp.exe",
        "c:\\Windows\\System32\\fundisc.dll\nc:\\Windows\\System32\\fveapi.dll\r\nc:\\Windows\\System32\\fveapibase.dll\r\n",
        "c:\\Windows\\System32\\fvecerts.dll\nc:\\Windows\\System32\\fvecpl.dll\r\nc:\\Windows\\System32\\fvenotify.exe",
        "c:\\Windows\\System32\\fveprompt.exe\r\nc:\\Windows\\System32\\fveskybackup.dll\r\nc:\\Windows\\System32\\fveui.dll\r\n",
        "c:\\Windows\\System32\\fvewiz.dll\nc:\\Windows\\System32\\fwbase.dll\nc:\\Windows\\System32\\fwcfg.dll\n",
        "c:\\Windows\\System32\\fwmdmcsp.dll\r\nc:\\Windows\\System32\\fwpolicyiomgr.dll\nc:\\Windows\\System32\\FWPUCLNT.DLL",
        "c:\\Windows\\System32\\FwRemoteSvr.dll\r\nc:\\Windows\\System32\\FXSAPI.dll\nc:\\Windows\\System32\\FXSCOM.dll",
        "c:\\Windows\\System32\\FXSCOMEX.dll\nc:\\Windows\\System32\\FXSCOMPOSE.dll\r\nc:\\Windows\\System32\\FXSCOMPOSERES.dll",
        "c:\\Windows\\System32\\FXSCOVER.exe\nc:\\Windows\\System32\\FXSEVENT.dll\r\nc:\\Windows\\System32\\FXSMON.dll\n",
        "c:\\Windows\\System32\\FXSRESM.dll\r\nc:\\Windows\\System32\\FXSROUTE.dll\nc:\\Windows\\System32\\FXSST.dll",
        "c:\\Windows\\System32\\FXSSVC.exe\r\nc:\\Windows\\System32\\FXST30.dll\nc:\\Windows\\System32\\FXSTIFF.dll\n",
        "c:\\Windows\\System32\\FXSUNATD.exe\r\nc:\\Windows\\System32\\FXSUTILITY.dll\nc:\\Windows\\System32\\g711codc.ax\n",
        "c:\\Windows\\System32\\GameBarPresenceWriter.exe\nc:\\Windows\\System32\\GameBarPresenceWriter.proxy.dll\r\nc:\\Windows\\System32\\GameChatOverlayExt.dll",
        "c:\\Windows\\System32\\GameChatTranscription.dll\r\nc:\\Windows\\System32\\GameInput.dll\nc:\\Windows\\System32\\gamemode.dll",
        "c:\\Windows\\System32\\GamePanel.exe\nc:\\Windows\\System32\\GamePanelExternalHook.dll\nc:\\Windows\\System32\\gamestreamingext.dll",
        "c:\\Windows\\System32\\GameSystemToastIcon.contrast-white.png\nc:\\Windows\\System32\\GameSystemToastIcon.png\r\nc:\\Windows\\System32\\gameux.dll",
        "c:\\Windows\\System32\\gamingtcui.dll\nc:\\Windows\\System32\\gatherNetworkInfo.vbs\r\nc:\\Windows\\System32\\gb2312.uce",
        "c:\\Windows\\System32\\gcdef.dll\nc:\\Windows\\System32\\gdi32.dll\nc:\\Windows\\System32\\gdi32full.dll",
        "c:\\Windows\\System32\\GdiPlus.dll\nc:\\Windows\\System32\\generaltel.dll\nc:\\Windows\\System32\\GenValObj.exe\r\n",
        "c:\\Windows\\System32\\Geocommon.dll\r\nc:\\Windows\\System32\\Geolocation.dll\nc:\\Windows\\System32\\getmac.exe\n",
        "c:\\Windows\\System32\\getuname.dll\nc:\\Windows\\System32\\GfxValDisplayLog.bin\r\nc:\\Windows\\System32\\glmf32.dll\n",
        "c:\\Windows\\System32\\globinputhost.dll\nc:\\Windows\\System32\\glu32.dll\r\nc:\\Windows\\System32\\gmsaclient.dll",
        "c:\\Windows\\System32\\gpapi.dll\r\nc:\\Windows\\System32\\GPCSEWrapperCsp.dll\r\nc:\\Windows\\System32\\gpedit.dll\r\n",
        "c:\\Windows\\System32\\gpedit.msc\nc:\\Windows\\System32\\gpprefcl.dll\nc:\\Windows\\System32\\gpprnext.dll\n",
        "c:\\Windows\\System32\\gpresult.exe\nc:\\Windows\\System32\\gpscript.dll\nc:\\Windows\\System32\\gpscript.exe",
        "c:\\Windows\\System32\\gpsvc.dll\r\nc:\\Windows\\System32\\gptext.dll\nc:\\Windows\\System32\\gpupdate.exe",
        "c:\\Windows\\System32\\gpupvdev.dll\r\nc:\\Windows\\System32\\GraphicsCapture.dll\nc:\\Windows\\System32\\GraphicsPerfSvc.dll\r\n",
        "c:\\Windows\\System32\\grb.rs\nc:\\Windows\\System32\\Groupinghc.dll\r\nc:\\Windows\\System32\\grpconv.exe\r\n",
        "c:\\Windows\\System32\\hal.dll\nc:\\Windows\\System32\\HalExtIntcLpioDMA.dll\r\nc:\\Windows\\System32\\HalExtIntcPseDMA.dll",
        "c:\\Windows\\System32\\HalExtPL080.dll\nc:\\Windows\\System32\\HandwritingSystemToastIcon.contrast-white.png\r\nc:\\Windows\\System32\\HandwritingSystemToastIcon.png\r\n",
        "c:\\Windows\\System32\\HanjaDS.dll\r\nc:\\Windows\\System32\\hascsp.dll\nc:\\Windows\\System32\\HashtagDS.dll\n",
        "c:\\Windows\\System32\\hbaapi.dll\r\nc:\\Windows\\System32\\hcproviders.dll\r\nc:\\Windows\\System32\\hcsdiag.exe",
        "c:\\Windows\\System32\\HdcpHandler.dll\r\nc:\\Windows\\System32\\hdwwiz.cpl\r\nc:\\Windows\\System32\\hdwwiz.exe",
        "c:\\Windows\\System32\\HeadphoneSystemToastIcon.contrast-white.png\r\nc:\\Windows\\System32\\HeadphoneSystemToastIcon.png\nc:\\Windows\\System32\\HeadsetSystemToastIcon.contrast-white.png",
        "c:\\Windows\\System32\\HeadsetSystemToastIcon.png\r\nc:\\Windows\\System32\\HealthSystemToastIcon.contrast-white.png\nc:\\Windows\\System32\\HealthSystemToastIcon.png\n",
        "c:\\Windows\\System32\\HearingAidSystemToastIcon.contrast-white.png\r\nc:\\Windows\\System32\\HearingAidSystemToastIcon.png\nc:\\Windows\\System32\\HeatCore.dll",
        "c:\\Windows\\System32\\help.exe\nc:\\Windows\\System32\\HelpPaneProxy.dll\nc:\\Windows\\System32\\hgattest.dll",
        "c:\\Windows\\System32\\hgclientservice.dll\r\nc:\\Windows\\System32\\hgclientserviceps.dll\r\nc:\\Windows\\System32\\hgcpl.dll\n",
        "c:\\Windows\\System32\\hgsclientplugin.dll\nc:\\Windows\\System32\\HgsClientWmi.dll\r\nc:\\Windows\\System32\\hhctrl.ocx",
        "c:\\Windows\\System32\\hhsetup.dll\nc:\\Windows\\System32\\hid.dll\r\nc:\\Windows\\System32\\HidCfu.dll",
        "c:\\Windows\\System32\\hidphone.tsp\r\nc:\\Windows\\System32\\hidserv.dll\r\nc:\\Windows\\System32\\hlink.dll",
        "c:\\Windows\\System32\\hmkd.dll\nc:\\Windows\\System32\\hnetcfg.dll\r\nc:\\Windows\\System32\\HNetCfgClient.dll",
        "c:\\Windows\\System32\\hnetmon.dll\nc:\\Windows\\System32\\hnsdiag.exe\r\nc:\\Windows\\System32\\hnsproxy.dll",
        "c:\\Windows\\System32\\HologramCompositor.dll\nc:\\Windows\\System32\\HologramWorld.dll\r\nc:\\Windows\\System32\\HolographicExtensions.dll\n",
        "c:\\Windows\\System32\\HolographicRuntimes.dll\nc:\\Windows\\System32\\HoloShellRuntime.dll\r\nc:\\Windows\\System32\\HoloSHExtensions.dll\r\n",
        "c:\\Windows\\System32\\HoloSI.PCShell.dll\nc:\\Windows\\System32\\HostGuardianServiceClientResources.dll\r\nc:\\Windows\\System32\\HOSTNAME.EXE",
        "c:\\Windows\\System32\\HostNetSvc.dll\nc:\\Windows\\System32\\hotplug.dll\nc:\\Windows\\System32\\HrtfApo.dll",
        "c:\\Windows\\System32\\HrtfDspCpu.dll\r\nc:\\Windows\\System32\\hspapi.dll\r\nc:\\Windows\\System32\\hspfw.dll\n",
        "c:\\Windows\\System32\\html.iec\r\nc:\\Windows\\System32\\httpapi.dll\r\nc:\\Windows\\System32\\httpprxc.dll\n",
        "c:\\Windows\\System32\\httpprxm.dll\nc:\\Windows\\System32\\httpprxp.dll\nc:\\Windows\\System32\\HttpsDataSource.dll",
        "c:\\Windows\\System32\\htui.dll\r\nc:\\Windows\\System32\\hvax64.exe\r\nc:\\Windows\\System32\\hvc.exe",
        "c:\\Windows\\System32\\hvhostsvc.dll\r\nc:\\Windows\\System32\\hvix64.exe\r\nc:\\Windows\\System32\\hvloader.dll\n",
        "c:\\Windows\\System32\\hvsievaluator.exe\r\nc:\\Windows\\System32\\hvsigpext.dll\nc:\\Windows\\System32\\HvsiManagementApi.dll",
        "c:\\Windows\\System32\\HvSocket.dll\r\nc:\\Windows\\System32\\hwreqchk.dll\nc:\\Windows\\System32\\Hydrogen.dll",
        "c:\\Windows\\System32\\HyperVSysprepProvider.dll\nc:\\Windows\\System32\\IA2ComProxy.dll\nc:\\Windows\\System32\\ias.dll",
        "c:\\Windows\\System32\\iasacct.dll\nc:\\Windows\\System32\\iasads.dll\nc:\\Windows\\System32\\iasdatastore.dll\n",
        "c:\\Windows\\System32\\iashlpr.dll\r\nc:\\Windows\\System32\\IasMigPlugin.dll\nc:\\Windows\\System32\\iasnap.dll",
        "c:\\Windows\\System32\\iaspolcy.dll\r\nc:\\Windows\\System32\\iasrad.dll\r\nc:\\Windows\\System32\\iasrecst.dll\r\n",
        "c:\\Windows\\System32\\iassam.dll\r\nc:\\Windows\\System32\\iassdo.dll\nc:\\Windows\\System32\\iassvcs.dll",
        "c:\\Windows\\System32\\iaStorAfsNative.exe\r\nc:\\Windows\\System32\\iaStorAfsService.exe\r\nc:\\Windows\\System32\\icacls.exe",
        "c:\\Windows\\System32\\icfupgd.dll\nc:\\Windows\\System32\\icm32.dll\nc:\\Windows\\System32\\icmp.dll",
        "c:\\Windows\\System32\\icmui.dll\r\nc:\\Windows\\System32\\IconCodecService.dll\nc:\\Windows\\System32\\IcsEntitlementHost.exe",
        "c:\\Windows\\System32\\icsigd.dll\nc:\\Windows\\System32\\icsunattend.exe\nc:\\Windows\\System32\\icsvc.dll\r\n",
        "c:\\Windows\\System32\\icsvcext.dll\nc:\\Windows\\System32\\icsvcvss.dll\nc:\\Windows\\System32\\icu.dll",
        "c:\\Windows\\System32\\icuin.dll\r\nc:\\Windows\\System32\\icuuc.dll\r\nc:\\Windows\\System32\\IdCtrls.dll",
        "c:\\Windows\\System32\\ideograf.uce\r\nc:\\Windows\\System32\\IDStore.dll\r\nc:\\Windows\\System32\\ie4uinit.exe\r\n",
        "c:\\Windows\\System32\\ie4ushowIE.exe\r\nc:\\Windows\\System32\\IEAdvpack.dll\r\nc:\\Windows\\System32\\ieapfltr.dll",
        "c:\\Windows\\System32\\iedkcs32.dll\r\nc:\\Windows\\System32\\ieframe.dll\r\nc:\\Windows\\System32\\iemigplugin.dll\r\n",
    };
}

@danmoseley
Copy link
Member

danmoseley commented Jun 23, 2023

Ha, kudos!. Wonder how much of this if any might help the .NET Framework case (where there's no string.Create(delegate))

(Btw I actually meant, does the scenario suggest changes/new API of some sort in .NET that would make this easier for them. Eg a way to create StringBuilder over a pooled buffer might help.)

@rainersigwald
Copy link
Member

I think we can refactor this to be zero-alloc without jumping through any hoops in this method. Let me try that this afternoon before we proceed here.

I propose using CachedStringBuilder in the product instead of Optimized, since I think the maintainability gain outweighs the small perf loss.

I on board with this plan if my other refactor doesn't work, or causes dramatically worse perf when writing to the console (due to sending more smaller blocks to stdout).

I welcome feedback on the 512 character (1024 byte) upper bound on the cached builder's capacity.

We have Microsoft.Build.Framework.StringBuilderCache to use a thread-local cached stringbuilder and it has

private const int MAX_BUILDER_SIZE = 512;

So I'm not going to argue :)

@jdrobison
Copy link
Contributor Author

Nerdsnipe...

Well played, sir!

@jdrobison
Copy link
Contributor Author

jdrobison commented Jun 23, 2023

Taking advantage of @stephentoub's work with Nerdsnipe, I added XPlatNerdsnipe. It takes advantage of Nerdsnipe's more efficient implementation of GetStringSegments on all platforms, uses Nerdsnipe's string construction approach where String.Create is available, and falls back to the cached string builder on older platforms.

Not quite sure why the CPU ratio of XPlatNerdsnipe compared to Optimized on .NET 7 (~0.67) is so different from Nerdsnipe (~0.30), though. The only substantive difference I can see is that XPlatNerdsnipe doesn't use ReadOnlySpan<char>.Count(char), which gave me a compile error. I wouldn't think that would cause XPlatNerdsnipe to take twice as long to run.

``` | Method | Runtime | StringCount | Mean | Ratio | Allocated | Alloc Ratio | |-------------------- |--------------------- |------------ |-------------:|------:|----------:|------------:| | Optimized | .NET 7.0 | 2 | 808.5 ns | 1.00 | 976 B | 1.00 | | CachedStringBuilder | .NET 7.0 | 2 | 849.7 ns | 1.05 | 1050 B | 1.08 | | XPlatNerdsnipe | .NET 7.0 | 2 | 556.1 ns | 0.69 | 976 B | 1.00 | | | | | | | | | | Optimized | .NET Framework 4.7.2 | 2 | 911.5 ns | 1.00 | 979 B | 1.00 | | CachedStringBuilder | .NET Framework 4.7.2 | 2 | 1,120.1 ns | 1.23 | 1057 B | 1.08 | | XPlatNerdsnipe | .NET Framework 4.7.2 | 2 | 1,066.1 ns | 1.17 | 1057 B | 1.08 | | | | | | | | | | Optimized | .NET 7.0 | 4 | 1,416.6 ns | 1.00 | 1632 B | 1.00 | | CachedStringBuilder | .NET 7.0 | 4 | 1,504.6 ns | 1.06 | 1779 B | 1.09 | | XPlatNerdsnipe | .NET 7.0 | 4 | 941.9 ns | 0.66 | 1632 B | 1.00 | | | | | | | | | | Optimized | .NET Framework 4.7.2 | 4 | 1,624.0 ns | 1.00 | 1653 B | 1.00 | | CachedStringBuilder | .NET Framework 4.7.2 | 4 | 2,007.6 ns | 1.24 | 1810 B | 1.09 | | XPlatNerdsnipe | .NET Framework 4.7.2 | 4 | 1,851.7 ns | 1.14 | 1810 B | 1.09 | | | | | | | | | | Optimized | .NET 7.0 | 8 | 2,728.3 ns | 1.00 | 3096 B | 1.00 | | CachedStringBuilder | .NET 7.0 | 8 | 2,872.3 ns | 1.05 | 3428 B | 1.11 | | XPlatNerdsnipe | .NET 7.0 | 8 | 1,881.4 ns | 0.68 | 3096 B | 1.00 | | | | | | | | | | Optimized | .NET Framework 4.7.2 | 8 | 3,140.2 ns | 1.00 | 3145 B | 1.00 | | CachedStringBuilder | .NET Framework 4.7.2 | 8 | 3,872.6 ns | 1.23 | 3448 B | 1.10 | | XPlatNerdsnipe | .NET Framework 4.7.2 | 8 | 3,665.4 ns | 1.17 | 3448 B | 1.10 | | | | | | | | | | Optimized | .NET 7.0 | 16 | 4,839.3 ns | 1.00 | 5424 B | 1.00 | | CachedStringBuilder | .NET 7.0 | 16 | 5,308.4 ns | 1.10 | 6176 B | 1.14 | | XPlatNerdsnipe | .NET 7.0 | 16 | 3,229.0 ns | 0.67 | 5424 B | 1.00 | | | | | | | | | | Optimized | .NET Framework 4.7.2 | 16 | 5,710.2 ns | 1.00 | 5504 B | 1.00 | | CachedStringBuilder | .NET Framework 4.7.2 | 16 | 7,209.0 ns | 1.26 | 6129 B | 1.11 | | XPlatNerdsnipe | .NET Framework 4.7.2 | 16 | 6,812.8 ns | 1.19 | 6129 B | 1.11 | | | | | | | | | | Optimized | .NET 7.0 | 32 | 9,133.1 ns | 1.00 | 9920 B | 1.00 | | CachedStringBuilder | .NET 7.0 | 32 | 9,834.4 ns | 1.08 | 11447 B | 1.15 | | XPlatNerdsnipe | .NET 7.0 | 32 | 6,086.6 ns | 0.67 | 9920 B | 1.00 | | | | | | | | | | Optimized | .NET Framework 4.7.2 | 32 | 10,941.4 ns | 1.00 | 10102 B | 1.00 | | CachedStringBuilder | .NET Framework 4.7.2 | 32 | 13,933.2 ns | 1.27 | 11429 B | 1.13 | | XPlatNerdsnipe | .NET Framework 4.7.2 | 32 | 13,253.0 ns | 1.21 | 11429 B | 1.13 | | | | | | | | | | Optimized | .NET 7.0 | 64 | 18,955.3 ns | 1.00 | 19832 B | 1.00 | | CachedStringBuilder | .NET 7.0 | 64 | 20,305.9 ns | 1.07 | 23019 B | 1.16 | | XPlatNerdsnipe | .NET 7.0 | 64 | 12,412.4 ns | 0.66 | 19832 B | 1.00 | | | | | | | | | | Optimized | .NET Framework 4.7.2 | 64 | 22,375.4 ns | 1.00 | 20131 B | 1.00 | | CachedStringBuilder | .NET Framework 4.7.2 | 64 | 28,966.9 ns | 1.30 | 22662 B | 1.13 | | XPlatNerdsnipe | .NET Framework 4.7.2 | 64 | 27,949.3 ns | 1.25 | 22662 B | 1.13 | | | | | | | | | | Optimized | .NET 7.0 | 128 | 36,466.0 ns | 1.00 | 38136 B | 1.00 | | CachedStringBuilder | .NET 7.0 | 128 | 40,436.7 ns | 1.11 | 44313 B | 1.16 | | XPlatNerdsnipe | .NET 7.0 | 128 | 24,885.1 ns | 0.68 | 38136 B | 1.00 | | | | | | | | | | Optimized | .NET Framework 4.7.2 | 128 | 43,507.7 ns | 1.00 | 38827 B | 1.00 | | CachedStringBuilder | .NET Framework 4.7.2 | 128 | 56,402.2 ns | 1.30 | 43672 B | 1.12 | | XPlatNerdsnipe | .NET Framework 4.7.2 | 128 | 54,081.8 ns | 1.24 | 43672 B | 1.12 | | | | | | | | | | Optimized | .NET 7.0 | 256 | 71,974.4 ns | 1.00 | 73360 B | 1.00 | | CachedStringBuilder | .NET 7.0 | 256 | 80,293.3 ns | 1.12 | 85106 B | 1.16 | | XPlatNerdsnipe | .NET 7.0 | 256 | 49,495.1 ns | 0.69 | 73360 B | 1.00 | | | | | | | | | | Optimized | .NET Framework 4.7.2 | 256 | 86,352.2 ns | 1.00 | 74645 B | 1.00 | | CachedStringBuilder | .NET Framework 4.7.2 | 256 | 110,981.4 ns | 1.29 | 84060 B | 1.13 | | XPlatNerdsnipe | .NET Framework 4.7.2 | 256 | 109,097.8 ns | 1.26 | 84059 B | 1.13 | | | | | | | | | | Optimized | .NET 7.0 | 512 | 145,026.5 ns | 1.00 | 145728 B | 1.00 | | CachedStringBuilder | .NET 7.0 | 512 | 160,869.5 ns | 1.11 | 166518 B | 1.14 | | XPlatNerdsnipe | .NET 7.0 | 512 | 105,011.6 ns | 0.72 | 145728 B | 1.00 | | | | | | | | | | Optimized | .NET Framework 4.7.2 | 512 | 172,150.3 ns | 1.00 | 148296 B | 1.00 | | CachedStringBuilder | .NET Framework 4.7.2 | 512 | 224,211.6 ns | 1.30 | 166100 B | 1.12 | | XPlatNerdsnipe | .NET Framework 4.7.2 | 512 | 225,702.1 ns | 1.31 | 166101 B | 1.12 | ```

@stephentoub
Copy link
Member

The only substantive difference I can see is that XPlatNerdsnipe doesn't use ReadOnlySpan.Count(char), which gave me a compile error. I wouldn't think that would cause XPlatNerdsnipe to take twice as long to run.

MemoryExtensions.Count was added in .NET 8, which is why it doesn't compile. It won't be quite as good, but you can try substituting something like:

internal static int Count(this ReadOnlySpan<char> span, char c)
{
    int count = 0;
    while (true)
    {
        int i = span.IndexOf(c);
        if (i < 0) break;
        count++;
        span = span.Slice(i + 1);
    }
    return count;
}

@jdrobison
Copy link
Contributor Author

I benchmarked XPlatNerdsnipe on .NET 8 vs .NET 7 and there was a notable improvement just by changing runtimes. It didn't account for 100% of the difference between it and Nerdsnipe, but it's close enough for me to no longer worry about it anymore.

I'll push XPlatNerdsnipe to the PR...

@rainersigwald
Copy link
Member

My investigations didn't pan out: on .NET Framework where there's no TextWriter.Write(ReadOnlySpan<char>) we'd wind up materializing a bajillion small strings to avoid allocating the single right-sized one, so that sounds good.

@AR-May AR-May requested review from rainersigwald and rokonec June 27, 2023 13:32
@rainersigwald
Copy link
Member

@jdrobison I have some nits I won't burden you with and I'll fix the unused warning while I'm in there.

@jdrobison
Copy link
Contributor Author

@jdrobison I have some nits I won't burden you with and I'll fix the unused warning while I'm in there.

Thanks, @rainersigwald!

@jdrobison
Copy link
Contributor Author

@rokonec, I need a second approval on this PR. Could you take a look? Thanks

Copy link
Member

@JanKrivanek JanKrivanek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rewieving additional commit 9a3657f by @rokonec - looks good!

@rokonec rokonec merged commit af9824d into dotnet:main Jul 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants