aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Module.Taskfile.yaml8
-rw-r--r--Taskfile.yaml11
-rw-r--r--lib/Hashing.Portable/src/Argon2/Argon2PasswordEntry.cs45
-rw-r--r--lib/Hashing.Portable/src/Argon2/VnArgon2.cs250
-rw-r--r--lib/Hashing.Portable/src/VNLib.Hashing.Portable.csproj11
-rw-r--r--lib/Hashing.Portable/tests/ManagedHashTests.cs27
-rw-r--r--lib/Net.Compression/VNLib.Net.Compression/VNLib.Net.Compression.csproj8
-rw-r--r--lib/Net.Compression/vnlib_compress/CMakeLists.txt52
-rw-r--r--lib/Net.Compression/vnlib_compress/Taskfile.yaml2
-rw-r--r--lib/Net.Http/src/Core/ConnectionInfo.cs26
-rw-r--r--lib/Net.Http/src/Core/HttpCookie.cs121
-rw-r--r--lib/Net.Http/src/Core/HttpServerProcessing.cs18
-rw-r--r--lib/Net.Http/src/Core/IHttpContextInformation.cs3
-rw-r--r--lib/Net.Http/src/Core/PerfCounter/HttpPerfCounter.cs76
-rw-r--r--lib/Net.Http/src/Core/PerfCounter/HttpPerfCounterState.cs32
-rw-r--r--lib/Net.Http/src/Core/Request/HttpRequest.cs7
-rw-r--r--lib/Net.Http/src/Core/Response/HttpContextResponseWriting.cs2
-rw-r--r--lib/Net.Http/src/Core/Response/HttpResponse.cs30
-rw-r--r--lib/Net.Http/src/Core/Response/ResponsBodyDataState.cs6
-rw-r--r--lib/Net.Http/src/Core/Response/ResponseWriter.cs27
-rw-r--r--lib/Net.Http/src/Helpers/HttpControlMask.cs4
-rw-r--r--lib/Net.Http/src/Helpers/HttpHelpers.cs14
-rw-r--r--lib/Net.Http/src/HttpConfig.cs7
-rw-r--r--lib/Net.Http/src/HttpResponseCookie.cs226
-rw-r--r--lib/Net.Http/src/IConnectionInfo.cs11
-rw-r--r--lib/Net.Http/src/VNLib.Net.Http.csproj7
-rw-r--r--lib/Net.Messaging.FBM/src/Client/FBMRequest.cs4
-rw-r--r--lib/Net.Messaging.FBM/src/VNLib.Net.Messaging.FBM.csproj7
-rw-r--r--lib/Net.Rest.Client/src/Construction/Extensions.cs98
-rw-r--r--lib/Net.Rest.Client/src/VNLib.Net.Rest.Client.csproj5
-rw-r--r--lib/Net.Transport.SimpleTCP/src/SocketPipeLineWorker.cs12
-rw-r--r--lib/Net.Transport.SimpleTCP/src/VNLib.Net.Transport.SimpleTCP.csproj7
-rw-r--r--lib/Plugins.Essentials.ServiceStack/src/VNLib.Plugins.Essentials.ServiceStack.csproj9
-rw-r--r--lib/Plugins.Essentials/src/Accounts/PasswordHashing.cs100
-rw-r--r--lib/Plugins.Essentials/src/Endpoints/SemiConsistentVeTable.cs (renamed from lib/Plugins.Essentials/src/SemiConsistentVeTable.cs)7
-rw-r--r--lib/Plugins.Essentials/src/EventProcessor.cs37
-rw-r--r--lib/Plugins.Essentials/src/EventProcessorConfig.cs1
-rw-r--r--lib/Plugins.Essentials/src/Extensions/ConnectionInfoExtensions.cs131
-rw-r--r--lib/Plugins.Essentials/src/Extensions/EssentialHttpEventExtensions.cs64
-rw-r--r--lib/Plugins.Essentials/src/Extensions/HttpCookie.cs3
-rw-r--r--lib/Plugins.Essentials/src/Extensions/SingleCookieController.cs18
-rw-r--r--lib/Plugins.Essentials/src/HttpEntity.cs54
-rw-r--r--lib/Plugins.Essentials/src/Middleware/IHttpMiddleware.cs16
-rw-r--r--lib/Plugins.Essentials/src/Middleware/MiddlewareController.cs88
-rw-r--r--lib/Plugins.Essentials/src/Oauth/OauthHttpExtensions.cs24
-rw-r--r--lib/Plugins.Essentials/src/VNLib.Plugins.Essentials.csproj8
-rw-r--r--lib/Plugins.PluginBase/src/VNLib.Plugins.PluginBase.csproj6
-rw-r--r--lib/Plugins.Runtime/src/VNLib.Plugins.Runtime.csproj7
-rw-r--r--lib/Plugins/src/VNLib.Plugins.csproj7
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/CMakeLists.txt69
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/Taskfile.yaml6
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/.gitattributes1
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/CMakeLists.txt71
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/SECURITY.md16
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/cmake/mimalloc-config-version.cmake2
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-a.svg887
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-b.svg1185
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-a.svg757
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-b.svg1028
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-1.svg769
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-a.svg868
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-b.svg1157
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-2.svg983
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-rss-1.svg683
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-rss-2.svg854
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-spec-rss.svg713
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-spec.svg713
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-1.svg890
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-2.svg1146
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-rss-1.svg796
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-rss-2.svg974
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-amd5950x-2021-01-30-a.svg952
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-amd5950x-2021-01-30-b.svg1255
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-a.svg955
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-b.svg1269
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-a.svg836
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-b.svg1131
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-macmini-2021-01-30.svg766
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/doxyfile2659
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/ds-logo.jpgbin181497 -> 0 bytes
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/ds-logo.pngbin121150 -> 0 bytes
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-doc.h1281
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-doxygen.css49
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo-100.pngbin3532 -> 0 bytes
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo.pngbin73097 -> 0 bytes
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo.svg161
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/spades-logo.pngbin34583 -> 0 bytes
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/doc/unreal-logo.svg43
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-override-test.vcxproj190
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-override.vcxproj259
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-test-stress.vcxproj159
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-test.vcxproj158
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc.sln71
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc.vcxproj259
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-override-test.vcxproj190
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-override.vcxproj259
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test-api.vcxproj155
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test-stress.vcxproj159
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test.vcxproj158
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc.sln81
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc.vcxproj257
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-override-test.vcxproj190
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-override.vcxproj270
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test-api.vcxproj162
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test-stress.vcxproj159
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test.vcxproj158
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc.sln81
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc.vcxproj257
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc.h63
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/atomic.h14
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/internal.h89
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/prim.h103
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/track.h2
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/types.h169
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/readme.md115
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-aligned.c136
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-override.c27
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc.c582
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/arena.c356
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.c14
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.h4
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/free.c530
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/heap.c35
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/init.c53
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/libc.c273
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/options.c92
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/os.c79
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/page-queue.c55
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/page.c110
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/emscripten/prim.c244
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/osx/alloc-override-zone.c2
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/prim.c3
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/unix/prim.c80
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/wasi/prim.c5
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/windows/prim.c2
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment-map.c8
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment.c543
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/static.c1
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/src/stats.c60
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/test/main-override.cpp4
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-api.c108
-rw-r--r--lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-stress.c21
-rw-r--r--lib/Utils.Memory/vnlib_rpmalloc/CMakeLists.txt59
-rw-r--r--lib/Utils.Memory/vnlib_rpmalloc/Taskfile.yaml16
-rw-r--r--lib/Utils/src/Extensions/MemoryExtensions.cs70
-rw-r--r--lib/Utils/src/Extensions/StringExtensions.cs6
-rw-r--r--lib/Utils/src/Memory/ForwardOnlyWriter.cs108
-rw-r--r--lib/Utils/src/Memory/IUnmangedHeap.cs7
-rw-r--r--lib/Utils/src/Memory/MemoryUtil.CopyUtilCore.cs5
-rw-r--r--lib/Utils/src/Memory/NativeHeap.cs4
-rw-r--r--lib/Utils/src/Memory/UnmanagedHeapBase.cs2
-rw-r--r--lib/Utils/src/VNLib.Utils.csproj7
-rw-r--r--vnlib.core.build.sln33
153 files changed, 3974 insertions, 31626 deletions
diff --git a/Module.Taskfile.yaml b/Module.Taskfile.yaml
index c604ff8..8d81b0e 100644
--- a/Module.Taskfile.yaml
+++ b/Module.Taskfile.yaml
@@ -43,6 +43,10 @@ tasks:
- sleet push "{{.PACK_OUT}}/debug/" --source debug --config "{{.SLEET_CONFIG_PATH}}" --force
- sleet push "{{.PACK_OUT}}/release/" --source release --config "{{.SLEET_CONFIG_PATH}}" --force
+ test:
+ cmds:
+ - cmd: dotnet test --verbosity normal
+
#called by build pipeline to clean module
clean:
cmds:
@@ -57,11 +61,11 @@ tasks:
internal: true
cmds:
- dotnet publish -c debug {{.MS_ARGS}}
- - dotnet pack -c debug {{.MS_ARGS}} -o "{{.PACK_OUT}}/debug/"
+ - dotnet pack -c debug {{.MS_ARGS}} -o "{{.PACK_OUT}}/debug/" -p:PackageVersion={{.BUILD_VERSION}}
build_release:
internal: true
cmds:
- dotnet publish -c release {{.MS_ARGS}}
- - dotnet pack -c release {{.MS_ARGS}} -o "{{.PACK_OUT}}/release/"
+ - dotnet pack -c release {{.MS_ARGS}} -o "{{.PACK_OUT}}/release/" -p:PackageVersion={{.BUILD_VERSION}}
\ No newline at end of file
diff --git a/Taskfile.yaml b/Taskfile.yaml
index bd45655..0d73872 100644
--- a/Taskfile.yaml
+++ b/Taskfile.yaml
@@ -14,6 +14,17 @@ vars:
RELEASE_DIR: "./bin/release/{{.TARGET_FRAMEWORK}}/publish"
tasks:
+
+ dev-setup:
+ desc: 'Sets up all native libraries for local development'
+ cmds:
+ #build native libs for development
+ - cd lib/Utils.Memory/vnlib_rpmalloc && task build
+ - cd lib/Utils.Memory/vnlib_mimalloc && task build
+ - cd lib/Utils.Cryptography/monocypher && task build
+ - cd lib/Utils.Cryptography/argon2 && task build
+ - cd lib/Net.Compression/vnlib_compress && task build
+ - echo "dev setup complete"
#when build succeeds, archive the output into a tgz
postbuild_success:
diff --git a/lib/Hashing.Portable/src/Argon2/Argon2PasswordEntry.cs b/lib/Hashing.Portable/src/Argon2/Argon2PasswordEntry.cs
index f99d0dc..e195526 100644
--- a/lib/Hashing.Portable/src/Argon2/Argon2PasswordEntry.cs
+++ b/lib/Hashing.Portable/src/Argon2/Argon2PasswordEntry.cs
@@ -30,57 +30,64 @@ using VNLib.Utils.Extensions;
namespace VNLib.Hashing
{
- internal readonly ref struct Argon2PasswordEntry
+ internal readonly ref struct Argon2PasswordEntry(ReadOnlySpan<char> str)
{
- private readonly ReadOnlySpan<char> _window;
+ private readonly ReadOnlySpan<char> _window = str;
- public readonly Argon2Version Version;
- public readonly ReadOnlySpan<char> Salt;
- public readonly ReadOnlySpan<char> Hash;
+ public readonly Argon2Version Version = ParseVersion(str);
+ public readonly ReadOnlySpan<char> Salt = ParseSalt(str);
+ public readonly ReadOnlySpan<char> Hash = ParseHash(str);
private static Argon2Version ParseVersion(ReadOnlySpan<char> window)
{
//Version comes after the v= prefix
ReadOnlySpan<char> v = window.SliceAfterParam("v=");
- v = v.SliceBeforeParam(',');
//Parse the version as an enum value
- return Enum.Parse<Argon2Version>(v);
+ return Enum.Parse<Argon2Version>(v.SliceBeforeParam(','));
}
private static uint ParseTimeCost(ReadOnlySpan<char> window)
{
//TimeCost comes after the t= prefix
ReadOnlySpan<char> t = window.SliceAfterParam("t=");
- t = t.SliceBeforeParam(',');
//Parse the time cost as an unsigned integer
- return uint.Parse(t, NumberStyles.Integer, CultureInfo.InvariantCulture);
+ return uint.Parse(
+ t.SliceBeforeParam(','),
+ NumberStyles.Integer,
+ CultureInfo.InvariantCulture
+ );
}
private static uint ParseMemoryCost(ReadOnlySpan<char> window)
{
//MemoryCost comes after the m= prefix
ReadOnlySpan<char> m = window.SliceAfterParam("m=");
- m = m.SliceBeforeParam(',');
//Parse the memory cost as an unsigned integer
- return uint.Parse(m, NumberStyles.Integer, CultureInfo.InvariantCulture);
+ return uint.Parse(
+ m.SliceBeforeParam(','),
+ NumberStyles.Integer,
+ CultureInfo.InvariantCulture
+ );
}
private static uint ParseParallelism(ReadOnlySpan<char> window)
{
//Parallelism comes after the p= prefix
ReadOnlySpan<char> p = window.SliceAfterParam("p=");
- p = p.SliceBeforeParam(',');
//Parse the parallelism as an unsigned integer
- return uint.Parse(p, NumberStyles.Integer, CultureInfo.InvariantCulture);
+ return uint.Parse(
+ p.SliceBeforeParam(','),
+ NumberStyles.Integer,
+ CultureInfo.InvariantCulture
+ );
}
private static ReadOnlySpan<char> ParseSalt(ReadOnlySpan<char> window)
{
//Salt comes after the s= prefix
ReadOnlySpan<char> s = window.SliceAfterParam("s=");
- s = s.SliceBeforeParam('$');
//Parse the salt as a string
- return s;
+ return s.SliceBeforeParam('$');
}
private static ReadOnlySpan<char> ParseHash(ReadOnlySpan<char> window)
@@ -90,14 +97,6 @@ namespace VNLib.Hashing
return window[(start + 1)..];
}
- public Argon2PasswordEntry(ReadOnlySpan<char> str)
- {
- _window = str;
- Version = ParseVersion(str);
- Salt = ParseSalt(str);
- Hash = ParseHash(str);
- }
-
public readonly Argon2CostParams GetCostParams()
{
return new()
diff --git a/lib/Hashing.Portable/src/Argon2/VnArgon2.cs b/lib/Hashing.Portable/src/Argon2/VnArgon2.cs
index b88c232..d557822 100644
--- a/lib/Hashing.Portable/src/Argon2/VnArgon2.cs
+++ b/lib/Hashing.Portable/src/Argon2/VnArgon2.cs
@@ -35,6 +35,14 @@ using VNLib.Utils.Extensions;
using VNLib.Utils.Resources;
using VNLib.Hashing.Native.MonoCypher;
+/*
+ * Some stuff to note
+ *
+ * Functions have explicit parameters to avoid accidental buffer mixup
+ * when calling nested/overload functions. Please keep it that way for now
+ * I really want to avoid a whoopsie in password hasing.
+ */
+
namespace VNLib.Hashing
{
@@ -78,9 +86,8 @@ namespace VNLib.Hashing
argon2EnvPath ??= ARGON2_DEFUALT_LIB_NAME;
Trace.WriteLine("Attempting to load global native Argon2 library from: " + argon2EnvPath, "VnArgon2");
-
- SafeLibraryHandle lib = SafeLibraryHandle.LoadLibrary(argon2EnvPath, DllImportSearchPath.SafeDirectories);
- return new SafeArgon2Library(lib);
+
+ return LoadCustomLibrary(argon2EnvPath, DllImportSearchPath.SafeDirectories);
}
}
@@ -131,27 +138,31 @@ namespace VNLib.Hashing
{
//Get bytes count
int saltbytes = LocEncoding.GetByteCount(salt);
-
- //Get bytes count for password
int passBytes = LocEncoding.GetByteCount(password);
//Alloc memory for salt
- using MemoryHandle<byte> buffer = PwHeap.Alloc<byte>(saltbytes + passBytes);
+ using MemoryHandle<byte> buffer = PwHeap.Alloc<byte>(MemoryUtil.NearestPage(saltbytes + passBytes));
Span<byte> saltBuffer = buffer.AsSpan(0, saltbytes);
Span<byte> passBuffer = buffer.AsSpan(saltbytes, passBytes);
- //Encode salt with span the same size of the salt
+ //Decode from character buffers to binary buffers using default string encoding
_ = LocEncoding.GetBytes(salt, saltBuffer);
-
- //Encode password, create a new span to make sure its proper size
_ = LocEncoding.GetBytes(password, passBuffer);
-
- //Hash
- string result = Hash2id(lib, passBuffer, saltBuffer, secret, in costParams, hashLen);
-
- //Zero buffer
- MemoryUtil.InitializeBlock(ref buffer.GetReference(), buffer.GetIntLength());
+
+ string result = Hash2id(
+ lib: lib,
+ password: passBuffer,
+ salt: saltBuffer,
+ secret: secret,
+ costParams: in costParams,
+ hashLen: hashLen
+ );
+
+ MemoryUtil.InitializeBlock(
+ ref buffer.GetReference(),
+ buffer.GetIntLength()
+ );
return result;
}
@@ -180,17 +191,26 @@ namespace VNLib.Hashing
//Get bytes count
int passBytes = LocEncoding.GetByteCount(password);
- //Alloc memory for password
- using MemoryHandle<byte> pwdHandle = PwHeap.Alloc<byte>(passBytes);
+ //Alloc memory for password, round to page size again
+ using MemoryHandle<byte> pwdHandle = PwHeap.Alloc<byte>(MemoryUtil.NearestPage(passBytes));
//Encode password, create a new span to make sure its proper size
_ = LocEncoding.GetBytes(password, pwdHandle.Span);
-
- //Hash
- string result = Hash2id(lib, pwdHandle.Span, salt, secret, in costParams, hashLen);
+
+ string result = Hash2id(
+ lib: lib,
+ password: pwdHandle.AsSpan(0, passBytes), //Only actuall size for decoding
+ salt: salt,
+ secret: secret,
+ costParams: in costParams,
+ hashLen: hashLen
+ );
//Zero buffer
- MemoryUtil.InitializeBlock(ref pwdHandle.GetReference(), pwdHandle.GetIntLength());
+ MemoryUtil.InitializeBlock(
+ ref pwdHandle.GetReference(),
+ pwdHandle.GetIntLength()
+ );
return result;
}
@@ -217,16 +237,26 @@ namespace VNLib.Hashing
)
{
string hash, salts;
- //Alloc data for hash output
- using IMemoryHandle<byte> hashHandle = PwHeap.Alloc<byte>(hashLen, true);
-
- //hash the password
- Hash2id(lib, password, salt, secret, hashHandle.Span, in costParams);
- //Encode hash
- hash = Convert.ToBase64String(hashHandle.Span);
-
- //encode salt
+ /*
+ * Alloc a buffer of the nearest page to help disguise password related
+ * allocations. Global zero is always set on PwHeap.
+ */
+ using MemoryHandle<byte> outputHandle = PwHeap.Alloc<byte>(MemoryUtil.NearestPage(hashLen));
+
+ //Trim buffer to exact hash size as it will likely be larger due to page alignment
+ Span<byte> outBuffer = outputHandle.AsSpan(0, checked((int)hashLen));
+
+ Hash2id(
+ lib: lib,
+ password: password,
+ salt: salt,
+ secret: secret,
+ rawHashOutput: outBuffer,
+ costParams: in costParams
+ );
+
+ hash = Convert.ToBase64String(outBuffer);
salts = Convert.ToBase64String(salt);
//Encode salt in base64
@@ -253,37 +283,36 @@ namespace VNLib.Hashing
in Argon2CostParams costParams
)
{
- fixed (byte* pwd = password, slptr = salt, secretptr = secret, outPtr = rawHashOutput)
+ //Setup context
+ Argon2Context ctx = new()
{
- //Setup context
- Argon2Context ctx;
- //Pointer
- Argon2Context* context = &ctx;
- context->version = Argon2Version.Argon2DefaultVersion;
- context->t_cost = costParams.TimeCost;
- context->m_cost = costParams.MemoryCost;
- context->threads = costParams.Parallelism;
- context->lanes = costParams.Parallelism;
- //Default flags
- context->flags = ARGON2_DEFAULT_FLAGS;
- context->allocate_cbk = null;
- context->free_cbk = null;
- //Password
- context->pwd = pwd;
- context->pwdlen = (uint)password.Length;
- //Salt
- context->salt = slptr;
- context->saltlen = (uint)salt.Length;
- //Secret
- context->secret = secretptr;
- context->secretlen = (uint)secret.Length;
- //Output
- context->outptr = outPtr;
- context->outlen = (uint)rawHashOutput.Length;
- //Hash
- Argon2_ErrorCodes result = (Argon2_ErrorCodes)lib.Argon2Hash((IntPtr)context);
- //Throw exceptions if error
- ThrowOnArgonErr(result);
+ version = Argon2Version.Argon2DefaultVersion,
+ t_cost = costParams.TimeCost,
+ m_cost = costParams.MemoryCost,
+ threads = costParams.Parallelism,
+ lanes = costParams.Parallelism,
+ flags = ARGON2_DEFAULT_FLAGS,
+ allocate_cbk = null,
+ free_cbk = null,
+ };
+
+ fixed (byte* pSecret = secret, pPass = password, pSalt = salt, pRawHash = rawHashOutput)
+ {
+ ctx.pwd = pPass;
+ ctx.pwdlen = (uint)password.Length;
+
+ ctx.salt = pSalt;
+ ctx.saltlen = (uint)salt.Length;
+
+ ctx.secret = pSecret;
+ ctx.secretlen = (uint)secret.Length;
+
+ ctx.outptr = pRawHash;
+ ctx.outlen = (uint)rawHashOutput.Length; //Clamp to actual desired hash size
+
+ Argon2_ErrorCodes argResult = (Argon2_ErrorCodes)lib.Argon2Hash(new IntPtr(&ctx));
+ //Throw an excpetion if an error ocurred
+ ThrowOnArgonErr(argResult);
}
}
@@ -332,16 +361,20 @@ namespace VNLib.Hashing
int saltBase64BufSize = Base64.GetMaxDecodedFromUtf8Length(entry.Salt.Length);
int rawPassLen = LocEncoding.GetByteCount(rawPass);
- //Alloc buffer for decoded data
- using MemoryHandle<byte> rawBufferHandle = PwHeap.Alloc<byte>(passBase64BufSize + saltBase64BufSize + rawPassLen);
+ /*
+ * Alloc binary buffer for decoding. Align it to the nearest page again
+ * to help disguise the allocation purpose.
+ */
+ nint nearestPage = MemoryUtil.NearestPage(passBase64BufSize + saltBase64BufSize + rawPassLen);
+ using MemoryHandle<byte> rawBufferHandle = PwHeap.Alloc<byte>(nearestPage);
//Split buffers
- Span<byte> saltBuf = rawBufferHandle.Span[..saltBase64BufSize];
+ Span<byte> saltBuf = rawBufferHandle.AsSpan(0, saltBase64BufSize);
Span<byte> passBuf = rawBufferHandle.AsSpan(saltBase64BufSize, passBase64BufSize);
Span<byte> rawPassBuf = rawBufferHandle.AsSpan(saltBase64BufSize + passBase64BufSize, rawPassLen);
+ //Decode hash
{
- //Decode salt
if (!Convert.TryFromBase64Chars(entry.Hash, passBuf, out int actualHashLen))
{
throw new VnArgon2PasswordFormatException("Failed to recover hash bytes");
@@ -362,11 +395,21 @@ namespace VNLib.Hashing
//encode password bytes
rawPassLen = LocEncoding.GetBytes(rawPass, rawPassBuf);
- //Verify password
- bool result = Verify2id(lib, rawPassBuf[..rawPassLen], saltBuf, secret, passBuf, in costParams);
- //Zero buffer
- MemoryUtil.InitializeBlock(ref rawBufferHandle.GetReference(), rawBufferHandle.GetIntLength());
+ bool result = Verify2id(
+ lib: lib,
+ rawPass: rawPassBuf[..rawPassLen],
+ salt: saltBuf,
+ secret: secret,
+ hashBytes: passBuf,
+ costParams: in costParams
+ );
+
+ //Zero entire buffer
+ MemoryUtil.InitializeBlock(
+ ref rawBufferHandle.GetReference(),
+ rawBufferHandle.GetIntLength()
+ );
return result;
}
@@ -395,48 +438,35 @@ namespace VNLib.Hashing
in Argon2CostParams costParams
)
{
- //Alloc data for hash output
- using MemoryHandle<byte> outputHandle = PwHeap.Alloc<byte>(hashBytes.Length);
-
- //Get pointers
- fixed (byte* secretptr = secret, pwd = rawPass, slptr = salt)
- {
- //Setup context
- Argon2Context ctx;
- //Pointer
- Argon2Context* context = &ctx;
- context->version = Argon2Version.Argon2DefaultVersion;
- context->t_cost = costParams.TimeCost;
- context->m_cost = costParams.MemoryCost;
- context->threads = costParams.Parallelism;
- context->lanes = costParams.Parallelism;
- //Default flags
- context->flags = ARGON2_DEFAULT_FLAGS;
- //Use default memory allocator
- context->allocate_cbk = null;
- context->free_cbk = null;
- //Password
- context->pwd = pwd;
- context->pwdlen = (uint)rawPass.Length;
- //Salt
- context->salt = slptr;
- context->saltlen = (uint)salt.Length;
- //Secret
- context->secret = secretptr;
- context->secretlen = (uint)secret.Length;
- //Output
- context->outptr = outputHandle.Base;
- context->outlen = (uint)outputHandle.Length;
- //Hash
- Argon2_ErrorCodes argResult = (Argon2_ErrorCodes)lib.Argon2Hash((IntPtr)context);
- //Throw an excpetion if an error ocurred
- ThrowOnArgonErr(argResult);
- }
- //Return the comparison
- bool result = CryptographicOperations.FixedTimeEquals(outputHandle.Span, hashBytes);
-
- //Zero buffer
- MemoryUtil.InitializeBlock(ref outputHandle.GetReference(), outputHandle.GetIntLength());
+ /*
+ * Alloc a buffer of the nearest page to help disguise password related
+ * allocations. Global zero is always set on PwHeap.
+ */
+ using MemoryHandle<byte> outputHandle = PwHeap.Alloc<byte>(MemoryUtil.NearestPage(hashBytes.Length));
+
+ //Trim buffer to exact hash size as it will likely be larger due to page alignment
+ Span<byte> outBuffer = outputHandle.AsSpan(0, hashBytes.Length);
+
+ /*
+ * Verification works by computing the hash of the input and comparing it
+ * to the existing one. Hash functions are one-way by design, so now you know :)
+ */
+
+ Hash2id(
+ lib: lib,
+ password: rawPass,
+ salt: salt,
+ secret: secret,
+ rawHashOutput: outBuffer,
+ costParams: in costParams
+ );
+
+ bool result = CryptographicOperations.FixedTimeEquals(outBuffer, hashBytes);
+
+ MemoryUtil.InitializeBlock(
+ ref outputHandle.GetReference(),
+ outputHandle.GetIntLength()
+ );
return result;
}
diff --git a/lib/Hashing.Portable/src/VNLib.Hashing.Portable.csproj b/lib/Hashing.Portable/src/VNLib.Hashing.Portable.csproj
index 7e31e0c..da61ae1 100644
--- a/lib/Hashing.Portable/src/VNLib.Hashing.Portable.csproj
+++ b/lib/Hashing.Portable/src/VNLib.Hashing.Portable.csproj
@@ -1,18 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFramework>net8.0</TargetFramework>
+ <TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<AssemblyName>VNLib.Hashing.Portable</AssemblyName>
<RootNamespace>VNLib.Hashing</RootNamespace>
- <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
- <Nullable>enable</Nullable>
- <AnalysisLevel>latest-all</AnalysisLevel>
+ <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<ProduceReferenceAssembly>True</ProduceReferenceAssembly>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<Product>VNLib Hashing Function/Alg Library</Product>
<Description>Provides managed and random cryptocraphic hashing helper classes, including complete Argon2 password hashing.</Description>
<Authors>Vaughn Nugent</Authors>
diff --git a/lib/Hashing.Portable/tests/ManagedHashTests.cs b/lib/Hashing.Portable/tests/ManagedHashTests.cs
index 3bcdb33..8657290 100644
--- a/lib/Hashing.Portable/tests/ManagedHashTests.cs
+++ b/lib/Hashing.Portable/tests/ManagedHashTests.cs
@@ -8,6 +8,7 @@ using VNLib.Utils.Memory;
namespace VNLib.Hashing.Tests
{
+
[TestClass()]
public class ManagedHashTests
{
@@ -30,27 +31,27 @@ namespace VNLib.Hashing.Tests
//Compute hash
ERRNO hashSize = ManagedHash.ComputeHash(testData, heapBuffer.Span, alg);
- Assert.IsTrue(hashSize == Math.Abs(hashSize));
+ Assert.IsTrue(hashSize == ManagedHash.GetHashSize(alg));
//With input string and heap buffer
hashSize = ManagedHash.ComputeHash("test", heapBuffer.Span, alg);
- Assert.IsTrue(hashSize == Math.Abs(hashSize));
+ Assert.IsTrue(hashSize == ManagedHash.GetHashSize(alg));
//Compute string and byte array
byte[] testdata = ManagedHash.ComputeHash(testData, alg);
- Assert.IsTrue(testdata.Length == Math.Abs(hashSize));
+ Assert.IsTrue(testdata.Length == ManagedHash.GetHashSize(alg));
//With input string
testdata = ManagedHash.ComputeHash("test", alg);
- Assert.IsTrue(testdata.Length == Math.Abs(hashSize));
+ Assert.IsTrue(testdata.Length == ManagedHash.GetHashSize(alg));
- //Compute hash as string
+ //Compute hash as a hex string. Output should be 2x because hex is 2 chars per byte
string testEnc = ManagedHash.ComputeHash(testdata, alg, HashEncodingMode.Hexadecimal);
- Assert.IsTrue(testEnc.Length == Math.Abs(hashSize) * 2);
+ Assert.IsTrue(testEnc.Length == ManagedHash.GetHashSize(alg) * 2);
//With input string
testEnc = ManagedHash.ComputeHash("test", alg, HashEncodingMode.Hexadecimal);
- Assert.IsTrue(testEnc.Length == Math.Abs(hashSize) * 2);
+ Assert.IsTrue(testEnc.Length == ManagedHash.GetHashSize(alg) * 2);
}
}
@@ -74,27 +75,27 @@ namespace VNLib.Hashing.Tests
//Compute hash
ERRNO hashSize = ManagedHash.ComputeHmac(testKey, testData, heapBuffer.Span, alg);
- Assert.IsTrue(hashSize == Math.Abs(hashSize));
+ Assert.IsTrue(hashSize == ManagedHash.GetHashSize(alg));
//With input string and heap buffer
hashSize = ManagedHash.ComputeHmac(testKey, "test", heapBuffer.Span, alg);
- Assert.IsTrue(hashSize == Math.Abs(hashSize));
+ Assert.IsTrue(hashSize == ManagedHash.GetHashSize(alg));
//Compute string and byte array
byte[] testdata = ManagedHash.ComputeHmac(testKey, testData, alg);
- Assert.IsTrue(testdata.Length == Math.Abs(hashSize));
+ Assert.IsTrue(testdata.Length == ManagedHash.GetHashSize(alg));
//With input string
testdata = ManagedHash.ComputeHmac(testKey, "test", alg);
- Assert.IsTrue(testdata.Length == Math.Abs(hashSize));
+ Assert.IsTrue(testdata.Length == ManagedHash.GetHashSize(alg));
//Compute hash as string
string testEnc = ManagedHash.ComputeHmac(testKey, testdata, alg, HashEncodingMode.Hexadecimal);
- Assert.IsTrue(testEnc.Length == Math.Abs(hashSize) * 2);
+ Assert.IsTrue(testEnc.Length == ManagedHash.GetHashSize(alg) * 2);
//With input string
testEnc = ManagedHash.ComputeHmac(testKey, "test", alg, HashEncodingMode.Hexadecimal);
- Assert.IsTrue(testEnc.Length == Math.Abs(hashSize) * 2);
+ Assert.IsTrue(testEnc.Length == ManagedHash.GetHashSize(alg) * 2);
}
}
diff --git a/lib/Net.Compression/VNLib.Net.Compression/VNLib.Net.Compression.csproj b/lib/Net.Compression/VNLib.Net.Compression/VNLib.Net.Compression.csproj
index 14672ae..c5b428e 100644
--- a/lib/Net.Compression/VNLib.Net.Compression/VNLib.Net.Compression.csproj
+++ b/lib/Net.Compression/VNLib.Net.Compression/VNLib.Net.Compression.csproj
@@ -2,19 +2,21 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Net.Compression</RootNamespace>
<AssemblyName>VNLib.Net.Compression</AssemblyName>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <Nullable>enable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
- <AnalysisLevel>latest-all</AnalysisLevel>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
-
<!--Enable dynamic loading because it's dynamically loaded by servers-->
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<PackageId>VNLib.Net.Compression</PackageId>
<Authors>Vaughn Nugent</Authors>
<Company>Vaughn Nugent</Company>
diff --git a/lib/Net.Compression/vnlib_compress/CMakeLists.txt b/lib/Net.Compression/vnlib_compress/CMakeLists.txt
index c3eb723..0004c60 100644
--- a/lib/Net.Compression/vnlib_compress/CMakeLists.txt
+++ b/lib/Net.Compression/vnlib_compress/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.10)
project(vnlib_compress C)
-set(CMAKE_PROJECT_NAME "vnlib_compress")
+set(_COMP_PROJ_NAME "vnlib_compress")
#set options for enable botli and zlib
option(ENABLE_BROTLI "Enable brotli compression" ON)
@@ -39,7 +39,7 @@ if(ENABLE_BROTLI)
FetchContent_Declare(
lib_brotli
GIT_REPOSITORY https://github.com/google/brotli.git
- GIT_TAG 1b3a5ccb6e7b9384b741437532f4dae0730c61f2
+ GIT_TAG 04388304a6f8181cc1f022cc9e95dbb3bfe829a3
GIT_PROGRESS TRUE
)
@@ -95,38 +95,36 @@ if(ENABLE_RPMALLOC)
add_compile_definitions(VNLIB_CUSTOM_MALLOC_ENABLE)
endif()
-
-#Setup the compiler options
-set(CMAKE_C_STANDARD_REQUIRED ON)
-set(CMAKE_POSITION_INDEPENDENT_CODE ON) #enable position independent code (for shared libraries with exports)
-
###############################
#
# CONFIGURE LIBRARY BUILD
#
###############################
+set(CMAKE_C_STANDARD_REQUIRED ON)
+
if(COMPRESS_BUILD_SHARED)
- set(TARGET_NAME ${CMAKE_PROJECT_NAME})
- add_library(${TARGET_NAME} SHARED ${VNLIB_COMPRESS_SOURCES} ${COMP_HEADERS})
+ add_library(${_COMP_PROJ_NAME} SHARED ${VNLIB_COMPRESS_SOURCES} ${COMP_HEADERS})
+ #enable position independent code (for shared libraries with exports)
+ set_target_properties(${_COMP_PROJ_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
else()
- set(TARGET_NAME ${CMAKE_PROJECT_NAME}_static)
- add_library(${TARGET_NAME} STATIC ${VNLIB_COMPRESS_SOURCES} ${COMP_HEADERS})
+ set(_COMP_PROJ_NAME ${_COMP_PROJ_NAME}_static) #append static to the name
+ add_library(${_COMP_PROJ_NAME} STATIC ${VNLIB_COMPRESS_SOURCES} ${COMP_HEADERS})
endif()
-target_compile_features(${TARGET_NAME} PRIVATE c_std_90) #force compiler to use c90 standard for library
+target_compile_features(${_COMP_PROJ_NAME} PRIVATE c_std_90) #force compiler to use c90 standard for library
#if on unix lib will be appended, so we can adjust
if(UNIX)
- set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME vn_compress)
+ set_target_properties(${_COMP_PROJ_NAME} PROPERTIES OUTPUT_NAME vn_compress)
endif()
#since were buildiing in tree, set the export defintiions
-target_compile_definitions(${TARGET_NAME} PRIVATE VNLIB_EXPORTING)
+target_compile_definitions(${_COMP_PROJ_NAME} PRIVATE VNLIB_COMPRESS_EXPORTING)
if(ENABLE_BROTLI)
#link the encoder-only library to the main project
- target_link_libraries(${TARGET_NAME} PRIVATE brotlienc)
+ target_link_libraries(${_COMP_PROJ_NAME} PRIVATE brotlienc)
endif()
if(ENABLE_ZLIB)
@@ -135,22 +133,22 @@ if(ENABLE_ZLIB)
target_compile_definitions(zlib PRIVATE HAS_SSE42 PRIVATE HAS_SSE2)
endif()
- target_link_libraries(${TARGET_NAME} PRIVATE zlib)
+ target_link_libraries(${_COMP_PROJ_NAME} PRIVATE zlib)
endif()
#link rpmalloc to the main project
if(ENABLE_RPMALLOC)
- target_link_libraries(${TARGET_NAME} PRIVATE vnlib_rpmalloc_static)
- add_dependencies(${TARGET_NAME} vnlib_rpmalloc_static)
+ target_link_libraries(${_COMP_PROJ_NAME} PRIVATE vnlib_rpmalloc_static)
+ add_dependencies(${_COMP_PROJ_NAME} vnlib_rpmalloc_static)
#Include the nativeheap api header
- target_include_directories(${TARGET_NAME} PRIVATE ../../Utils.Memory/vnlib_rpmalloc/)
+ target_include_directories(${_COMP_PROJ_NAME} PRIVATE ../../Utils.Memory/vnlib_rpmalloc/)
endif()
#setup flags for windows compilation
if(MSVC)
target_compile_options(
- ${TARGET_NAME}
+ ${_COMP_PROJ_NAME}
PRIVATE
/Qspectre
@@ -173,7 +171,7 @@ if(MSVC)
#set build macros
target_compile_definitions(
- ${TARGET_NAME}
+ ${_COMP_PROJ_NAME}
PRIVATE
$<$<CONFIG:DEBUG>:DEBUG>
@@ -184,7 +182,7 @@ if(MSVC)
elseif(CMAKE_COMPILER_IS_GNUCC)
target_compile_options(
- ${TARGET_NAME}
+ ${_COMP_PROJ_NAME}
PRIVATE
-Wextra
@@ -194,7 +192,7 @@ elseif(CMAKE_COMPILER_IS_GNUCC)
#enable debug compiler options
if(build_type STREQUAL "debug")
target_compile_options(
- ${TARGET_NAME}
+ ${_COMP_PROJ_NAME}
PRIVATE
-g #enable debugger info
@@ -204,7 +202,7 @@ elseif(CMAKE_COMPILER_IS_GNUCC)
-pedantic #enable pedantic mode
)
- target_compile_definitions(${TARGET_NAME} PRIVATE DEBUG)
+ target_compile_definitions(${_COMP_PROJ_NAME} PRIVATE DEBUG)
endif()
@@ -214,11 +212,13 @@ endif()
if(NATIVE_HEAP_LIB_PATH)
+ message(STATUS "Linking native heap library to the main project found at ${NATIVE_HEAP_LIB_PATH}")
+
#Include the nativeheap api header
include_directories(${NATIVE_HEAP_INCLUDES})
#If manual heap linking is enabled, we need to link the native heap library
- target_link_libraries(${TARGET_NAME} PRIVATE ${NATIVE_HEAP_LIB_PATH})
- target_compile_definitions(${TARGET_NAME} PRIVATE VNLIB_CUSTOM_MALLOC_ENABLE) #configure src
+ target_link_libraries(${_COMP_PROJ_NAME} PRIVATE ${NATIVE_HEAP_LIB_PATH})
+ target_compile_definitions(${_COMP_PROJ_NAME} PRIVATE VNLIB_CUSTOM_MALLOC_ENABLE) #configure src
endif() \ No newline at end of file
diff --git a/lib/Net.Compression/vnlib_compress/Taskfile.yaml b/lib/Net.Compression/vnlib_compress/Taskfile.yaml
index 4ddc464..f1d594e 100644
--- a/lib/Net.Compression/vnlib_compress/Taskfile.yaml
+++ b/lib/Net.Compression/vnlib_compress/Taskfile.yaml
@@ -17,7 +17,7 @@ tasks:
cmds:
- cmd: echo "Building {{.PROJECT_NAME}}"
silent: true
- - cmake -Bbuild/ -DCMAKE_BUILD_TYPE=Release {{.CMAKE_ARGS}}
+ - cmake -Bbuild/ -DCMAKE_BUILD_TYPE=Release {{.CLI_ARGS}}
- cmake --build build/ --config Release
#called by ci pipline to build the winx64 project
diff --git a/lib/Net.Http/src/Core/ConnectionInfo.cs b/lib/Net.Http/src/Core/ConnectionInfo.cs
index bcc5fe7..4a46971 100644
--- a/lib/Net.Http/src/Core/ConnectionInfo.cs
+++ b/lib/Net.Http/src/Core/ConnectionInfo.cs
@@ -88,33 +88,17 @@ namespace VNLib.Net.Http
public IReadOnlyCollection<string> Accept => Context.Request.Accept;
///<inheritdoc/>
- public ref readonly TransportSecurityInfo? GetTransportSecurityInfo() => ref Context.GetSecurityInfo();
+ public ref readonly TransportSecurityInfo? GetTransportSecurityInfo() => ref Context.GetSecurityInfo();
///<inheritdoc/>
- public void SetCookie(string name, string value, string? domain, string? path, TimeSpan Expires, CookieSameSite sameSite, bool httpOnly, bool secure)
+ public void SetCookie(in HttpResponseCookie cookie)
{
//name MUST not be null
- ArgumentNullException.ThrowIfNull(name);
-
- //Create the new cookie
- HttpCookie cookie = new(name)
- {
- Value = value,
- Domain = domain,
- Path = path,
- MaxAge = Expires,
- //Set the session lifetime flag if the timeout is max value
- IsSession = Expires == TimeSpan.MaxValue,
- //If the connection is cross origin, then we need to modify the secure and samsite values
- SameSite = CrossOrigin ? CookieSameSite.None : sameSite,
- Secure = secure | CrossOrigin,
- HttpOnly = httpOnly
- };
-
- //Set the cookie
+ ArgumentException.ThrowIfNullOrWhiteSpace(cookie.Name, nameof(cookie.Name));
+
Context.Response.AddCookie(in cookie);
}
-
+
internal ConnectionInfo(HttpContext ctx)
{
//Update the context referrence
diff --git a/lib/Net.Http/src/Core/HttpCookie.cs b/lib/Net.Http/src/Core/HttpCookie.cs
deleted file mode 100644
index b805e3e..0000000
--- a/lib/Net.Http/src/Core/HttpCookie.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-* Copyright (c) 2024 Vaughn Nugent
-*
-* Library: VNLib
-* Package: VNLib.Net.Http
-* File: HttpCookie.cs
-*
-* HttpCookie.cs is part of VNLib.Net.Http which is part of the larger
-* VNLib collection of libraries and utilities.
-*
-* VNLib.Net.Http is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* VNLib.Net.Http is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see https://www.gnu.org/licenses/.
-*/
-
-using System;
-
-using VNLib.Utils;
-using VNLib.Utils.Memory;
-using VNLib.Utils.Extensions;
-
-namespace VNLib.Net.Http.Core
-{
- internal readonly struct HttpCookie(string name) : IStringSerializeable, IEquatable<HttpCookie>
- {
- public readonly string Name { get; } = name;
- public readonly string? Value { get; init; }
- public readonly string? Domain { get; init; }
- public readonly string? Path { get; init; }
- public readonly TimeSpan MaxAge { get; init; }
- public readonly CookieSameSite SameSite { get; init; }
- public readonly bool Secure { get; init; }
- public readonly bool HttpOnly { get; init; }
- public readonly bool IsSession { get; init; }
-
- public readonly string Compile() => throw new NotImplementedException();
-
- public readonly void Compile(ref ForwardOnlyWriter<char> writer)
- {
- //set the name of the cookie
- writer.Append(Name);
- writer.Append('=');
-
- //set name
- writer.Append(Value);
-
- //Only set the max age parameter if the cookie is not a session cookie
- if (!IsSession)
- {
- writer.Append("; Max-Age=");
- writer.Append((int)MaxAge.TotalSeconds);
- }
-
- //Make sure domain is set
- if (!string.IsNullOrWhiteSpace(Domain))
- {
- writer.Append("; Domain=");
- writer.Append(Domain);
- }
-
- //Check and set path
- if (!string.IsNullOrWhiteSpace(Path))
- {
- //Set path
- writer.Append("; Path=");
- writer.Append(Path);
- }
-
- writer.Append("; SameSite=");
-
- //Set the samesite flag based on the enum value
- switch (SameSite)
- {
- case CookieSameSite.None:
- writer.Append("None");
- break;
- case CookieSameSite.Strict:
- writer.Append("Strict");
- break;
- case CookieSameSite.Lax:
- default:
- writer.Append("Lax");
- break;
- }
-
- //Set httponly flag
- if (HttpOnly)
- {
- writer.Append("; HttpOnly");
- }
-
- //Set secure flag
- if (Secure)
- {
- writer.Append("; Secure");
- }
- }
-
- public readonly ERRNO Compile(Span<char> buffer)
- {
- ForwardOnlyWriter<char> writer = new(buffer);
- Compile(ref writer);
- return writer.Written;
- }
-
- public readonly override int GetHashCode() => string.GetHashCode(Name, StringComparison.OrdinalIgnoreCase);
-
- public readonly override bool Equals(object? obj) => obj is HttpCookie other && Equals(other);
-
- public readonly bool Equals(HttpCookie other) => Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase);
- }
-} \ No newline at end of file
diff --git a/lib/Net.Http/src/Core/HttpServerProcessing.cs b/lib/Net.Http/src/Core/HttpServerProcessing.cs
index 7770ad7..b6dbfef 100644
--- a/lib/Net.Http/src/Core/HttpServerProcessing.cs
+++ b/lib/Net.Http/src/Core/HttpServerProcessing.cs
@@ -34,9 +34,11 @@ using System.Runtime.CompilerServices;
using VNLib.Utils.Memory;
using VNLib.Utils.Logging;
+using VNLib.Utils.Extensions;
using VNLib.Net.Http.Core;
using VNLib.Net.Http.Core.Buffering;
using VNLib.Net.Http.Core.Response;
+using VNLib.Net.Http.Core.PerfCounter;
namespace VNLib.Net.Http
{
@@ -167,14 +169,20 @@ namespace VNLib.Net.Http
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
private async Task<bool> ProcessHttpEventAsync(HttpContext context)
{
+ HttpPerfCounterState counter = default;
+
//Prepare http context to process a new message
context.BeginRequest();
try
{
+ HttpPerfCounter.StartCounter(ref counter);
+
//Try to parse the http request (may throw exceptions, let them propagate to the transport layer)
int status = (int)ParseRequest(context);
+ HttpPerfCounter.StopAndLog(ref counter, in _config, "HTTP Parse");
+
//Check status code for socket error, if so, return false to close the connection
if (status >= 1000)
{
@@ -204,7 +212,7 @@ namespace VNLib.Net.Http
context.Request.Compile(ref writer);
//newline
- writer.Append("\r\n");
+ writer.AppendSmall("\r\n");
//Response
context.Response.Compile(ref writer);
@@ -218,11 +226,15 @@ namespace VNLib.Net.Http
WriteConnectionDebugLog(this, context);
}
#endif
+
+ HttpPerfCounter.StartCounter(ref counter);
await context.WriteResponseAsync();
-
+
await context.FlushTransportAsync();
-
+
+ HttpPerfCounter.StopAndLog(ref counter, in _config, "HTTP Response");
+
/*
* If an alternate protocol was specified, we need to break the keepalive loop
* the handler will manage the alternate protocol
diff --git a/lib/Net.Http/src/Core/IHttpContextInformation.cs b/lib/Net.Http/src/Core/IHttpContextInformation.cs
index 14067f5..38e86b3 100644
--- a/lib/Net.Http/src/Core/IHttpContextInformation.cs
+++ b/lib/Net.Http/src/Core/IHttpContextInformation.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Net.Http
@@ -22,7 +22,6 @@
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
-using System;
using System.IO;
using System.Text;
diff --git a/lib/Net.Http/src/Core/PerfCounter/HttpPerfCounter.cs b/lib/Net.Http/src/Core/PerfCounter/HttpPerfCounter.cs
new file mode 100644
index 0000000..0dcefb1
--- /dev/null
+++ b/lib/Net.Http/src/Core/PerfCounter/HttpPerfCounter.cs
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2024 Vaughn Nugent
+*
+* Library: VNLib
+* Package: VNLib.Net.Http
+* File: HttpPerfCounter.cs
+*
+* HttpPerfCounter.cs is part of VNLib.Net.Http which is part of the larger
+* VNLib collection of libraries and utilities.
+*
+* VNLib.Net.Http is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as
+* published by the Free Software Foundation, either version 3 of the
+* License, or (at your option) any later version.
+*
+* VNLib.Net.Http is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see https://www.gnu.org/licenses/.
+*/
+
+using System;
+using System.Diagnostics;
+
+using VNLib.Utils.Logging;
+
+
+namespace VNLib.Net.Http.Core.PerfCounter
+{
+ internal static class HttpPerfCounter
+ {
+
+ [Conditional("DEBUG")]
+ internal static void StartCounter(ref HttpPerfCounterState state)
+ {
+ state.StopValue = state.StartValue = TimeProvider.System.GetTimestamp();
+ }
+
+ [Conditional("DEBUG")]
+ internal static void StopCounter(ref HttpPerfCounterState state)
+ {
+ state.StopValue = TimeProvider.System.GetTimestamp();
+ }
+
+ /// <summary>
+ /// Gets the total time elapsed in microseconds
+ /// </summary>
+ /// <returns>The time in microseconds that has elapsed since the timer was started and stopped</returns>
+ internal static TimeSpan GetElapsedTime(ref readonly HttpPerfCounterState state)
+ => TimeProvider.System.GetElapsedTime(state.StartValue, state.StopValue);
+
+ /*
+ * Enable http performance counters for tracing.
+ * Only available in debug builds until it can be
+ * configured for zero-cost
+ */
+
+ [Conditional("DEBUG")]
+ internal static void StopAndLog(ref HttpPerfCounterState state, ref readonly HttpConfig config, string counter)
+ {
+ if (!config.DebugPerformanceCounters)
+ {
+ return;
+ }
+
+ StopCounter(ref state);
+
+ TimeSpan duration = GetElapsedTime(in state);
+
+ config.ServerLog.Debug("[PERF]: ({state}) - {us}us elapsed", counter, duration.TotalMicroseconds);
+ }
+ }
+} \ No newline at end of file
diff --git a/lib/Net.Http/src/Core/PerfCounter/HttpPerfCounterState.cs b/lib/Net.Http/src/Core/PerfCounter/HttpPerfCounterState.cs
new file mode 100644
index 0000000..a86ac40
--- /dev/null
+++ b/lib/Net.Http/src/Core/PerfCounter/HttpPerfCounterState.cs
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2024 Vaughn Nugent
+*
+* Library: VNLib
+* Package: VNLib.Net.Http
+* File: ConnectionInfo.cs
+*
+* ConnectionInfo.cs is part of VNLib.Net.Http which is part of the larger
+* VNLib collection of libraries and utilities.
+*
+* VNLib.Net.Http is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as
+* published by the Free Software Foundation, either version 3 of the
+* License, or (at your option) any later version.
+*
+* VNLib.Net.Http is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see https://www.gnu.org/licenses/.
+*/
+
+namespace VNLib.Net.Http.Core.PerfCounter
+{
+ internal struct HttpPerfCounterState
+ {
+ internal long StartValue;
+ internal long StopValue;
+ }
+} \ No newline at end of file
diff --git a/lib/Net.Http/src/Core/Request/HttpRequest.cs b/lib/Net.Http/src/Core/Request/HttpRequest.cs
index 3ebf0d4..2c9eed0 100644
--- a/lib/Net.Http/src/Core/Request/HttpRequest.cs
+++ b/lib/Net.Http/src/Core/Request/HttpRequest.cs
@@ -161,11 +161,12 @@ namespace VNLib.Net.Http.Core
{
return Array.Empty<FileUpload>();
}
+
//Create new array to hold uploads
- FileUpload[] uploads = new FileUpload[_state.UploadCount];
- //Copy uploads to new array
+ FileUpload[] uploads = GC.AllocateUninitializedArray<FileUpload>(_state.UploadCount, false);
+
Array.Copy(_uploads, uploads, _state.UploadCount);
- //Return new array
+
return uploads;
}
diff --git a/lib/Net.Http/src/Core/Response/HttpContextResponseWriting.cs b/lib/Net.Http/src/Core/Response/HttpContextResponseWriting.cs
index dcd0553..93ce5b2 100644
--- a/lib/Net.Http/src/Core/Response/HttpContextResponseWriting.cs
+++ b/lib/Net.Http/src/Core/Response/HttpContextResponseWriting.cs
@@ -93,7 +93,7 @@ namespace VNLib.Net.Http.Core
//Determine if compression should be used
bool compressionDisabled =
//disabled because app code disabled it
- ContextFlags.IsSet(HttpControlMask.CompressionDisabed)
+ ContextFlags.IsSet(HttpControlMask.CompressionDisabled)
//Disabled because too large or too small
|| length >= ParentServer.Config.CompressionLimit
|| length < ParentServer.Config.CompressionMinimum
diff --git a/lib/Net.Http/src/Core/Response/HttpResponse.cs b/lib/Net.Http/src/Core/Response/HttpResponse.cs
index 1340dac..e354998 100644
--- a/lib/Net.Http/src/Core/Response/HttpResponse.cs
+++ b/lib/Net.Http/src/Core/Response/HttpResponse.cs
@@ -46,7 +46,7 @@ namespace VNLib.Net.Http.Core.Response
{
const int DefaultCookieCapacity = 2;
- private readonly Dictionary<string, HttpCookie> Cookies = new(DefaultCookieCapacity, StringComparer.OrdinalIgnoreCase);
+ private readonly Dictionary<string, HttpResponseCookie> Cookies = new(DefaultCookieCapacity, StringComparer.OrdinalIgnoreCase);
private readonly DirectStream ReusableDirectStream = new();
private readonly ChunkedStream ReusableChunkedStream = new(manager.ChunkAccumulatorBuffer, ContextInfo);
private readonly HeaderDataAccumulator Writer = new(manager.ResponseHeaderBuffer, ContextInfo);
@@ -61,7 +61,7 @@ namespace VNLib.Net.Http.Core.Response
/// <summary>
/// Response header collection
/// </summary>
- public VnWebHeaderCollection Headers { get; } = [];
+ public readonly VnWebHeaderCollection Headers = [];
/// <summary>
/// The current http status code value
@@ -88,7 +88,7 @@ namespace VNLib.Net.Http.Core.Response
/// </summary>
/// <param name="cookie">Cookie to add</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal void AddCookie(in HttpCookie cookie) => Cookies[cookie.Name] = cookie;
+ internal void AddCookie(ref readonly HttpResponseCookie cookie) => Cookies[cookie.Name] = cookie;
/// <summary>
/// Compiles and flushes all headers to the header accumulator ready for sending
@@ -106,13 +106,13 @@ namespace VNLib.Net.Http.Core.Response
if (!HeadersBegun)
{
//write status code first
- writer.Append(HttpHelpers.GetResponseString(ContextInfo.CurrentVersion, _code));
- writer.Append(HttpHelpers.CRLF);
+ writer.AppendSmall(HttpHelpers.GetResponseString(ContextInfo.CurrentVersion, _code));
+ writer.AppendSmall(HttpHelpers.CRLF);
//Write the date to header buffer
- writer.Append("Date: ");
+ writer.AppendSmall("Date: ");
writer.Append(DateTimeOffset.UtcNow, "R");
- writer.Append(HttpHelpers.CRLF);
+ writer.AppendSmall(HttpHelpers.CRLF);
//Set begun flag
HeadersBegun = true;
@@ -122,10 +122,10 @@ namespace VNLib.Net.Http.Core.Response
for (int i = 0; i < Headers.Count; i++)
{
//<name>: <value>\r\n
- writer.Append(Headers.Keys[i]);
- writer.Append(": ");
- writer.Append(Headers[i]);
- writer.Append(HttpHelpers.CRLF);
+ writer.Append(Headers.Keys[i]);
+ writer.AppendSmall(": ");
+ writer.Append(Headers[i]);
+ writer.AppendSmall(HttpHelpers.CRLF);
}
//Remove writen headers
@@ -134,14 +134,14 @@ namespace VNLib.Net.Http.Core.Response
//Write cookies if any are set
if (Cookies.Count > 0)
{
- foreach (HttpCookie cookie in Cookies.Values)
+ foreach (HttpResponseCookie cookie in Cookies.Values)
{
- writer.Append("Set-Cookie: ");
+ writer.AppendSmall("Set-Cookie: ");
//Write the cookie to the header buffer
cookie.Compile(ref writer);
- writer.Append(HttpHelpers.CRLF);
+ writer.AppendSmall(HttpHelpers.CRLF);
}
Cookies.Clear();
@@ -431,7 +431,7 @@ namespace VNLib.Net.Http.Core.Response
}
//Enumerate and write
- foreach (HttpCookie cookie in Cookies.Values)
+ foreach (HttpResponseCookie cookie in Cookies.Values)
{
writer.Append("Set-Cookie: ");
diff --git a/lib/Net.Http/src/Core/Response/ResponsBodyDataState.cs b/lib/Net.Http/src/Core/Response/ResponsBodyDataState.cs
index 797d490..bd43def 100644
--- a/lib/Net.Http/src/Core/Response/ResponsBodyDataState.cs
+++ b/lib/Net.Http/src/Core/Response/ResponsBodyDataState.cs
@@ -3,10 +3,10 @@
*
* Library: VNLib
* Package: VNLib.Net.Http
-* File: ResponseWriter.cs
+* File: ResponsBodyDataState.cs
*
-* ResponseWriter.cs is part of VNLib.Net.Http which is part of the larger
-* VNLib collection of libraries and utilities.
+* ResponsBodyDataState.cs is part of VNLib.Net.Http which is part of
+* the larger VNLib collection of libraries and utilities.
*
* VNLib.Net.Http is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
diff --git a/lib/Net.Http/src/Core/Response/ResponseWriter.cs b/lib/Net.Http/src/Core/Response/ResponseWriter.cs
index b60537d..fabdff3 100644
--- a/lib/Net.Http/src/Core/Response/ResponseWriter.cs
+++ b/lib/Net.Http/src/Core/Response/ResponseWriter.cs
@@ -182,30 +182,33 @@ namespace VNLib.Net.Http.Core.Response
{
if (blockSize > 0)
{
+ /*
+ * Write data directly from memory response but fix the block size to the size
+ * of the compressor if it has one, to optimize compression
+ */
while (_userState.MemResponse.Remaining > 0)
{
- //Get next segment clamped to the block size
_readSegment = _userState.MemResponse.GetRemainingConstrained(blockSize);
-
- //Commit output bytes
+
await dest.WriteAsync(_readSegment);
-
- //Advance by the written amount
+
_userState.MemResponse.Advance(_readSegment.Length);
}
}
else
- {
- //Write response body from memory
+ {
+ /*
+ * Compressor block size is unkown so we can assume it does not matter
+ * and write full blocks as they are read. This will usually be a on-shot
+ * operation, since the writer handles chunk buffering
+ */
+
while (_userState.MemResponse.Remaining > 0)
{
- //Get remaining segment
_readSegment = _userState.MemResponse.GetMemory();
-
- //Write segment to output stream
+
await dest.WriteAsync(_readSegment);
-
- //Advance by the written amount
+
_userState.MemResponse.Advance(_readSegment.Length);
}
}
diff --git a/lib/Net.Http/src/Helpers/HttpControlMask.cs b/lib/Net.Http/src/Helpers/HttpControlMask.cs
index a2a004d..e24d088 100644
--- a/lib/Net.Http/src/Helpers/HttpControlMask.cs
+++ b/lib/Net.Http/src/Helpers/HttpControlMask.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Net.Http
@@ -33,7 +33,7 @@ namespace VNLib.Net.Http
/// <summary>
/// Tells the http server that dynamic response compression should be disabled
/// </summary>
- public const ulong CompressionDisabed = 0x01UL;
+ public const ulong CompressionDisabled = 0x01UL;
/// <summary>
/// Tells the server not to set a 0 content length header when sending a response that does
diff --git a/lib/Net.Http/src/Helpers/HttpHelpers.cs b/lib/Net.Http/src/Helpers/HttpHelpers.cs
index 86616f8..cf8e189 100644
--- a/lib/Net.Http/src/Helpers/HttpHelpers.cs
+++ b/lib/Net.Http/src/Helpers/HttpHelpers.cs
@@ -227,29 +227,29 @@ namespace VNLib.Net.Http
ForwardOnlyWriter<char> sb = new(buffer);
if ((type & CacheType.NoCache) > 0)
{
- sb.Append("no-cache, ");
+ sb.AppendSmall("no-cache, ");
}
if ((type & CacheType.NoStore) > 0)
{
- sb.Append("no-store, ");
+ sb.AppendSmall("no-store, ");
}
if ((type & CacheType.Public) > 0)
{
- sb.Append("public, ");
+ sb.AppendSmall("public, ");
}
if ((type & CacheType.Private) > 0)
{
- sb.Append("private, ");
+ sb.AppendSmall("private, ");
}
if ((type & CacheType.Revalidate) > 0)
{
- sb.Append("must-revalidate, ");
+ sb.AppendSmall("must-revalidate, ");
}
if (immutable)
{
- sb.Append("immutable, ");
+ sb.AppendSmall("immutable, ");
}
- sb.Append("max-age=");
+ sb.AppendSmall("max-age=");
sb.Append(maxAge);
return sb.ToString();
}
diff --git a/lib/Net.Http/src/HttpConfig.cs b/lib/Net.Http/src/HttpConfig.cs
index 274e163..c74bdbb 100644
--- a/lib/Net.Http/src/HttpConfig.cs
+++ b/lib/Net.Http/src/HttpConfig.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Net.Http
@@ -124,5 +124,10 @@ namespace VNLib.Net.Http
/// the server.
/// </summary>
public readonly IHttpCompressorManager? CompressorManager { get; init; } = null;
+
+ /// <summary>
+ /// Enables debug performance counters
+ /// </summary>
+ public readonly bool DebugPerformanceCounters { get; init; } = false;
}
} \ No newline at end of file
diff --git a/lib/Net.Http/src/HttpResponseCookie.cs b/lib/Net.Http/src/HttpResponseCookie.cs
new file mode 100644
index 0000000..8fc54c2
--- /dev/null
+++ b/lib/Net.Http/src/HttpResponseCookie.cs
@@ -0,0 +1,226 @@
+/*
+* Copyright (c) 2024 Vaughn Nugent
+*
+* Library: VNLib
+* Package: VNLib.Net.Http
+* File: HttpResponseCookie.cs
+*
+* HttpResponseCookie.cs is part of VNLib.Net.Http which is part of the larger
+* VNLib collection of libraries and utilities.
+*
+* VNLib.Net.Http is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as
+* published by the Free Software Foundation, either version 3 of the
+* License, or (at your option) any later version.
+*
+* VNLib.Net.Http is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see https://www.gnu.org/licenses/.
+*/
+
+using System;
+
+using VNLib.Utils;
+using VNLib.Utils.Memory;
+using VNLib.Utils.Extensions;
+
+namespace VNLib.Net.Http
+{
+ /// <summary>
+ /// Represents an HTTP cookie that is set with responses.
+ /// </summary>
+ /// <param name="name">The cookie name</param>
+ public readonly struct HttpResponseCookie(string name) : IStringSerializeable, IEquatable<HttpResponseCookie>
+ {
+ /// <summary>
+ /// The default copy buffer allocated when calling the <see cref="Compile()"/>
+ /// family of methods.
+ /// </summary>
+ public const int DefaultCookieBufferSize = 4096;
+
+
+ /// <summary>
+ /// The name of the cookie to set.
+ /// </summary>
+ public readonly string Name { get; } = name;
+
+ /// <summary>
+ /// The actual cookie content or value.
+ /// </summary>
+ public readonly string? Value { get; init; }
+
+ /// <summary>
+ /// The domain this cookie will be sent to.
+ /// </summary>
+ public readonly string? Domain { get; init; }
+
+ /// <summary>
+ /// The cookie path the client will send this cookie with. Null
+ /// or empty string for all paths.
+ /// </summary>
+ public readonly string? Path { get; init; }
+
+ /// <summary>
+ /// Sets the duration of the cookie lifetime (in seconds), aka MaxAge
+ /// </summary>
+ public readonly TimeSpan MaxAge { get; init; }
+
+ /// <summary>
+ /// Sets the cookie Samesite field.
+ /// </summary>
+ public readonly CookieSameSite SameSite { get; init; }
+
+ /// <summary>
+ /// Sets the cookie Secure flag. If true only sends the cookie with requests
+ /// if the connection is secure.
+ /// </summary>
+ public readonly bool Secure { get; init; }
+
+ /// <summary>
+ /// Sets cookie HttpOnly flag. If true denies JavaScript access to
+ /// </summary>
+ public readonly bool HttpOnly { get; init; }
+
+ /// <summary>
+ /// Sets the cookie expiration to the duration of the user's session (aka no expiration)
+ /// </summary>
+ public readonly bool IsSession { get; init; }
+
+ /// <summary>
+ /// Creates an HTTP 1.x spec cookie header value from the
+ /// cookie fields
+ /// <para>
+ /// The internal copy buffer defaults to <see cref="DefaultCookieBufferSize"/>
+ /// use <see cref="Compile(int)"/> if you need control over the buffer size
+ /// </para>
+ /// </summary>
+ /// <returns>The cookie header value as a string</returns>
+ /// <exception cref="ArgumentOutOfRangeException"></exception>
+ public readonly string Compile()
+ {
+ nint bufSize = MemoryUtil.NearestPage(DefaultCookieBufferSize);
+
+ return Compile(bufSize.ToInt32());
+ }
+
+ /// <summary>
+ /// Creates an HTTP 1.x spec cookie header value from the
+ /// cookie fields.
+ /// </summary>
+ /// <param name="bufferSize">The size of the internal accumulator buffer</param>
+ /// <returns>The cookie header value as a string</returns>
+ /// <exception cref="ArgumentOutOfRangeException"></exception>
+ public readonly string Compile(int bufferSize)
+ {
+ using UnsafeMemoryHandle<char> cookieBuffer = MemoryUtil.UnsafeAlloc<char>(bufferSize, false);
+
+ ERRNO count = Compile(cookieBuffer.Span);
+
+ return cookieBuffer.AsSpan(0, (int)count).ToString();
+ }
+
+ /// <summary>
+ /// Creates an HTTP 1.x spec cookie header value from the
+ /// cookie fields.
+ /// </summary>
+ /// <param name="buffer">The character buffer to write the cookie data tor</param>
+ /// <returns>The cookie header value as a string</returns>
+ /// <exception cref="ArgumentOutOfRangeException"></exception>
+ public readonly ERRNO Compile(Span<char> buffer)
+ {
+ ForwardOnlyWriter<char> writer = new(buffer);
+ Compile(ref writer);
+ return writer.Written;
+ }
+
+ /// <summary>
+ /// Writes the HTTP 1.x header format for the cookie
+ /// </summary>
+ /// <param name="writer"></param>
+ public readonly void Compile(ref ForwardOnlyWriter<char> writer)
+ {
+ writer.Append(Name);
+ writer.Append('=');
+ writer.Append(Value);
+
+ /*
+ * If a session cookie is set, then do not include a max-age value
+ * browsers will default to session duration if not set
+ */
+ if (!IsSession)
+ {
+ writer.AppendSmall("; Max-Age=");
+ writer.Append((int)MaxAge.TotalSeconds);
+ }
+
+ if (!string.IsNullOrWhiteSpace(Domain))
+ {
+ writer.AppendSmall("; Domain=");
+ writer.Append(Domain);
+ }
+
+ if (!string.IsNullOrWhiteSpace(Path))
+ {
+ //Set path
+ writer.AppendSmall("; Path=");
+ writer.Append(Path);
+ }
+
+ writer.AppendSmall("; SameSite=");
+
+ switch (SameSite)
+ {
+ case CookieSameSite.None:
+ writer.AppendSmall("None");
+ break;
+ case CookieSameSite.Strict:
+ writer.AppendSmall("Strict");
+ break;
+ case CookieSameSite.Lax:
+ default:
+ writer.AppendSmall("Lax");
+ break;
+ }
+
+ if (HttpOnly)
+ {
+ writer.AppendSmall("; HttpOnly");
+ }
+
+ if (Secure)
+ {
+ writer.AppendSmall("; Secure");
+ }
+ }
+
+ ///<inheritdoc/>
+ public readonly override int GetHashCode() => string.GetHashCode(Name, StringComparison.OrdinalIgnoreCase);
+
+ ///<inheritdoc/>
+ public readonly override bool Equals(object? obj) => obj is HttpResponseCookie other && Equals(other);
+
+ ///<inheritdoc/>
+ public readonly bool Equals(HttpResponseCookie other) => string.Equals(Name, other.Name, StringComparison.OrdinalIgnoreCase);
+
+ /// <summary>
+ /// Creates an HTTP 1.x spec cookie header value from the
+ /// cookie fields
+ /// <para>
+ /// The internal copy buffer defaults to <see cref="DefaultCookieBufferSize"/>
+ /// use <see cref="Compile(int)"/> if you need control over the buffer size
+ /// </para>
+ /// </summary>
+ /// <returns>The cookie header value as a string</returns>
+ public override string ToString() => Compile();
+
+ ///<inheritdoc/>
+ public static bool operator ==(HttpResponseCookie left, HttpResponseCookie right) => left.Equals(right);
+
+ ///<inheritdoc/>
+ public static bool operator !=(HttpResponseCookie left, HttpResponseCookie right) => !(left == right);
+ }
+} \ No newline at end of file
diff --git a/lib/Net.Http/src/IConnectionInfo.cs b/lib/Net.Http/src/IConnectionInfo.cs
index 6cdb480..7598864 100644
--- a/lib/Net.Http/src/IConnectionInfo.cs
+++ b/lib/Net.Http/src/IConnectionInfo.cs
@@ -133,14 +133,7 @@ namespace VNLib.Net.Http
/// Adds a new cookie to the response. If a cookie with the same name and value
/// has been set, the old cookie is replaced with the new one.
/// </summary>
- /// <param name="name">Cookie name/id</param>
- /// <param name="value">Value to be stored in cookie</param>
- /// <param name="domain">Domain for cookie to operate</param>
- /// <param name="path">Path to store cookie</param>
- /// <param name="Expires">Timespan representing how long the cookie should exist</param>
- /// <param name="sameSite">Samesite attribute, Default = Lax</param>
- /// <param name="httpOnly">Specify the HttpOnly flag</param>
- /// <param name="secure">Specify the Secure flag</param>
- void SetCookie(string name, string value, string? domain, string? path, TimeSpan Expires, CookieSameSite sameSite, bool httpOnly, bool secure);
+ /// <param name="cookie">A reference to the cookie to set on the current response</param>
+ void SetCookie(in HttpResponseCookie cookie);
}
} \ No newline at end of file
diff --git a/lib/Net.Http/src/VNLib.Net.Http.csproj b/lib/Net.Http/src/VNLib.Net.Http.csproj
index b491cc1..e57f784 100644
--- a/lib/Net.Http/src/VNLib.Net.Http.csproj
+++ b/lib/Net.Http/src/VNLib.Net.Http.csproj
@@ -2,16 +2,19 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Net.Http</RootNamespace>
<AssemblyName>VNLib.Net.Http</AssemblyName>
<NeutralLanguage>en-US</NeutralLanguage>
- <Nullable>enable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
- <AnalysisLevel>latest-all</AnalysisLevel>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<PackageId>VNLib.Net.Http</PackageId>
<Authors>Vaughn Nugent</Authors>
<Company>Vaughn Nugent</Company>
diff --git a/lib/Net.Messaging.FBM/src/Client/FBMRequest.cs b/lib/Net.Messaging.FBM/src/Client/FBMRequest.cs
index f16a490..e545d55 100644
--- a/lib/Net.Messaging.FBM/src/Client/FBMRequest.cs
+++ b/lib/Net.Messaging.FBM/src/Client/FBMRequest.cs
@@ -277,9 +277,9 @@ namespace VNLib.Net.Messaging.FBM.Client
public void Compile(ref ForwardOnlyWriter<char> writer)
{
ReadOnlyMemory<byte> requestData = GetRequestData();
- writer.Append("Message ID:");
+ writer.AppendSmall("Message ID:");
writer.Append(MessageId);
- writer.Append(Environment.NewLine);
+ writer.AppendSmall(Environment.NewLine);
Helpers.DefaultEncoding.GetChars(requestData.Span, ref writer);
}
///<inheritdoc/>
diff --git a/lib/Net.Messaging.FBM/src/VNLib.Net.Messaging.FBM.csproj b/lib/Net.Messaging.FBM/src/VNLib.Net.Messaging.FBM.csproj
index 667dfed..897bca5 100644
--- a/lib/Net.Messaging.FBM/src/VNLib.Net.Messaging.FBM.csproj
+++ b/lib/Net.Messaging.FBM/src/VNLib.Net.Messaging.FBM.csproj
@@ -2,15 +2,18 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Net.Messaging.FBM</RootNamespace>
<AssemblyName>VNLib.Net.Messaging.FBM</AssemblyName>
- <Nullable>enable</Nullable>
- <AnalysisLevel>latest-all</AnalysisLevel>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<PackageId>VNLib.Net.Messaging.FBM</PackageId>
<Authors>Vaughn Nugent</Authors>
<Company>Vaughn Nugent</Company>
diff --git a/lib/Net.Rest.Client/src/Construction/Extensions.cs b/lib/Net.Rest.Client/src/Construction/Extensions.cs
index ca0873b..93a1365 100644
--- a/lib/Net.Rest.Client/src/Construction/Extensions.cs
+++ b/lib/Net.Rest.Client/src/Construction/Extensions.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Net.Rest.Client
@@ -23,6 +23,7 @@
*/
using System;
+using System.IO;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
@@ -46,8 +47,11 @@ namespace VNLib.Net.Rest.Client.Construction
/// <param name="entity">The request entity model to send to the server</param>
/// <param name="cancellation">A token to cancel the operation</param>
/// <returns>A task that resolves the response message</returns>
+ /// <exception cref="ArgumentNullException"></exception>
public static async Task<RestResponse> ExecuteAsync<TModel>(this IRestSiteAdapter site, TModel entity, CancellationToken cancellation = default)
{
+ ArgumentNullException.ThrowIfNull(site);
+
//Get the adapter for the model
IRestEndpointAdapter<TModel> adapter = site.GetAdapter<TModel>();
@@ -76,6 +80,44 @@ namespace VNLib.Net.Rest.Client.Construction
}
/// <summary>
+ /// Begins a stream download of the desired resource by sending the request model parameter.
+ /// An <see cref="IRestEndpointAdapter{TModel}"/> must be defined to handle requests of the given model type.
+ /// <para>
+ /// WARNING: This function will not invoke the OnResponse handler functions after the stream
+ /// has been returned, there is no way to inspect the response when excuting a stream download
+ /// </para>
+ /// </summary>
+ /// <typeparam name="TModel"></typeparam>
+ /// <param name="site"></param>
+ /// <param name="entity">The request entity model to send to the server</param>
+ /// <param name="cancellation">A token to cancel the operation</param>
+ /// <returns>A task that resolves the response data stream</returns>
+ public static async Task<Stream?> DownloadStreamAsync<TModel>(this IRestSiteAdapter site, TModel entity, CancellationToken cancellation = default)
+ {
+ ArgumentNullException.ThrowIfNull(site);
+
+ //Get the adapter for the model
+ IRestEndpointAdapter<TModel> adapter = site.GetAdapter<TModel>();
+
+ //Get new request on adapter
+ RestRequest request = adapter.GetRequest(entity);
+
+ //Wait to exec operations if needed
+ await site.WaitAsync(cancellation);
+
+ Stream? response;
+
+ //Get rest client
+ using (ClientContract contract = site.GetClient())
+ {
+ //Exec response
+ response = await contract.Resource.DownloadStreamAsync(request, cancellation);
+ }
+
+ return response;
+ }
+
+ /// <summary>
/// Executes a request against the site by sending the request model parameter. An <see cref="IRestEndpointAdapter{TModel}"/> must be
/// defined to handle requests of the given model type.
/// </summary>
@@ -87,6 +129,8 @@ namespace VNLib.Net.Rest.Client.Construction
/// <returns>A task that resolves the response message with json resonse support</returns>
public static async Task<RestResponse<TJson>> ExecuteAsync<TModel, TJson>(this IRestSiteAdapter site, TModel entity, CancellationToken cancellation = default)
{
+ ArgumentNullException.ThrowIfNull(site);
+
//Get the adapter for the model
IRestEndpointAdapter<TModel> adapter = site.GetAdapter<TModel>();
@@ -124,6 +168,8 @@ namespace VNLib.Net.Rest.Client.Construction
/// <returns>When completed, gets the <see cref="RestResponse"/></returns>
public static async Task<RestResponse> ExecuteSingleAsync<TModel>(this IRestSiteAdapter site, TModel model, CancellationToken cancellation = default) where TModel : IRestSingleEndpoint
{
+ ArgumentNullException.ThrowIfNull(site);
+
//Init new request
RestRequest request = new(model.Url, model.Method);
model.OnRequest(request);
@@ -149,6 +195,7 @@ namespace VNLib.Net.Rest.Client.Construction
return response;
}
+
/// <summary>
/// Sets the request method of a new request
/// </summary>
@@ -358,22 +405,47 @@ namespace VNLib.Net.Rest.Client.Construction
/// <typeparam name="TResult">The json response entity type</typeparam>
/// <param name="response">The response task</param>
/// <returns>A task that resolves the deserialized entity type</returns>
- public static async Task<TResult?> AsJson<TResult>(this Task<RestResponse> response)
+ public static Task<TResult?> AsJson<TResult>(this Task<RestResponse> response)
+ => As(response, static r => JsonSerializer.Deserialize<TResult>(r.RawBytes));
+
+ /// <summary>
+ /// Converts a task that resolves a <see cref="RestResponse"/> to a task that deserializes
+ /// the response data as json.
+ /// </summary>
+ /// <param name="response">The response task</param>
+ /// <returns>A task that resolves the deserialized entity type</returns>
+ public static Task<byte[]?> AsBytes(this Task<RestResponse> response) => As(response, static p => p.RawBytes);
+
+ /// <summary>
+ /// Converts a task that resolves a <see cref="RestResponse"/> to a task that uses your
+ /// transformation function to create the result
+ /// </summary>
+ /// <param name="response">The response task</param>
+ /// <param name="callback">Your custom callback function used to transform the data</param>
+ /// <returns>A task that resolves the deserialized entity type</returns>
+ public static async Task<T> As<T>(this Task<RestResponse> response, Func<RestResponse, Task<T>> callback)
{
+ ArgumentNullException.ThrowIfNull(response);
+ ArgumentNullException.ThrowIfNull(callback);
+
RestResponse r = await response.ConfigureAwait(false);
- return JsonSerializer.Deserialize<TResult>(r.RawBytes);
+ return await callback(r).ConfigureAwait(false);
}
/// <summary>
- /// Converts a task that resolves a <see cref="RestResponse"/> to a task that deserializes
- /// the response data as json.
+ /// Converts a task that resolves a <see cref="RestResponse"/> to a task that uses your
+ /// transformation function to create the result
/// </summary>
/// <param name="response">The response task</param>
+ /// <param name="callback">Your custom callback function used to transform the data</param>
/// <returns>A task that resolves the deserialized entity type</returns>
- public static async Task<byte[]?> AsBytes(this Task<RestResponse> response)
+ public static async Task<T> As<T>(this Task<RestResponse> response, Func<RestResponse, T> callback)
{
+ ArgumentNullException.ThrowIfNull(response);
+ ArgumentNullException.ThrowIfNull(callback);
+
RestResponse r = await response.ConfigureAwait(false);
- return r.RawBytes;
+ return callback(r);
}
private record class EndpointAdapterBuilder(IRestSiteEndpointStore Site) : IRestEndpointBuilder
@@ -396,8 +468,8 @@ namespace VNLib.Net.Rest.Client.Construction
///<inheritdoc/>
public IRestRequestBuilder<TModel> WithModifier(Action<TModel, RestRequest> requestBuilder)
{
- _ = requestBuilder ?? throw new ArgumentNullException(nameof(requestBuilder));
- //Add handler to handler chain
+ ArgumentNullException.ThrowIfNull(requestBuilder);
+
Adapter.RequestChain.AddLast(requestBuilder);
return this;
}
@@ -405,8 +477,8 @@ namespace VNLib.Net.Rest.Client.Construction
///<inheritdoc/>
public IRestRequestBuilder<TModel> WithUrl(Func<TModel, string> uriBuilder)
{
- _ = uriBuilder ?? throw new ArgumentNullException(nameof(uriBuilder));
- //Add get url handler
+ ArgumentNullException.ThrowIfNull(uriBuilder);
+
Adapter.GetUrl = uriBuilder;
return this;
}
@@ -414,8 +486,8 @@ namespace VNLib.Net.Rest.Client.Construction
///<inheritdoc/>
public IRestRequestBuilder<TModel> OnResponse(Action<TModel, RestResponse> onResponseBuilder)
{
- _ = onResponseBuilder ?? throw new ArgumentNullException(nameof(onResponseBuilder));
- //Add a response handler
+ ArgumentNullException.ThrowIfNull(onResponseBuilder);
+
Adapter.ResponseChain.AddLast(onResponseBuilder);
return this;
}
diff --git a/lib/Net.Rest.Client/src/VNLib.Net.Rest.Client.csproj b/lib/Net.Rest.Client/src/VNLib.Net.Rest.Client.csproj
index c7a4151..b127800 100644
--- a/lib/Net.Rest.Client/src/VNLib.Net.Rest.Client.csproj
+++ b/lib/Net.Rest.Client/src/VNLib.Net.Rest.Client.csproj
@@ -6,11 +6,14 @@
<AssemblyName>VNLib.Net.Rest.Client</AssemblyName>
<RootNamespace>VNLib.Net.Rest.Client</RootNamespace>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
- <AnalysisLevel>latest-all</AnalysisLevel>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<PackageId>VNLib.Net.Rest.Client</PackageId>
<Company>Vaughn Nugent</Company>
<Authors>Vaughn Nugent</Authors>
diff --git a/lib/Net.Transport.SimpleTCP/src/SocketPipeLineWorker.cs b/lib/Net.Transport.SimpleTCP/src/SocketPipeLineWorker.cs
index b6df58c..cb3486f 100644
--- a/lib/Net.Transport.SimpleTCP/src/SocketPipeLineWorker.cs
+++ b/lib/Net.Transport.SimpleTCP/src/SocketPipeLineWorker.cs
@@ -562,16 +562,10 @@ namespace VNLib.Net.Transport.Tcp
void Stop();
}
- private readonly struct TpTimerWrapper : INetTimer
+ private readonly struct TpTimerWrapper(Timer timer, int timeout) : INetTimer
{
- private readonly Timer _timer;
- private readonly int _timeout;
-
- public TpTimerWrapper(Timer timer, int timeout)
- {
- _timer = timer;
- _timeout = timeout;
- }
+ private readonly Timer _timer = timer;
+ private readonly int _timeout = timeout;
public readonly void Start() => _timer.Restart(_timeout);
diff --git a/lib/Net.Transport.SimpleTCP/src/VNLib.Net.Transport.SimpleTCP.csproj b/lib/Net.Transport.SimpleTCP/src/VNLib.Net.Transport.SimpleTCP.csproj
index e999072..630a0db 100644
--- a/lib/Net.Transport.SimpleTCP/src/VNLib.Net.Transport.SimpleTCP.csproj
+++ b/lib/Net.Transport.SimpleTCP/src/VNLib.Net.Transport.SimpleTCP.csproj
@@ -2,15 +2,18 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Net.Transport</RootNamespace>
<AssemblyName>VNLib.Net.Transport.SimpleTCP</AssemblyName>
- <Nullable>enable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
- <AnalysisLevel>latest-all</AnalysisLevel>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<PackageId>VNLib.Net.Transport.SimpleTCP</PackageId>
<Product>VNLib Simple Transport Library</Product>
<PackageTags>vnlib, tcp, transport, simpletcp, networking</PackageTags>
diff --git a/lib/Plugins.Essentials.ServiceStack/src/VNLib.Plugins.Essentials.ServiceStack.csproj b/lib/Plugins.Essentials.ServiceStack/src/VNLib.Plugins.Essentials.ServiceStack.csproj
index 7dc12b6..4aedb80 100644
--- a/lib/Plugins.Essentials.ServiceStack/src/VNLib.Plugins.Essentials.ServiceStack.csproj
+++ b/lib/Plugins.Essentials.ServiceStack/src/VNLib.Plugins.Essentials.ServiceStack.csproj
@@ -2,16 +2,18 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Plugins.Essentials.ServiceStack</RootNamespace>
<AssemblyName>VNLib.Plugins.Essentials.ServiceStack</AssemblyName>
- <Nullable>enable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
- <PackageReadmeFile>README.md</PackageReadmeFile>
- <AnalysisLevel>latest-all</AnalysisLevel>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<Authors>Vaughn Nugent</Authors>
<Company>Vaughn Nugent</Company>
<PackageId>VNLib.Plugins.Essentials.ServiceStack</PackageId>
@@ -20,6 +22,7 @@
<PackageProjectUrl>https://www.vaughnnugent.com/resources/software/modules/VNLib.Core</PackageProjectUrl>
<RepositoryUrl>https://github.com/VnUgE/VNLib.Core/tree/main/lib/Plugins.Essentials.ServiceStack</RepositoryUrl>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
+ <PackageReadmeFile>README.md</PackageReadmeFile>
<PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
</PropertyGroup>
diff --git a/lib/Plugins.Essentials/src/Accounts/PasswordHashing.cs b/lib/Plugins.Essentials/src/Accounts/PasswordHashing.cs
index e6b9f24..6c5ebcc 100644
--- a/lib/Plugins.Essentials/src/Accounts/PasswordHashing.cs
+++ b/lib/Plugins.Essentials/src/Accounts/PasswordHashing.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials
@@ -29,6 +29,15 @@ using VNLib.Hashing;
using VNLib.Utils;
using VNLib.Utils.Memory;
+/*
+ * Some stuff to note
+ *
+ * Functions have explicit parameters to avoid accidental buffer mixup
+ * when calling nested/overload functions. Please keep it that way for now
+ * I really want to avoid a whoopsie in password hasing.
+ */
+
+
namespace VNLib.Plugins.Essentials.Accounts
{
@@ -59,7 +68,8 @@ namespace VNLib.Plugins.Essentials.Accounts
/// <param name="secret">The password secret provider</param>
/// <param name="setup">The configuration setup arguments</param>
/// <returns>The instance of the library to use</returns>
- public static PasswordHashing Create(IArgon2Library library, ISecretProvider secret, in Argon2ConfigParams setup) => new (library, secret, setup);
+ public static PasswordHashing Create(IArgon2Library library, ISecretProvider secret, in Argon2ConfigParams setup)
+ => new (library, secret, in setup);
/// <summary>
/// Creates a new <see cref="PasswordHashing"/> instance using the default
@@ -69,7 +79,8 @@ namespace VNLib.Plugins.Essentials.Accounts
/// <param name="setup">The configuration setup arguments</param>
/// <returns>The instance of the library to use</returns>
/// <exception cref="DllNotFoundException"></exception>
- public static PasswordHashing Create(ISecretProvider secret, in Argon2ConfigParams setup) => Create(VnArgon2.GetOrLoadSharedLib(), secret, in setup);
+ public static PasswordHashing Create(ISecretProvider secret, in Argon2ConfigParams setup)
+ => Create(VnArgon2.GetOrLoadSharedLib(), secret, in setup);
private Argon2CostParams GetCostParams()
{
@@ -93,15 +104,18 @@ namespace VNLib.Plugins.Essentials.Accounts
if(_secret.BufferSize < STACK_MAX_BUFF_SIZE)
{
- //Alloc stack buffer
+ /*
+ * Also always alloc fixed buffer size again to help
+ * be less obvious during process allocations
+ */
Span<byte> secretBuffer = stackalloc byte[STACK_MAX_BUFF_SIZE];
return VerifyInternal(passHash, password, secretBuffer);
}
else
{
- //Alloc heap buffer
- using UnsafeMemoryHandle<byte> secretBuffer = MemoryUtil.UnsafeAlloc(_secret.BufferSize, true);
+
+ using UnsafeMemoryHandle<byte> secretBuffer = AllocSecretBuffer();
return VerifyInternal(passHash, password, secretBuffer.Span);
}
@@ -111,10 +125,10 @@ namespace VNLib.Plugins.Essentials.Accounts
{
try
{
- //Get the secret from the callback
- ERRNO count = _secret.GetSecret(secretBuffer);
- //Verify
- return _argon2.Verify2id(password, passHash, secretBuffer[..(int)count]);
+
+ ERRNO secretSize = _secret.GetSecret(secretBuffer);
+
+ return _argon2.Verify2id(password, passHash, secretBuffer[..(int)secretSize]);
}
finally
{
@@ -135,11 +149,9 @@ namespace VNLib.Plugins.Essentials.Accounts
public bool Verify(ReadOnlySpan<byte> hash, ReadOnlySpan<byte> salt, ReadOnlySpan<byte> password)
{
if (hash.Length < STACK_MAX_BUFF_SIZE)
- {
- //Alloc stack buffer
+ {
Span<byte> hashBuf = stackalloc byte[hash.Length];
-
- //Hash the password with the current config
+
Hash(password, salt, hashBuf);
//Compare the hashed password to the specified hash and return results
@@ -148,8 +160,7 @@ namespace VNLib.Plugins.Essentials.Accounts
else
{
using UnsafeMemoryHandle<byte> hashBuf = MemoryUtil.UnsafeAlloc(hash.Length, true);
-
- //Hash the password with the current config
+
Hash(password, salt, hashBuf.Span);
//Compare the hashed password to the specified hash and return results
@@ -165,7 +176,7 @@ namespace VNLib.Plugins.Essentials.Accounts
Argon2CostParams costParams = GetCostParams();
//Alloc shared buffer for the salt and secret buffer
- using UnsafeMemoryHandle<byte> buffer = MemoryUtil.UnsafeAlloc(_config.SaltLen + _secret.BufferSize, true);
+ using UnsafeMemoryHandle<byte> buffer = MemoryUtil.UnsafeAllocNearestPage(_config.SaltLen + _secret.BufferSize, true);
//Split buffers
Span<byte> saltBuf = buffer.Span[.._config.SaltLen];
@@ -175,12 +186,16 @@ namespace VNLib.Plugins.Essentials.Accounts
RandomHash.GetRandomBytes(saltBuf);
try
- {
- //recover the secret
+ {
ERRNO count = _secret.GetSecret(secretBuf);
-
- //Hashes a password, with the current parameters
- return (PrivateString)_argon2.Hash2id(password, saltBuf, secretBuf[..(int)count], in costParams, _config.HashLen);
+
+ return (PrivateString)_argon2.Hash2id(
+ password: password,
+ salt: saltBuf,
+ secret: secretBuf[..(int)count],
+ costParams: in costParams,
+ hashLen: _config.HashLen
+ );
}
finally
{
@@ -201,7 +216,10 @@ namespace VNLib.Plugins.Essentials.Accounts
Span<byte> saltBuf = buffer.Span[.._config.SaltLen];
Span<byte> secretBuf = buffer.Span[_config.SaltLen..];
- //Fill the buffer with random bytes
+ /*
+ * Salt is just crypographically secure random
+ * data.
+ */
RandomHash.GetRandomBytes(saltBuf);
try
@@ -210,7 +228,13 @@ namespace VNLib.Plugins.Essentials.Accounts
ERRNO count = _secret.GetSecret(secretBuf);
//Hashes a password, with the current parameters
- return (PrivateString)_argon2.Hash2id(password, saltBuf, secretBuf[..(int)count], in costParams, _config.HashLen);
+ return (PrivateString)_argon2.Hash2id(
+ password: password,
+ salt: saltBuf,
+ secret: secretBuf[..(int)count],
+ costParams: in costParams,
+ hashLen: _config.HashLen
+ );
}
finally
{
@@ -229,20 +253,28 @@ namespace VNLib.Plugins.Essentials.Accounts
public void Hash(ReadOnlySpan<byte> password, ReadOnlySpan<byte> salt, Span<byte> hashOutput)
{
Argon2CostParams costParams = GetCostParams();
+
+ using UnsafeMemoryHandle<byte> secretBuffer = AllocSecretBuffer();
- //alloc secret buffer
- using UnsafeMemoryHandle<byte> secretBuffer = MemoryUtil.UnsafeAllocNearestPage(_secret.BufferSize, true);
try
{
- //Get the secret from the callback
- ERRNO count = _secret.GetSecret(secretBuffer.Span);
- //Hashes a password, with the current parameters
- _argon2.Hash2id(password, salt, secretBuffer.Span[..(int)count], hashOutput, in costParams);
+ ERRNO secretSize = _secret.GetSecret(secretBuffer.Span);
+
+ _argon2.Hash2id(
+ password: password,
+ salt: salt,
+ secret: secretBuffer.AsSpan(0, secretSize),
+ rawHashOutput: hashOutput,
+ costParams: in costParams
+ );
}
finally
{
//Erase secret buffer
- MemoryUtil.InitializeBlock(ref secretBuffer.GetReference(), secretBuffer.IntLength);
+ MemoryUtil.InitializeBlock(
+ ref secretBuffer.GetReference(),
+ secretBuffer.IntLength
+ );
}
}
@@ -290,6 +322,12 @@ namespace VNLib.Plugins.Essentials.Accounts
}
}
+ /*
+ * Always alloc page aligned to help keep block allocations
+ * a little less obvious.
+ */
+ private UnsafeMemoryHandle<byte> AllocSecretBuffer() => MemoryUtil.UnsafeAllocNearestPage(_secret.BufferSize, true);
+
private readonly ref struct HashBufferSegments
{
public readonly Span<byte> SaltBuffer;
diff --git a/lib/Plugins.Essentials/src/SemiConsistentVeTable.cs b/lib/Plugins.Essentials/src/Endpoints/SemiConsistentVeTable.cs
index e1706f4..09ab151 100644
--- a/lib/Plugins.Essentials/src/SemiConsistentVeTable.cs
+++ b/lib/Plugins.Essentials/src/Endpoints/SemiConsistentVeTable.cs
@@ -31,11 +31,10 @@ using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using VNLib.Net.Http;
-using VNLib.Plugins.Essentials.Endpoints;
-namespace VNLib.Plugins.Essentials
+namespace VNLib.Plugins.Essentials.Endpoints
{
- internal class SemiConsistentVeTable : IVirtualEndpointTable
+ internal sealed class SemiConsistentVeTable : IVirtualEndpointTable
{
/*
@@ -170,7 +169,7 @@ namespace VNLib.Plugins.Essentials
}
///<inheritdoc/>
- public bool TryGetEndpoint(string path, [NotNullWhen(true)] out IVirtualEndpoint<HttpEntity>? endpoint)
+ public bool TryGetEndpoint(string path, [NotNullWhen(true)] out IVirtualEndpoint<HttpEntity>? endpoint)
=> VirtualEndpoints.TryGetValue(path, out endpoint);
diff --git a/lib/Plugins.Essentials/src/EventProcessor.cs b/lib/Plugins.Essentials/src/EventProcessor.cs
index f052c56..ba7aa3c 100644
--- a/lib/Plugins.Essentials/src/EventProcessor.cs
+++ b/lib/Plugins.Essentials/src/EventProcessor.cs
@@ -28,7 +28,6 @@ using System.Net;
using System.Threading;
using System.Net.Sockets;
using System.Threading.Tasks;
-using System.Collections.Generic;
using System.Collections.Immutable;
using System.Runtime.CompilerServices;
@@ -40,8 +39,8 @@ using VNLib.Plugins.Essentials.Accounts;
using VNLib.Plugins.Essentials.Content;
using VNLib.Plugins.Essentials.Sessions;
using VNLib.Plugins.Essentials.Extensions;
-using VNLib.Plugins.Essentials.Middleware;
using VNLib.Plugins.Essentials.Endpoints;
+using VNLib.Plugins.Essentials.Middleware;
#pragma warning disable CA2007 // Consider calling ConfigureAwait on the awaited task
@@ -133,7 +132,8 @@ namespace VNLib.Plugins.Essentials
/// The internal service pool for the processor
/// </summary>
protected readonly HttpProcessorServicePool ServicePool = new([
- typeof(ISessionProvider), //Order must match the indexes above
+ //Order must match the indexes above
+ typeof(ISessionProvider),
typeof(IPageRouter),
typeof(IAccountSecurityProvider)
]);
@@ -157,6 +157,8 @@ namespace VNLib.Plugins.Essentials
get => ServicePool.ExchangeVersion(ref _accountSec, SEC_INDEX);
}
+ private readonly MiddlewareController _middleware = new(config);
+
///<inheritdoc/>
public virtual async ValueTask ClientConnectedAsync(IHttpEvent httpEvent)
{
@@ -169,8 +171,6 @@ namespace VNLib.Plugins.Essentials
ISessionProvider? sessions = ServicePool.ExchangeVersion(ref _sessions, SESS_INDEX);
IPageRouter? router = ServicePool.ExchangeVersion(ref _router, ROUTER_INDEX);
- LinkedListNode<IHttpMiddleware>? mwNode = config.MiddlewareChain.GetCurrentHead();
-
//event cancellation token
HttpEntity entity = new(httpEvent, this);
@@ -205,24 +205,10 @@ namespace VNLib.Plugins.Essentials
goto RespondAndExit;
}
- //Loop through nodes
- while(mwNode != null)
+ //Exec middleware
+ if(!await _middleware.ProcessAsync(entity))
{
- //Invoke mw handler on our event
- entity.EventArgs = await mwNode.ValueRef.ProcessAsync(entity);
-
- switch (entity.EventArgs.Routine)
- {
- //move next if continue is returned
- case FpRoutine.Continue:
- break;
-
- //Middleware completed the connection, time to exit
- default:
- goto RespondAndExit;
- }
-
- mwNode = mwNode.Next;
+ goto RespondAndExit;
}
if (!config.EndpointTable.IsEmpty)
@@ -257,6 +243,9 @@ namespace VNLib.Plugins.Essentials
RespondAndExit:
+ //Normal post-process
+ _middleware.PostProcess(entity);
+
//Call post processor method
PostProcessEntity(entity, ref entity.EventArgs);
}
@@ -744,5 +733,5 @@ namespace VNLib.Plugins.Essentials
return arr;
}
}
- }
-} \ No newline at end of file
+ }
+}
diff --git a/lib/Plugins.Essentials/src/EventProcessorConfig.cs b/lib/Plugins.Essentials/src/EventProcessorConfig.cs
index 8f401ac..6e101eb 100644
--- a/lib/Plugins.Essentials/src/EventProcessorConfig.cs
+++ b/lib/Plugins.Essentials/src/EventProcessorConfig.cs
@@ -29,6 +29,7 @@ using System.Collections.Frozen;
using System.Collections.Generic;
using VNLib.Utils.Logging;
+using VNLib.Plugins.Essentials.Endpoints;
using VNLib.Plugins.Essentials.Middleware;
namespace VNLib.Plugins.Essentials
diff --git a/lib/Plugins.Essentials/src/Extensions/ConnectionInfoExtensions.cs b/lib/Plugins.Essentials/src/Extensions/ConnectionInfoExtensions.cs
index a99b1ab..64a9611 100644
--- a/lib/Plugins.Essentials/src/Extensions/ConnectionInfoExtensions.cs
+++ b/lib/Plugins.Essentials/src/Extensions/ConnectionInfoExtensions.cs
@@ -114,6 +114,7 @@ namespace VNLib.Plugins.Essentials.Extensions
/// <returns>true if the connection accepts any content typ, false otherwise</returns>
private static bool AcceptsAny(IConnectionInfo server)
{
+ // If no accept header is sent by clients, it is assumed it accepts all content types
if(server.Accept.Count == 0)
{
return true;
@@ -196,14 +197,15 @@ namespace VNLib.Plugins.Essentials.Extensions
//Alloc enough space to hold the string
Span<char> buffer = stackalloc char[64];
ForwardOnlyWriter<char> rangeBuilder = new(buffer);
+
//Build the range header in this format "bytes <begin>-<end>/<total>"
- rangeBuilder.Append("bytes ");
+ rangeBuilder.AppendSmall("bytes ");
rangeBuilder.Append(start);
rangeBuilder.Append('-');
rangeBuilder.Append(end);
rangeBuilder.Append('/');
rangeBuilder.Append(length);
- //Print to a string and set the content range header
+
entity.Server.Headers[HttpResponseHeader.ContentRange] = rangeBuilder.ToString();
}
@@ -212,7 +214,8 @@ namespace VNLib.Plugins.Essentials.Extensions
/// </summary>
/// <returns>true if the user-agent specified the cors security header</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static bool IsCors(this IConnectionInfo server) => "cors".Equals(server.Headers[SEC_HEADER_MODE], StringComparison.OrdinalIgnoreCase);
+ public static bool IsCors(this IConnectionInfo server)
+ => string.Equals("cors", server.Headers[SEC_HEADER_MODE], StringComparison.OrdinalIgnoreCase);
/// <summary>
/// Determines if the User-Agent specified "cross-site" in the Sec-Site header, OR
@@ -223,8 +226,8 @@ namespace VNLib.Plugins.Essentials.Extensions
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsCrossSite(this IConnectionInfo server)
{
- return "cross-site".Equals(server.Headers[SEC_HEADER_SITE], StringComparison.OrdinalIgnoreCase)
- || (server.Origin != null && !server.RequestUri.DnsSafeHost.Equals(server.Origin.DnsSafeHost, StringComparison.Ordinal));
+ return string.Equals("cross-site", server.Headers[SEC_HEADER_SITE], StringComparison.OrdinalIgnoreCase)
+ || (server.Origin != null && ! string.Equals(server.RequestUri.DnsSafeHost, server.Origin.DnsSafeHost, StringComparison.Ordinal));
}
/// <summary>
@@ -233,14 +236,16 @@ namespace VNLib.Plugins.Essentials.Extensions
/// <param name="server"></param>
/// <returns>true if sec-user header was set to "?1"</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static bool IsUserInvoked(this IConnectionInfo server) => "?1".Equals(server.Headers[SEC_HEADER_USER], StringComparison.OrdinalIgnoreCase);
+ public static bool IsUserInvoked(this IConnectionInfo server)
+ => string.Equals("?1", server.Headers[SEC_HEADER_USER], StringComparison.OrdinalIgnoreCase);
/// <summary>
/// Was this request created from normal user navigation
/// </summary>
/// <returns>true if sec-mode set to "navigate"</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static bool IsNavigation(this IConnectionInfo server) => "navigate".Equals(server.Headers[SEC_HEADER_MODE], StringComparison.OrdinalIgnoreCase);
+ public static bool IsNavigation(this IConnectionInfo server)
+ => string.Equals("navigate", server.Headers[SEC_HEADER_MODE], StringComparison.OrdinalIgnoreCase);
/// <summary>
/// Determines if the client specified "no-cache" for the cache control header, signalling they do not wish to cache the entity
@@ -302,7 +307,11 @@ namespace VNLib.Plugins.Essentials.Extensions
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool RefererMatch(this IConnectionInfo server)
{
- return server.RequestUri.DnsSafeHost.Equals(server.Referer?.DnsSafeHost, StringComparison.OrdinalIgnoreCase);
+ return string.Equals(
+ server.RequestUri.DnsSafeHost,
+ server.Referer?.DnsSafeHost,
+ StringComparison.OrdinalIgnoreCase
+ );
}
/// <summary>
@@ -315,9 +324,25 @@ namespace VNLib.Plugins.Essentials.Extensions
/// <param name="sameSite"></param>
/// <param name="secure"></param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static void ExpireCookie(this IConnectionInfo server, string name, string domain = "", string path = "/", CookieSameSite sameSite = CookieSameSite.None, bool secure = false)
+ public static void ExpireCookie(
+ this IConnectionInfo server,
+ string name,
+ string domain = "",
+ string path = "/",
+ CookieSameSite sameSite = CookieSameSite.None,
+ bool secure = false
+ )
{
- server.SetCookie(name, string.Empty, domain, path, TimeSpan.Zero, sameSite, false, secure);
+ SetCookie(
+ server: server,
+ name: name,
+ value: string.Empty,
+ domain: domain,
+ path: path,
+ expires: TimeSpan.Zero,
+ sameSite: sameSite,
+ secure: secure
+ );
}
/// <summary>
@@ -340,9 +365,20 @@ namespace VNLib.Plugins.Essentials.Extensions
string path = "/",
CookieSameSite sameSite = CookieSameSite.None,
bool httpOnly = false,
- bool secure = false)
+ bool secure = false
+ )
{
- server.SetCookie(name, value, domain, path, TimeSpan.MaxValue, sameSite, httpOnly, secure);
+ SetCookie(
+ server: server,
+ name: name,
+ value: value,
+ domain: domain,
+ path: path,
+ expires: TimeSpan.Zero,
+ sameSite: sameSite,
+ httpOnly: httpOnly,
+ secure: secure
+ );
}
/// <summary>
@@ -367,9 +403,24 @@ namespace VNLib.Plugins.Essentials.Extensions
string path = "/",
CookieSameSite sameSite = CookieSameSite.None,
bool httpOnly = false,
- bool secure = false)
+ bool secure = false
+ )
{
- server.SetCookie(name, value, domain, path, expires, sameSite, httpOnly, secure);
+
+ HttpResponseCookie cookie = new(name)
+ {
+ Value = value,
+ Domain = domain,
+ Path = path,
+ MaxAge = expires,
+ IsSession = expires == TimeSpan.MaxValue,
+ //If the connection is cross origin, then we need to modify the secure and samsite values
+ SameSite = sameSite,
+ HttpOnly = httpOnly,
+ Secure = secure | server.CrossOrigin,
+ };
+
+ server.SetCookie(in cookie);
}
@@ -380,35 +431,24 @@ namespace VNLib.Plugins.Essentials.Extensions
/// <param name="cookie">The cookie to set for the server</param>
/// <exception cref="ArgumentException"></exception>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [Obsolete("HttpCookie type is obsolete in favor of HttpResponseCookie")]
public static void SetCookie(this IConnectionInfo server, in HttpCookie cookie)
{
- //Cookie name is required
- if(string.IsNullOrWhiteSpace(cookie.Name))
- {
- throw new ArgumentException("A nonn-null cookie name is required");
- }
-
//Set the cookie
- server.SetCookie(cookie.Name,
- cookie.Value,
- cookie.Domain,
- cookie.Path,
- cookie.ValidFor,
- cookie.SameSite,
- cookie.HttpOnly,
- cookie.Secure);
- }
-
- /// <summary>
- /// Is the current connection a "browser" ?
- /// </summary>
- /// <param name="server"></param>
- /// <returns>true if the user agent string contains "Mozilla" and does not contain "bot", false otherwise</returns>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static bool IsBrowser(this IConnectionInfo server)
- {
- //Get user-agent and determine if its a browser
- return server.UserAgent != null && !server.UserAgent.Contains("bot", StringComparison.OrdinalIgnoreCase) && server.UserAgent.Contains("Mozilla", StringComparison.OrdinalIgnoreCase);
+ HttpResponseCookie rCookie = new(cookie.Name)
+ {
+ Value = cookie.Value,
+ Domain = cookie.Domain,
+ Path = cookie.Path,
+ MaxAge = cookie.ValidFor,
+ IsSession = cookie.ValidFor == TimeSpan.MaxValue,
+ //If the connection is cross origin, then we need to modify the secure and samsite values
+ SameSite = cookie.SameSite,
+ HttpOnly = cookie.HttpOnly,
+ Secure = cookie.Secure | server.CrossOrigin,
+ };
+
+ server.SetCookie(in rCookie);
}
/// <summary>
@@ -417,12 +457,9 @@ namespace VNLib.Plugins.Essentials.Extensions
/// <param name="server"></param>
/// <returns>True of the connection was made from the local machine</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static bool IsLoopBack(this IConnectionInfo server)
- {
- IPAddress realIp = server.GetTrustedIp();
- return IPAddress.Any.Equals(realIp) || IPAddress.Loopback.Equals(realIp);
- }
-
+ public static bool IsLoopBack(this IConnectionInfo server)
+ => IPAddress.Loopback.Equals(GetTrustedIp(server));
+
/// <summary>
/// Did the connection set the dnt header?
/// </summary>
@@ -493,7 +530,7 @@ namespace VNLib.Plugins.Essentials.Extensions
//Standard https protocol header
string? protocol = server.Headers[X_FORWARDED_PROTO_HEADER];
//If the header is set and equals https then tls is being used
- return string.IsNullOrWhiteSpace(protocol) ? isSecure : "https".Equals(protocol, StringComparison.OrdinalIgnoreCase);
+ return string.IsNullOrWhiteSpace(protocol) ? isSecure : string.Equals("https", protocol, StringComparison.OrdinalIgnoreCase);
}
else
{
diff --git a/lib/Plugins.Essentials/src/Extensions/EssentialHttpEventExtensions.cs b/lib/Plugins.Essentials/src/Extensions/EssentialHttpEventExtensions.cs
index 8adf883..0ca5b8f 100644
--- a/lib/Plugins.Essentials/src/Extensions/EssentialHttpEventExtensions.cs
+++ b/lib/Plugins.Essentials/src/Extensions/EssentialHttpEventExtensions.cs
@@ -796,6 +796,66 @@ namespace VNLib.Plugins.Essentials.Extensions
//Parse the file using the specified parser
return parser(file.FileData, file.ContentTypeString());
}
+
+ /// <summary>
+ /// Reads the contents of an uploaded file at the desired intex into memory
+ /// and returns a managed byte array containing the file data
+ /// </summary>
+ /// <param name="ev"></param>
+ /// <param name="uploadIndex">The index of the uploaded file to buffer</param>
+ /// <returns>A value task that resolves the uploaded data</returns>
+ /// <exception cref="IOException"></exception>
+ public static ValueTask<byte[]> ReadFileDataAsync(this HttpEntity ev, int uploadIndex = 0)
+ {
+ ArgumentNullException.ThrowIfNull(ev);
+
+ /*
+ * File should exist at the desired index and have a length greater than 0
+ * otherwise return an empty buffer
+ */
+ if (ev.Files.Count <= uploadIndex || ev.Files[uploadIndex].Length == 0)
+ {
+ return ValueTask.FromResult(Array.Empty<byte>());
+ }
+
+ return ReadFileDataAsync(ev, uploadIndex);
+
+ static async ValueTask<byte[]> ReadFileDataAsync(HttpEntity entity, int fileIndex)
+ {
+ FileUpload upload = entity.Files[fileIndex];
+
+ /*
+ * Alloc an uninitialized buffer to read the file data into, it should ALL
+ * be overwritten during read operation
+ */
+ byte[] buffer = GC.AllocateUninitializedArray<byte>((int)upload.Length);
+
+ int read = 0;
+
+ do
+ {
+ Memory<byte> mem = buffer.AsMemory(read, buffer.Length - read);
+
+ int r = await upload.FileData.ReadAsync(mem, entity.EventCancellation);
+
+ //If no data was read force break and deal with read data
+ if (r == 0)
+ {
+ break;
+ }
+
+ read += r;
+ } while (read < buffer.Length);
+
+ //Buffer is exact length, so read should be equal to length
+ if (read != buffer.Length)
+ {
+ throw new IOException("Failed to read entire file data, this may be an internal error");
+ }
+
+ return buffer;
+ }
+ }
/// <summary>
/// Get a <see cref="DirectoryInfo"/> instance that points to the current sites filesystem root.
@@ -816,12 +876,12 @@ namespace VNLib.Plugins.Essentials.Extensions
public static string ContentTypeString(this in FileUpload upload) => HttpHelpers.GetContentTypeString(upload.ContentType);
/// <summary>
- /// Sets the <see cref="HttpControlMask.CompressionDisabed"/> flag on the current
+ /// Sets the <see cref="HttpControlMask.CompressionDisabled"/> flag on the current
/// <see cref="IHttpEvent"/> instance to disable dynamic compression on the response.
/// </summary>
/// <param name="entity"></param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static void DisableCompression(this IHttpEvent entity) => entity.SetControlFlag(HttpControlMask.CompressionDisabed);
+ public static void DisableCompression(this IHttpEvent entity) => entity.SetControlFlag(HttpControlMask.CompressionDisabled);
/// <summary>
/// Attempts to upgrade the connection to a websocket, if the setup fails, it sets up the response to the client accordingly.
diff --git a/lib/Plugins.Essentials/src/Extensions/HttpCookie.cs b/lib/Plugins.Essentials/src/Extensions/HttpCookie.cs
index 6158a69..19c8e78 100644
--- a/lib/Plugins.Essentials/src/Extensions/HttpCookie.cs
+++ b/lib/Plugins.Essentials/src/Extensions/HttpCookie.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials
@@ -33,6 +33,7 @@ namespace VNLib.Plugins.Essentials.Extensions
/// </summary>
/// <param name="Name">The cookie name</param>
/// <param name="Value">The cookie value</param>
+ [Obsolete("Obsolete in favor of HttpResponseCookie")]
public readonly record struct HttpCookie (string Name, string Value)
{
/// <summary>
diff --git a/lib/Plugins.Essentials/src/Extensions/SingleCookieController.cs b/lib/Plugins.Essentials/src/Extensions/SingleCookieController.cs
index f3b02dc..ef86934 100644
--- a/lib/Plugins.Essentials/src/Extensions/SingleCookieController.cs
+++ b/lib/Plugins.Essentials/src/Extensions/SingleCookieController.cs
@@ -94,15 +94,19 @@ namespace VNLib.Plugins.Essentials.Extensions
//Only set cooke if already exists or force is true
if (entity.Server.RequestCookies.ContainsKey(Name) || force)
{
- //Build and set cookie
- HttpCookie cookie = new(Name, value)
+ HttpResponseCookie cookie = new(Name)
{
- Secure = Secure,
- HttpOnly = HttpOnly,
- ValidFor = ValidFor,
- SameSite = SameSite,
+ Value = value,
+ Domain = Domain,
Path = Path,
- Domain = Domain
+ //Only set max-age if cookie has a value, otherwise set to zero to expire
+ MaxAge = string.IsNullOrWhiteSpace(value) ? TimeSpan.Zero : ValidFor,
+ IsSession = ValidFor == TimeSpan.MaxValue,
+ SameSite = SameSite,
+ HttpOnly = HttpOnly,
+
+ //Secure is required on cross origin requests
+ Secure = Secure | entity.Server.CrossOrigin,
};
entity.Server.SetCookie(in cookie);
diff --git a/lib/Plugins.Essentials/src/HttpEntity.cs b/lib/Plugins.Essentials/src/HttpEntity.cs
index 2a24982..ff728e3 100644
--- a/lib/Plugins.Essentials/src/HttpEntity.cs
+++ b/lib/Plugins.Essentials/src/HttpEntity.cs
@@ -26,6 +26,7 @@ using System;
using System.IO;
using System.Net;
using System.Threading;
+using System.Diagnostics;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
@@ -204,6 +205,27 @@ namespace VNLib.Plugins.Essentials
throw new ContentTypeUnacceptableException("The client does not accept the content type of the response");
}
+ /*
+ * If the underlying stream is actaully a memory stream,
+ * create a wrapper for it to read as a memory response.
+ * This is done to avoid a user-space copy since we can
+ * get access to access the internal buffer
+ *
+ * Stream length also should not cause an integer overflow,
+ * which also mean position is assumed not to overflow
+ * or cause an overflow during reading
+ */
+ if(stream is MemoryStream ms && length < int.MaxValue)
+ {
+ Entity.CloseResponse(
+ code,
+ type,
+ new MemStreamWrapper(ms, (int)length)
+ );
+
+ return;
+ }
+
Entity.CloseResponse(code, type, stream, length);
}
@@ -246,5 +268,37 @@ namespace VNLib.Plugins.Essentials
///<inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
void IHttpEvent.DangerousChangeProtocol(IAlternateProtocol protocolHandler) => Entity.DangerousChangeProtocol(protocolHandler);
+
+
+ private sealed class MemStreamWrapper(MemoryStream memStream, int length) : IMemoryResponseReader
+ {
+ readonly int length = length;
+
+ /*
+ * Stream may be offset by the caller, it needs
+ * to be respected during streaming.
+ */
+ int read = (int)memStream.Position;
+
+ public int Remaining
+ {
+ get
+ {
+ Debug.Assert(length - read >= 0);
+ return length - read;
+ }
+ }
+
+ public void Advance(int written) => read += written;
+
+ ///<inheritdoc/>
+ public void Close() => memStream.Dispose();
+
+ public ReadOnlyMemory<byte> GetMemory()
+ {
+ byte[] intBuffer = memStream.GetBuffer();
+ return new ReadOnlyMemory<byte>(intBuffer, read, Remaining);
+ }
+ }
}
}
diff --git a/lib/Plugins.Essentials/src/Middleware/IHttpMiddleware.cs b/lib/Plugins.Essentials/src/Middleware/IHttpMiddleware.cs
index 83e6a06..990d59b 100644
--- a/lib/Plugins.Essentials/src/Middleware/IHttpMiddleware.cs
+++ b/lib/Plugins.Essentials/src/Middleware/IHttpMiddleware.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials
@@ -40,5 +40,19 @@ namespace VNLib.Plugins.Essentials.Middleware
/// <param name="entity">The entity to process</param>
/// <returns>The result of the operation</returns>
ValueTask<FileProcessArgs> ProcessAsync(HttpEntity entity);
+
+ /// <summary>
+ /// Post processes an HTTP entity with possible file selection. May optionally mutate the
+ /// current arguments before the event processor completes a response.
+ /// </summary>
+ /// <param name="entity">The entity that has been processes and is ready to close</param>
+ /// <param name="currentArgs">The current file processor arguments</param>
+ /// <remarks>
+ /// Generally this function should simply observe results as the entity may already have been
+ /// configured for a response, such as by a virtual routine. You should inspect the current arguments
+ /// before mutating the reference.
+ /// </remarks>
+ virtual void VolatilePostProcess(HttpEntity entity, ref FileProcessArgs currentArgs)
+ { }
}
}
diff --git a/lib/Plugins.Essentials/src/Middleware/MiddlewareController.cs b/lib/Plugins.Essentials/src/Middleware/MiddlewareController.cs
new file mode 100644
index 0000000..c3a85c9
--- /dev/null
+++ b/lib/Plugins.Essentials/src/Middleware/MiddlewareController.cs
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2024 Vaughn Nugent
+*
+* Library: VNLib
+* Package: VNLib.Plugins.Essentials
+* File: MiddlewareController.cs
+*
+* MiddlewareController.cs is part of VNLib.Plugins.Essentials which is part
+* of the larger VNLib collection of libraries and utilities.
+*
+* VNLib.Plugins.Essentials is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as
+* published by the Free Software Foundation, either version 3 of the
+* License, or (at your option) any later version.
+*
+* VNLib.Plugins.Essentials is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see https://www.gnu.org/licenses/.
+*/
+
+using System.Threading.Tasks;
+using System.Collections.Generic;
+
+namespace VNLib.Plugins.Essentials.Middleware
+{
+ internal sealed class MiddlewareController(EventProcessorConfig config)
+ {
+ private readonly IHttpMiddlewareChain _chain = config.MiddlewareChain;
+
+ public async ValueTask<bool> ProcessAsync(HttpEntity entity)
+ {
+ /*
+ * Loops through the current linkedlist of the current middleware chain. The
+ * chain should remain unmodified after GetCurrentHead() is called.
+ *
+ * Middleware will return a Continue routine to move to the next middleware
+ * node. All other routines mean the processor has responded to the client
+ * itself and must exit control and move to response.
+ */
+
+ LinkedListNode<IHttpMiddleware>? mwNode = _chain.GetCurrentHead();
+
+ //Loop through nodes
+ while (mwNode != null)
+ {
+ entity.EventArgs = await mwNode.ValueRef.ProcessAsync(entity);
+
+ switch (entity.EventArgs.Routine)
+ {
+ //move next if continue is returned
+ case FpRoutine.Continue:
+ break;
+
+ //Middleware completed the connection, time to exit the event processing
+ default:
+ return false;
+ }
+
+ mwNode = mwNode.Next;
+ }
+
+ return true;
+ }
+
+ public void PostProcess(HttpEntity entity)
+ {
+ /*
+ * Middleware nodes may be allowed to inspect, or modify the return
+ * event arguments as the server may not have responded to the client
+ * yet.
+ */
+
+ LinkedListNode<IHttpMiddleware>? mwNode = _chain.GetCurrentHead();
+
+ while (mwNode != null)
+ {
+ //Invoke mw handler on our event
+ mwNode.ValueRef.VolatilePostProcess(entity, ref entity.EventArgs);
+
+ mwNode = mwNode.Next;
+ }
+ }
+ }
+}
diff --git a/lib/Plugins.Essentials/src/Oauth/OauthHttpExtensions.cs b/lib/Plugins.Essentials/src/Oauth/OauthHttpExtensions.cs
index e65c26d..b60c7c3 100644
--- a/lib/Plugins.Essentials/src/Oauth/OauthHttpExtensions.cs
+++ b/lib/Plugins.Essentials/src/Oauth/OauthHttpExtensions.cs
@@ -90,40 +90,40 @@ namespace VNLib.Plugins.Essentials.Oauth
ForwardOnlyWriter<char> writer = new(buffer.Span);
//Build the error message string
- writer.Append("{\"error\":\"");
+ writer.AppendSmall("{\"error\":\"");
switch (error)
{
case ErrorType.InvalidRequest:
- writer.Append("invalid_request");
+ writer.AppendSmall("invalid_request");
break;
case ErrorType.InvalidClient:
- writer.Append("invalid_client");
+ writer.AppendSmall("invalid_client");
break;
case ErrorType.UnauthorizedClient:
- writer.Append("unauthorized_client");
+ writer.AppendSmall("unauthorized_client");
break;
case ErrorType.InvalidToken:
- writer.Append("invalid_token");
+ writer.AppendSmall("invalid_token");
break;
case ErrorType.UnsupportedResponseType:
- writer.Append("unsupported_response_type");
+ writer.AppendSmall("unsupported_response_type");
break;
case ErrorType.InvalidScope:
- writer.Append("invalid_scope");
+ writer.AppendSmall("invalid_scope");
break;
case ErrorType.ServerError:
- writer.Append("server_error");
+ writer.AppendSmall("server_error");
break;
case ErrorType.TemporarilyUnavailable:
- writer.Append("temporarily_unavailable");
+ writer.AppendSmall("temporarily_unavailable");
break;
default:
- writer.Append("error");
+ writer.AppendSmall("error");
break;
}
- writer.Append("\",\"error_description\":\"");
+ writer.AppendSmall("\",\"error_description\":\"");
writer.Append(description);
- writer.Append("\"}");
+ writer.AppendSmall("\"}");
//Close the response with the json data
ev.CloseResponse(code, ContentType.Json, writer.AsSpan());
diff --git a/lib/Plugins.Essentials/src/VNLib.Plugins.Essentials.csproj b/lib/Plugins.Essentials/src/VNLib.Plugins.Essentials.csproj
index 4da640a..3a21ac9 100644
--- a/lib/Plugins.Essentials/src/VNLib.Plugins.Essentials.csproj
+++ b/lib/Plugins.Essentials/src/VNLib.Plugins.Essentials.csproj
@@ -2,13 +2,15 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Plugins.Essentials</RootNamespace>
<AssemblyName>VNLib.Plugins.Essentials</AssemblyName>
- <AnalysisLevel>latest-all</AnalysisLevel>
- <EnableNETAnalyzers>True</EnableNETAnalyzers>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
- <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+ <PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
</PropertyGroup>
<PropertyGroup>
diff --git a/lib/Plugins.PluginBase/src/VNLib.Plugins.PluginBase.csproj b/lib/Plugins.PluginBase/src/VNLib.Plugins.PluginBase.csproj
index 7be9124..57701b8 100644
--- a/lib/Plugins.PluginBase/src/VNLib.Plugins.PluginBase.csproj
+++ b/lib/Plugins.PluginBase/src/VNLib.Plugins.PluginBase.csproj
@@ -2,12 +2,16 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Plugins</RootNamespace>
<AssemblyName>VNLib.Plugins.PluginBase</AssemblyName>
- <AnalysisLevel>latest-all</AnalysisLevel>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
</PropertyGroup>
+
+ <PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
<PropertyGroup>
<Authors>Vaughn Nugent</Authors>
diff --git a/lib/Plugins.Runtime/src/VNLib.Plugins.Runtime.csproj b/lib/Plugins.Runtime/src/VNLib.Plugins.Runtime.csproj
index f95a95f..002716f 100644
--- a/lib/Plugins.Runtime/src/VNLib.Plugins.Runtime.csproj
+++ b/lib/Plugins.Runtime/src/VNLib.Plugins.Runtime.csproj
@@ -1,16 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <Nullable>enable</Nullable>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Plugins.Runtime</RootNamespace>
<AssemblyName>VNLib.Plugins.Runtime</AssemblyName>
- <AnalysisLevel>latest-all</AnalysisLevel>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<Authors>Vaughn Nugent</Authors>
<Company>Vaughn Nugent</Company>
<PackageId>VNLib.Plugins.Runtime</PackageId>
diff --git a/lib/Plugins/src/VNLib.Plugins.csproj b/lib/Plugins/src/VNLib.Plugins.csproj
index 21fb203..343d86f 100644
--- a/lib/Plugins/src/VNLib.Plugins.csproj
+++ b/lib/Plugins/src/VNLib.Plugins.csproj
@@ -2,15 +2,18 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Plugins</RootNamespace>
<AssemblyName>VNLib.Plugins</AssemblyName>
- <Nullable>enable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
- <AnalysisLevel>latest-all</AnalysisLevel>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<Authors>Vaughn Nugent</Authors>
<Company>Vaughn Nugent</Company>
<PackageId>VNLib.Plugins</PackageId>
diff --git a/lib/Utils.Memory/vnlib_mimalloc/CMakeLists.txt b/lib/Utils.Memory/vnlib_mimalloc/CMakeLists.txt
index 4a2a946..f2324a0 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/CMakeLists.txt
+++ b/lib/Utils.Memory/vnlib_mimalloc/CMakeLists.txt
@@ -1,18 +1,17 @@
cmake_minimum_required(VERSION 3.10)
project(vnlib_mimalloc C)
-set(CMAKE_PROJECT_NAME "vnlib_mimalloc")
+set(_MI_PROJ_NAME "vnlib_mimalloc")
option(ENABLE_GREEDY "Enable greedy allocator configuration" ON)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The build configuration type")
+string(TOLOWER ${CMAKE_BUILD_TYPE} build_type)
+message(STATUS "Build type is '${build_type}'")
+
#Setup the compiler options
set(CMAKE_C_STANDARD 11) #c11 is required for mimalloc static assertions
set(CMAKE_C_STANDARD_REQUIRED ON)
-set(CMAKE_POSITION_INDEPENDENT_CODE ON) #enable position independent code (for shared libraries with exports)
-
-string(TOLOWER ${CMAKE_BUILD_TYPE} build_type)
-message(STATUS "Build type is '${build_type}'")
#export header files to the main project
file(GLOB HEADERS *.h)
@@ -21,25 +20,31 @@ file(GLOB HEADERS *.h)
file(GLOB VNLIB_MIMALLOC_SOURCES *.c)
#create my shared library
-add_library(${CMAKE_PROJECT_NAME} SHARED ${VNLIB_MIMALLOC_SOURCES} ${HEADERS})
-add_library(${CMAKE_PROJECT_NAME}_static STATIC ${VNLIB_MIMALLOC_SOURCES} ${HEADERS})
+add_library(${_MI_PROJ_NAME} SHARED ${VNLIB_MIMALLOC_SOURCES} ${HEADERS})
+add_library(${_MI_PROJ_NAME}_static STATIC ${VNLIB_MIMALLOC_SOURCES} ${HEADERS})
+#enable fPIC for shared library
+set_target_properties(${_MI_PROJ_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
#if on unix lib will be appended, so we can adjust
if(UNIX)
- set_target_properties(${CMAKE_PROJECT_NAME} ${CMAKE_PROJECT_NAME}_static PROPERTIES OUTPUT_NAME vn_mimalloc)
+ set_target_properties(
+ ${_MI_PROJ_NAME}
+ ${_MI_PROJ_NAME}_static
+
+ PROPERTIES
+ OUTPUT_NAME
+ vn_mimalloc
+ )
endif()
+set(_MI_COMP_ARGS)
+set(_MI_COMP_DEFS)
+
#setup flags for windows compilation
if(MSVC)
- #if debug
- target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:DEBUG>)
-
#only target our project
- target_compile_options(
- ${CMAKE_PROJECT_NAME}
- PRIVATE
-
+ list(APPEND _MI_COMP_ARGS
/Qspectre
/sdl
/TC
@@ -62,10 +67,7 @@ if(MSVC)
)
#set build macros
- target_compile_definitions(
- ${CMAKE_PROJECT_NAME}
- PRIVATE
-
+ list(APPEND _MI_COMP_DEFS
$<$<CONFIG:DEBUG>:DEBUG>
$<$<CONFIG:RELEASE>:RELEASE>
)
@@ -73,20 +75,14 @@ if(MSVC)
#configure gcc flags
elseif(CMAKE_COMPILER_IS_GNUCC)
- target_compile_options(
- ${CMAKE_PROJECT_NAME}
- PRIVATE
-
+ list(APPEND _MI_COMP_ARGS
-Wextra
-fstack-protector
)
#enable debug compiler options
if(build_type STREQUAL "debug")
- target_compile_options(
- ${CMAKE_PROJECT_NAME}
- PRIVATE
-
+ list(APPEND _MI_COMP_ARGS
-g #enable debugger info
-Og #disable optimizations
-Wall #enable all warnings
@@ -94,7 +90,9 @@ elseif(CMAKE_COMPILER_IS_GNUCC)
-pedantic #enable pedantic mode
)
- target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE DEBUG)
+ list(APPEND _MI_COMP_DEFS
+ DEBUG
+ )
endif()
@@ -102,6 +100,13 @@ else()
message(FATAL_ERROR "Unsupported compiler, sorry. Submit an issue for your platform and I'll work on it :)")
endif()
+#add the definitions to the project
+target_compile_definitions(${_MI_PROJ_NAME} PRIVATE ${_MI_COMP_DEFS})
+target_compile_definitions(${_MI_PROJ_NAME}_static PRIVATE ${_MI_COMP_DEFS})
+
+#add the compiler flags to the project
+target_compile_options(${_MI_PROJ_NAME} PRIVATE ${_MI_COMP_ARGS})
+target_compile_options(${_MI_PROJ_NAME}_static PRIVATE ${_MI_COMP_ARGS})
#include mimalloc headers
include_directories(vendor/include)
@@ -115,6 +120,9 @@ include_directories(vendor/include)
set(MI_BUILD_TESTS OFF)
set(MI_BUILD_STATIC ON)
set(MI_BUILD_SHARED OFF)
+set(MI_BUILD_OBJECT OFF)
+set(MI_BUILD_TESTS OFF)
+set(MI_XMALLOC OFF) #Do not allow process abort when alloc fails, we don't need it
set(MI_OVERRIDE OFF)
set(MI_WIN_REDIRECT OFF)
@@ -123,5 +131,6 @@ add_subdirectory(
${CMAKE_CURRENT_BINARY_DIR}/mimalloc
)
-target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE mimalloc-static)
-target_link_libraries(${CMAKE_PROJECT_NAME}_static PRIVATE mimalloc-static)
+target_link_libraries(${_MI_PROJ_NAME} PRIVATE mimalloc-static)
+target_link_libraries(${_MI_PROJ_NAME}_static PRIVATE mimalloc-static)
+
diff --git a/lib/Utils.Memory/vnlib_mimalloc/Taskfile.yaml b/lib/Utils.Memory/vnlib_mimalloc/Taskfile.yaml
index acf8851..2d816e3 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/Taskfile.yaml
+++ b/lib/Utils.Memory/vnlib_mimalloc/Taskfile.yaml
@@ -18,7 +18,7 @@ tasks:
desc: "Builds the entire project from source code without using the VNBuild build system for target machines"
cmds:
#init cmake build with greedy enabled
- - cmake -Bbuild/ -DCMAKE_BUILD_TYPE=Release -DENABLE_GREEDY=1 {{.CMAKE_ARGS}}
+ - cmake -Bbuild/ -DCMAKE_BUILD_TYPE=Release -DENABLE_GREEDY=1 {{.CLI_ARGS}}
- cmake --build build/ --config Release
- cmd: echo "Your vnlib_mimalloc library file can be found in '{{.USER_WORKING_DIR}}/build'"
silent: true
@@ -26,7 +26,7 @@ tasks:
build:
cmds:
#build our library
- - cmake -B./build -DENABLE_GREEDY=1 {{.CMAKE_ARGS}}
+ - cmake -B./build -DENABLE_GREEDY=1 {{.CLI_ARGS}}
- cmake --build build/ --config Debug
- cmake --build build/ --config Release
@@ -72,7 +72,7 @@ tasks:
dir: '{{.USER_WORKING_DIR}}'
cmds:
#pack mimalloc source code and create the archive
- - powershell -Command "tar --exclude build/* --exclude bin/* --exclude vendor/docs/ --exclude vendor/doc/ --exclude vendor/test/ --exclude vendor/ide/ --exclude vendor/out/ -czf 'bin/src.tgz' ."
+ - powershell -Command "tar --exclude build/* --exclude bin/* --exclude vendor/test/ --exclude vendor/out/ -czf 'bin/src.tgz' ."
clean:
ignore_error: true
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/.gitattributes b/lib/Utils.Memory/vnlib_mimalloc/vendor/.gitattributes
index 0332e03..f083b10 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/.gitattributes
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/.gitattributes
@@ -10,3 +10,4 @@
*.dll binary
*.lib binary
*.exe binary
+bin export-ignore
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/CMakeLists.txt b/lib/Utils.Memory/vnlib_mimalloc/vendor/CMakeLists.txt
index 2bcd1ef..2cc2fc4 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/CMakeLists.txt
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/CMakeLists.txt
@@ -19,6 +19,7 @@ option(MI_OSX_INTERPOSE "Use interpose to override standard malloc on macOS"
option(MI_OSX_ZONE "Use malloc zone to override standard malloc on macOS" ON)
option(MI_WIN_REDIRECT "Use redirection module ('mimalloc-redirect') on Windows if compiling mimalloc as a DLL" ON)
option(MI_LOCAL_DYNAMIC_TLS "Use slightly slower, dlopen-compatible TLS mechanism (Unix)" OFF)
+option(MI_LIBC_MUSL "Set this when linking with musl libc" OFF)
option(MI_BUILD_SHARED "Build shared library" ON)
option(MI_BUILD_STATIC "Build static library" ON)
option(MI_BUILD_OBJECT "Build object library" ON)
@@ -27,10 +28,11 @@ option(MI_DEBUG_TSAN "Build with thread sanitizer (needs clang)" OFF)
option(MI_DEBUG_UBSAN "Build with undefined-behavior sanitizer (needs clang++)" OFF)
option(MI_SKIP_COLLECT_ON_EXIT "Skip collecting memory on program exit" OFF)
option(MI_NO_PADDING "Force no use of padding even in DEBUG mode etc." OFF)
+option(MI_INSTALL_TOPLEVEL "Install directly into $CMAKE_INSTALL_PREFIX instead of PREFIX/lib/mimalloc-version" OFF)
+option(MI_NO_THP "Disable transparent huge pages support on Linux/Android for the mimalloc process only" OFF)
# deprecated options
option(MI_CHECK_FULL "Use full internal invariant checking in DEBUG mode (deprecated, use MI_DEBUG_FULL instead)" OFF)
-option(MI_INSTALL_TOPLEVEL "Install directly into $CMAKE_INSTALL_PREFIX instead of PREFIX/lib/mimalloc-version (deprecated)" OFF)
option(MI_USE_LIBATOMIC "Explicitly link with -latomic (on older systems) (deprecated and detected automatically)" OFF)
include(CheckIncludeFiles)
@@ -45,6 +47,7 @@ set(mi_sources
src/bitmap.c
src/heap.c
src/init.c
+ src/libc.c
src/options.c
src/os.c
src/page.c
@@ -55,6 +58,9 @@ set(mi_sources
src/prim/prim.c)
set(mi_cflags "")
+set(mi_cflags_static "") # extra flags for a static library build
+set(mi_cflags_dynamic "") # extra flags for a shared-object library build
+set(mi_defines "")
set(mi_libraries "")
# -----------------------------------------------------------------------------
@@ -82,6 +88,17 @@ endif()
# Process options
# -----------------------------------------------------------------------------
+# put -Wall early so other warnings can be disabled selectively
+if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang")
+ list(APPEND mi_cflags -Wall -Wextra -Wpedantic)
+endif()
+if(CMAKE_C_COMPILER_ID MATCHES "GNU")
+ list(APPEND mi_cflags -Wall -Wextra)
+endif()
+if(CMAKE_C_COMPILER_ID MATCHES "Intel")
+ list(APPEND mi_cflags -Wall)
+endif()
+
if(CMAKE_C_COMPILER_ID MATCHES "MSVC|Intel")
set(MI_USE_CXX "ON")
endif()
@@ -127,7 +144,7 @@ endif()
if(MI_SECURE)
message(STATUS "Set full secure build (MI_SECURE=ON)")
- list(APPEND mi_defines MI_SECURE=4)
+ list(APPEND mi_defines MI_SECURE=4)
endif()
if(MI_TRACK_VALGRIND)
@@ -184,6 +201,10 @@ endif()
if(MI_SEE_ASM)
message(STATUS "Generate assembly listings (MI_SEE_ASM=ON)")
list(APPEND mi_cflags -save-temps)
+ if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang")
+ message(STATUS "No GNU Line marker")
+ list(APPEND mi_cflags -Wno-gnu-line-marker)
+ endif()
endif()
if(MI_CHECK_FULL)
@@ -246,7 +267,7 @@ if(MI_DEBUG_UBSAN)
message(WARNING "Can only use undefined-behavior sanitizer with clang++ (MI_DEBUG_UBSAN=ON but ignored)")
endif()
else()
- message(WARNING "Can only use thread sanitizer with a debug build (CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})")
+ message(WARNING "Can only use undefined-behavior sanitizer with a debug build (CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})")
endif()
endif()
@@ -262,31 +283,51 @@ if(MI_USE_CXX)
endif()
endif()
-if(CMAKE_SYSTEM_NAME MATCHES "Haiku")
- SET(CMAKE_INSTALL_LIBDIR ~/config/non-packaged/lib)
- SET(CMAKE_INSTALL_INCLUDEDIR ~/config/non-packaged/headers)
- endif()
+if(CMAKE_SYSTEM_NAME MATCHES "Linux|Android")
+ if(MI_NO_THP)
+ message(STATUS "Disable transparent huge pages support (MI_NO_THP=ON)")
+ list(APPEND mi_defines MI_NO_THP=1)
+ endif()
+endif()
+
+if(MI_LIBC_MUSL)
+ message(STATUS "Assume using musl libc (MI_LIBC_MUSL=ON)")
+ list(APPEND mi_defines MI_LIBC_MUSL=1)
+endif()
+
+# On Haiku use `-DCMAKE_INSTALL_PREFIX` instead, issue #788
+# if(CMAKE_SYSTEM_NAME MATCHES "Haiku")
+# SET(CMAKE_INSTALL_LIBDIR ~/config/non-packaged/lib)
+# SET(CMAKE_INSTALL_INCLUDEDIR ~/config/non-packaged/headers)
+# endif()
# Compiler flags
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU")
- list(APPEND mi_cflags -Wall -Wextra -Wno-unknown-pragmas -fvisibility=hidden)
+ list(APPEND mi_cflags -Wno-unknown-pragmas -fvisibility=hidden)
if(NOT MI_USE_CXX)
list(APPEND mi_cflags -Wstrict-prototypes)
endif()
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang")
- list(APPEND mi_cflags -Wpedantic -Wno-static-in-inline)
+ list(APPEND mi_cflags -Wno-static-in-inline)
endif()
endif()
if(CMAKE_C_COMPILER_ID MATCHES "Intel")
- list(APPEND mi_cflags -Wall -fvisibility=hidden)
+ list(APPEND mi_cflags -fvisibility=hidden)
endif()
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU|Intel" AND NOT CMAKE_SYSTEM_NAME MATCHES "Haiku")
if(MI_LOCAL_DYNAMIC_TLS)
list(APPEND mi_cflags -ftls-model=local-dynamic)
else()
- list(APPEND mi_cflags -ftls-model=initial-exec)
+ if(MI_LIBC_MUSL)
+ # with musl we use local-dynamic for the static build, see issue #644
+ list(APPEND mi_cflags_static -ftls-model=local-dynamic)
+ list(APPEND mi_cflags_dynamic -ftls-model=initial-exec)
+ message(STATUS "Use local dynamic TLS for the static build (since MI_LIBC_MUSL=ON)")
+ else()
+ list(APPEND mi_cflags -ftls-model=initial-exec)
+ endif()
endif()
if(MI_OVERRIDE)
list(APPEND mi_cflags -fno-builtin-malloc)
@@ -394,7 +435,7 @@ if(MI_BUILD_SHARED)
add_library(mimalloc SHARED ${mi_sources})
set_target_properties(mimalloc PROPERTIES VERSION ${mi_version} SOVERSION ${mi_version_major} OUTPUT_NAME ${mi_basename} )
target_compile_definitions(mimalloc PRIVATE ${mi_defines} MI_SHARED_LIB MI_SHARED_LIB_EXPORT)
- target_compile_options(mimalloc PRIVATE ${mi_cflags})
+ target_compile_options(mimalloc PRIVATE ${mi_cflags} ${mi_cflags_dynamic})
target_link_libraries(mimalloc PRIVATE ${mi_libraries})
target_include_directories(mimalloc PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
@@ -424,7 +465,7 @@ if (MI_BUILD_STATIC)
add_library(mimalloc-static STATIC ${mi_sources})
set_property(TARGET mimalloc-static PROPERTY POSITION_INDEPENDENT_CODE ON)
target_compile_definitions(mimalloc-static PRIVATE ${mi_defines} MI_STATIC_LIB)
- target_compile_options(mimalloc-static PRIVATE ${mi_cflags})
+ target_compile_options(mimalloc-static PRIVATE ${mi_cflags} ${mi_cflags_static})
target_link_libraries(mimalloc-static PRIVATE ${mi_libraries})
target_include_directories(mimalloc-static PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
@@ -456,7 +497,7 @@ if (MI_BUILD_OBJECT)
add_library(mimalloc-obj OBJECT src/static.c)
set_property(TARGET mimalloc-obj PROPERTY POSITION_INDEPENDENT_CODE ON)
target_compile_definitions(mimalloc-obj PRIVATE ${mi_defines})
- target_compile_options(mimalloc-obj PRIVATE ${mi_cflags})
+ target_compile_options(mimalloc-obj PRIVATE ${mi_cflags} ${mi_cflags_static})
target_include_directories(mimalloc-obj PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${mi_install_incdir}>
@@ -467,7 +508,7 @@ if (MI_BUILD_OBJECT)
set(mimalloc-obj-static "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/mimalloc-obj.dir/src/static.c${CMAKE_C_OUTPUT_EXTENSION}")
set(mimalloc-obj-out "${CMAKE_CURRENT_BINARY_DIR}/${mi_basename}${CMAKE_C_OUTPUT_EXTENSION}")
add_custom_command(OUTPUT ${mimalloc-obj-out} DEPENDS mimalloc-obj COMMAND "${CMAKE_COMMAND}" -E copy "${mimalloc-obj-static}" "${mimalloc-obj-out}")
- add_custom_target(mimalloc-obj-target ALL DEPENDS ${mimalloc-obj-out})
+ add_custom_target(mimalloc-obj-target ALL DEPENDS ${mimalloc-obj-out})
endif()
# the following seems to lead to cmake warnings/errors on some systems, disable for now :-(
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/SECURITY.md b/lib/Utils.Memory/vnlib_mimalloc/vendor/SECURITY.md
index e138ec5..b3c89ef 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/SECURITY.md
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/SECURITY.md
@@ -1,20 +1,20 @@
-<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->
+<!-- BEGIN MICROSOFT SECURITY.MD V0.0.9 BLOCK -->
## Security
-Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
+Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin).
-If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
+If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below.
## Reporting Security Issues
**Please do not report security vulnerabilities through public GitHub issues.**
-Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
+Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report).
-If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
+If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp).
-You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
+You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
@@ -28,7 +28,7 @@ Please include the requested information listed below (as much as you can provid
This information will help us triage your report more quickly.
-If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
+If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs.
## Preferred Languages
@@ -36,6 +36,6 @@ We prefer all communications to be in English.
## Policy
-Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
+Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd).
<!-- END MICROSOFT SECURITY.MD BLOCK -->
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/cmake/mimalloc-config-version.cmake b/lib/Utils.Memory/vnlib_mimalloc/vendor/cmake/mimalloc-config-version.cmake
index a44c121..9b19b56 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/cmake/mimalloc-config-version.cmake
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/cmake/mimalloc-config-version.cmake
@@ -1,6 +1,6 @@
set(mi_version_major 2)
set(mi_version_minor 1)
-set(mi_version_patch 2)
+set(mi_version_patch 6)
set(mi_version ${mi_version_major}.${mi_version_minor})
set(PACKAGE_VERSION ${mi_version})
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-a.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-a.svg
deleted file mode 100644
index 9005097..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-a.svg
+++ /dev/null
@@ -1,887 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='167.731pt' version='1.1' viewBox='52.938 54.996 381.624 167.731' width='381.624pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip1'>
-<path d='M82.148 206.586H434.164V81.34H82.148Z'/>
-</clipPath>
-<use id='g3-40' transform='scale(1.143)' xlink:href='#g0-40'/>
-<use id='g3-41' transform='scale(1.143)' xlink:href='#g0-41'/>
-<use id='g3-78' transform='scale(1.143)' xlink:href='#g0-78'/>
-<use id='g3-97' transform='scale(1.143)' xlink:href='#g0-97'/>
-<use id='g3-98' transform='scale(1.143)' xlink:href='#g0-98'/>
-<use id='g3-99' transform='scale(1.143)' xlink:href='#g0-99'/>
-<use id='g3-100' transform='scale(1.143)' xlink:href='#g0-100'/>
-<use id='g3-101' transform='scale(1.143)' xlink:href='#g0-101'/>
-<use id='g3-102' transform='scale(1.143)' xlink:href='#g0-102'/>
-<use id='g3-105' transform='scale(1.143)' xlink:href='#g0-105'/>
-<use id='g3-108' transform='scale(1.143)' xlink:href='#g0-108'/>
-<use id='g3-109' transform='scale(1.143)' xlink:href='#g0-109'/>
-<use id='g3-110' transform='scale(1.143)' xlink:href='#g0-110'/>
-<use id='g3-111' transform='scale(1.143)' xlink:href='#g0-111'/>
-<use id='g3-112' transform='scale(1.143)' xlink:href='#g0-112'/>
-<use id='g3-114' transform='scale(1.143)' xlink:href='#g0-114'/>
-<use id='g3-115' transform='scale(1.143)' xlink:href='#g0-115'/>
-<use id='g3-116' transform='scale(1.143)' xlink:href='#g0-116'/>
-<use id='g3-119' transform='scale(1.143)' xlink:href='#g0-119'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g1-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g1-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g1-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g1-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g1-108'/>
-<path d='M6.581 -2.663C6.581 -3.327 6.402 -4.08 5.317 -4.08C4.564 -4.08 4.142 -3.622 3.927 -3.344C3.865 -3.524 3.676 -4.08 2.762 -4.08C2.053 -4.08 1.623 -3.667 1.417 -3.398V-4.035H0.726V0H1.47V-2.188C1.47 -2.78 1.704 -3.497 2.385 -3.497C3.282 -3.497 3.282 -2.86 3.282 -2.6V0H4.026V-2.188C4.026 -2.78 4.259 -3.497 4.94 -3.497C5.837 -3.497 5.837 -2.86 5.837 -2.6V0H6.581V-2.663Z' id='g1-109'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g1-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g1-118'/>
-<use id='g2-46' transform='scale(0.714)' xlink:href='#g0-46'/>
-<use id='g2-48' transform='scale(0.714)' xlink:href='#g0-48'/>
-<use id='g2-49' transform='scale(0.714)' xlink:href='#g0-49'/>
-<use id='g2-50' transform='scale(0.714)' xlink:href='#g0-50'/>
-<use id='g2-51' transform='scale(0.714)' xlink:href='#g0-51'/>
-<use id='g2-52' transform='scale(0.714)' xlink:href='#g0-52'/>
-<use id='g2-53' transform='scale(0.714)' xlink:href='#g0-53'/>
-<use id='g2-54' transform='scale(0.714)' xlink:href='#g0-54'/>
-<use id='g2-55' transform='scale(0.714)' xlink:href='#g0-55'/>
-<use id='g2-56' transform='scale(0.714)' xlink:href='#g0-56'/>
-<use id='g2-57' transform='scale(0.714)' xlink:href='#g0-57'/>
-<use id='g2-120' transform='scale(0.714)' xlink:href='#g0-120'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g4-1'/>
-<path d='M2.127 -5.23C2.008 -5.23 1.995 -5.23 1.911 -5.154C1.032 -4.387 0.586 -3.145 0.586 -1.743C0.586 -0.425 0.983 0.844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 0.063C1.276 -0.481 1.193 -1.053 1.193 -1.743C1.193 -4.156 2.322 -5.112 2.462 -5.23H2.127Z' id='g0-40'/>
-<path d='M0.746 1.743C0.865 1.743 0.879 1.743 0.962 1.667C1.841 0.9 2.287 -0.342 2.287 -1.743C2.287 -3.062 1.89 -4.331 0.969 -5.14C0.879 -5.23 0.865 -5.23 0.746 -5.23H0.411C0.432 -5.216 1.109 -4.638 1.43 -3.55C1.597 -3.006 1.681 -2.434 1.681 -1.743C1.681 0.669 0.551 1.625 0.411 1.743H0.746Z' id='g0-41'/>
-<path d='M1.339 -0.628H0.711V0H1.339V-0.628Z' id='g0-46'/>
-<path d='M3.403 -2.267C3.403 -2.601 3.403 -3.417 3.075 -3.989C2.72 -4.617 2.183 -4.721 1.848 -4.721C1.534 -4.721 0.99 -4.624 0.642 -4.024C0.307 -3.466 0.293 -2.706 0.293 -2.267C0.293 -1.75 0.321 -1.116 0.614 -0.586C0.921 -0.021 1.437 0.146 1.848 0.146C2.545 0.146 2.929 -0.258 3.138 -0.697C3.382 -1.193 3.403 -1.834 3.403 -2.267ZM1.848 -0.314C1.555 -0.314 1.22 -0.481 1.046 -0.983C0.907 -1.409 0.9 -1.848 0.9 -2.357C0.9 -2.999 0.9 -4.261 1.848 -4.261S2.797 -2.999 2.797 -2.357C2.797 -1.897 2.797 -1.374 2.629 -0.928C2.434 -0.425 2.078 -0.314 1.848 -0.314Z' id='g0-48'/>
-<path d='M2.239 -4.721H2.085C1.632 -4.303 1.06 -4.275 0.642 -4.261V-3.822C0.914 -3.829 1.262 -3.843 1.611 -3.982V-0.439H0.683V0H3.166V-0.439H2.239V-4.721Z' id='g0-49'/>
-<path d='M1.974 -0.537C1.89 -0.537 1.806 -0.53 1.723 -0.53H0.928L2.008 -1.485C2.134 -1.597 2.476 -1.855 2.608 -1.967C2.915 -2.246 3.327 -2.608 3.327 -3.215C3.327 -4.003 2.741 -4.721 1.743 -4.721C1.004 -4.721 0.544 -4.324 0.307 -3.612L0.635 -3.201C0.795 -3.787 1.039 -4.24 1.646 -4.24C2.232 -4.24 2.678 -3.829 2.678 -3.201C2.678 -2.622 2.336 -2.294 1.918 -1.897C1.778 -1.757 1.402 -1.444 1.255 -1.304C1.053 -1.123 0.572 -0.656 0.37 -0.481V0H3.327V-0.537H1.974Z' id='g0-50'/>
-<path d='M0.697 -3.578C0.983 -4.135 1.485 -4.289 1.82 -4.289C2.232 -4.289 2.538 -4.052 2.538 -3.654C2.538 -3.285 2.287 -2.831 1.757 -2.741C1.723 -2.734 1.695 -2.734 1.234 -2.699V-2.239H1.778C2.441 -2.239 2.685 -1.716 2.685 -1.276C2.685 -0.732 2.35 -0.314 1.806 -0.314C1.311 -0.314 0.746 -0.551 0.398 -0.997L0.307 -0.544C0.711 -0.091 1.276 0.146 1.82 0.146C2.734 0.146 3.389 -0.537 3.389 -1.269C3.389 -1.841 2.929 -2.301 2.378 -2.462C2.908 -2.734 3.18 -3.201 3.18 -3.654C3.18 -4.247 2.573 -4.721 1.827 -4.721C1.213 -4.721 0.704 -4.4 0.411 -3.982L0.697 -3.578Z' id='g0-51'/>
-<path d='M2.762 -1.165H3.487V-1.625H2.762V-4.575H2.071L0.209 -1.625V-1.165H2.162V0H2.762V-1.165ZM0.802 -1.625C1.011 -1.953 2.211 -3.815 2.211 -4.233V-1.625H0.802Z' id='g0-52'/>
-<path d='M1.144 -4.094H3.075V-4.575H0.586V-1.967H1.095C1.262 -2.343 1.59 -2.511 1.904 -2.511C2.19 -2.511 2.622 -2.315 2.622 -1.43C2.622 -0.516 2.043 -0.314 1.688 -0.314C1.227 -0.314 0.781 -0.558 0.544 -0.955L0.279 -0.537C0.621 -0.112 1.137 0.146 1.688 0.146C2.608 0.146 3.327 -0.565 3.327 -1.416C3.327 -2.28 2.685 -2.971 1.918 -2.971C1.618 -2.971 1.353 -2.866 1.144 -2.692V-4.094Z' id='g0-53'/>
-<path d='M3.062 -4.582C2.685 -4.721 2.42 -4.721 2.287 -4.721C1.227 -4.721 0.307 -3.724 0.307 -2.253C0.307 -0.363 1.158 0.146 1.862 0.146C2.427 0.146 2.72 -0.119 2.936 -0.342C3.382 -0.816 3.389 -1.311 3.389 -1.555C3.389 -2.469 2.894 -3.229 2.218 -3.229C1.534 -3.229 1.165 -2.873 0.962 -2.671C1.053 -3.626 1.541 -4.289 2.294 -4.289C2.434 -4.289 2.713 -4.275 3.062 -4.142V-4.582ZM0.969 -1.534C0.969 -1.576 0.969 -1.681 0.976 -1.716C0.976 -2.19 1.276 -2.769 1.897 -2.769C2.748 -2.769 2.748 -1.792 2.748 -1.555C2.748 -1.29 2.748 -0.997 2.559 -0.704C2.392 -0.453 2.183 -0.314 1.862 -0.314C1.123 -0.314 1.004 -1.227 0.969 -1.534Z' id='g0-54'/>
-<path d='M1.723 -4.038C1.806 -4.038 1.89 -4.045 1.974 -4.045H2.852C1.792 -3.006 1.116 -1.548 1.116 0.07H1.771C1.771 -1.967 2.762 -3.431 3.389 -4.087V-4.575H0.307V-4.038H1.723Z' id='g0-55'/>
-<path d='M2.385 -2.469C2.845 -2.615 3.285 -2.985 3.285 -3.501C3.285 -4.135 2.678 -4.721 1.848 -4.721S0.411 -4.135 0.411 -3.501C0.411 -2.978 0.865 -2.608 1.311 -2.469C0.697 -2.28 0.307 -1.806 0.307 -1.269C0.307 -0.523 0.969 0.146 1.848 0.146S3.389 -0.523 3.389 -1.269C3.389 -1.806 2.992 -2.28 2.385 -2.469ZM1.848 -2.699C1.353 -2.699 0.948 -2.985 0.948 -3.494C0.948 -3.94 1.262 -4.289 1.848 -4.289C2.427 -4.289 2.748 -3.94 2.748 -3.494C2.748 -2.999 2.357 -2.699 1.848 -2.699ZM1.848 -0.314C1.367 -0.314 0.941 -0.621 0.941 -1.276C0.941 -1.904 1.346 -2.239 1.848 -2.239S2.755 -1.897 2.755 -1.276C2.755 -0.621 2.322 -0.314 1.848 -0.314Z' id='g0-56'/>
-<path d='M0.537 -0.174C0.879 0.077 1.193 0.146 1.52 0.146C2.497 0.146 3.389 -0.837 3.389 -2.336C3.389 -4.24 2.545 -4.721 1.876 -4.721C1.255 -4.721 0.969 -4.428 0.767 -4.226C0.321 -3.773 0.307 -3.292 0.307 -3.02C0.307 -2.12 0.795 -1.346 1.478 -1.346C2.267 -1.346 2.699 -1.869 2.734 -1.911C2.636 -0.802 2.092 -0.314 1.52 -0.314C1.158 -0.314 0.934 -0.446 0.774 -0.579L0.537 -0.174ZM2.713 -3.027C2.72 -2.985 2.72 -2.915 2.72 -2.873C2.72 -2.357 2.406 -1.806 1.799 -1.806C1.534 -1.806 1.325 -1.883 1.144 -2.169C0.962 -2.441 0.948 -2.706 0.948 -3.02C0.948 -3.292 0.948 -3.605 1.165 -3.912C1.311 -4.122 1.52 -4.289 1.869 -4.289C2.545 -4.289 2.692 -3.473 2.713 -3.027Z' id='g0-57'/>
-<path d='M1.646 -4.84H0.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-0.551H3.933L1.646 -4.84Z' id='g0-78'/>
-<path d='M2.971 -2.008C2.971 -2.72 2.427 -3.201 1.736 -3.201C1.297 -3.201 0.962 -3.11 0.572 -2.901L0.614 -2.392C0.844 -2.545 1.186 -2.755 1.736 -2.755C2.043 -2.755 2.364 -2.525 2.364 -2.001V-1.723C1.332 -1.688 0.314 -1.471 0.314 -0.823C0.314 -0.474 0.551 0.07 1.165 0.07C1.465 0.07 2.015 0.007 2.385 -0.265V0H2.971V-2.008ZM2.364 -0.99C2.364 -0.851 2.364 -0.669 2.12 -0.523C1.897 -0.398 1.625 -0.391 1.548 -0.391C1.165 -0.391 0.872 -0.565 0.872 -0.83C0.872 -1.276 2.05 -1.318 2.364 -1.332V-0.99Z' id='g0-97'/>
-<path d='M1.179 -4.84H0.593V0H1.2V-0.328C1.353 -0.195 1.688 0.07 2.197 0.07C2.957 0.07 3.571 -0.642 3.571 -1.555C3.571 -2.399 3.089 -3.166 2.392 -3.166C1.953 -3.166 1.527 -3.027 1.179 -2.769V-4.84ZM1.2 -2.197C1.2 -2.308 1.2 -2.392 1.444 -2.552C1.548 -2.615 1.736 -2.706 1.974 -2.706C2.441 -2.706 2.964 -2.392 2.964 -1.555C2.964 -0.704 2.385 -0.391 1.897 -0.391C1.639 -0.391 1.395 -0.509 1.2 -0.823V-2.197Z' id='g0-98'/>
-<path d='M3.034 -0.76C2.685 -0.537 2.308 -0.411 1.876 -0.411C1.234 -0.411 0.858 -0.928 0.858 -1.555C0.858 -2.092 1.137 -2.72 1.897 -2.72C2.371 -2.72 2.594 -2.622 2.95 -2.399L3.041 -2.901C2.622 -3.11 2.441 -3.201 1.897 -3.201C0.851 -3.201 0.251 -2.357 0.251 -1.548C0.251 -0.697 0.921 0.07 1.869 0.07C2.357 0.07 2.776 -0.077 3.075 -0.251L3.034 -0.76Z' id='g0-99'/>
-<path d='M3.229 -4.84H2.643V-2.797C2.197 -3.124 1.743 -3.166 1.541 -3.166C0.809 -3.166 0.251 -2.434 0.251 -1.548S0.802 0.07 1.52 0.07C1.953 0.07 2.357 -0.126 2.622 -0.363V0H3.229V-4.84ZM2.622 -0.865C2.448 -0.579 2.183 -0.391 1.848 -0.391C1.36 -0.391 0.858 -0.732 0.858 -1.541C0.858 -2.413 1.451 -2.706 1.925 -2.706C2.204 -2.706 2.441 -2.587 2.622 -2.35V-0.865Z' id='g0-100'/>
-<path d='M2.999 -0.76C2.608 -0.481 2.169 -0.391 1.869 -0.391C1.262 -0.391 0.802 -0.886 0.781 -1.527H3.068C3.068 -1.848 3.034 -2.315 2.762 -2.713C2.511 -3.068 2.092 -3.201 1.75 -3.201C0.9 -3.201 0.244 -2.455 0.244 -1.569C0.244 -0.676 0.941 0.07 1.862 0.07C2.267 0.07 2.685 -0.049 3.041 -0.265L2.999 -0.76ZM0.83 -1.946C0.99 -2.504 1.402 -2.741 1.75 -2.741C2.057 -2.741 2.511 -2.594 2.643 -1.946H0.83Z' id='g0-101'/>
-<path d='M1.325 -2.657H2.12V-3.096H1.304V-3.898C1.304 -4.38 1.743 -4.449 1.974 -4.449C2.12 -4.449 2.308 -4.428 2.566 -4.331V-4.84C2.385 -4.882 2.169 -4.91 1.981 -4.91C1.262 -4.91 0.739 -4.394 0.739 -3.703V-3.096H0.202V-2.657H0.739V0H1.325V-2.657Z' id='g0-102'/>
-<path d='M1.227 -4.784H0.523V-4.08H1.227V-4.784ZM1.172 -3.096H0.586V0H1.172V-3.096Z' id='g0-105'/>
-<path d='M1.172 -4.84H0.586V0H1.172V-4.84Z' id='g0-108'/>
-<path d='M5.3 -2.064C5.3 -2.608 5.14 -3.166 4.282 -3.166C3.696 -3.166 3.333 -2.824 3.166 -2.601C3.096 -2.79 2.922 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-1.695C3.243 -2.155 3.438 -2.706 3.975 -2.706C4.693 -2.706 4.693 -2.218 4.693 -2.015V0H5.3V-2.064Z' id='g0-109'/>
-<path d='M3.243 -2.064C3.243 -2.608 3.082 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-2.064Z' id='g0-110'/>
-<path d='M3.487 -1.527C3.487 -2.448 2.755 -3.201 1.848 -3.201S0.209 -2.441 0.209 -1.527C0.209 -0.642 0.948 0.07 1.848 0.07C2.755 0.07 3.487 -0.642 3.487 -1.527ZM1.848 -0.411C1.297 -0.411 0.816 -0.816 0.816 -1.604S1.332 -2.741 1.848 -2.741C2.371 -2.741 2.88 -2.378 2.88 -1.604C2.88 -0.809 2.385 -0.411 1.848 -0.411Z' id='g0-111'/>
-<path d='M1.2 -0.328C1.569 0.007 1.967 0.07 2.204 0.07C2.943 0.07 3.571 -0.635 3.571 -1.555C3.571 -2.392 3.11 -3.166 2.42 -3.166C2.106 -3.166 1.583 -3.075 1.179 -2.762V-3.096H0.593V1.353H1.2V-0.328ZM1.2 -2.315C1.36 -2.511 1.632 -2.685 1.967 -2.685C2.525 -2.685 2.964 -2.169 2.964 -1.555C2.964 -0.865 2.441 -0.391 1.897 -0.391C1.792 -0.391 1.618 -0.404 1.437 -0.551C1.227 -0.711 1.2 -0.816 1.2 -0.948V-2.315Z' id='g0-112'/>
-<path d='M1.179 -1.485C1.179 -2.239 1.806 -2.643 2.42 -2.65V-3.166C1.834 -3.159 1.409 -2.873 1.13 -2.504V-3.145H0.593V0H1.179V-1.485Z' id='g0-114'/>
-<path d='M2.545 -2.985C2.071 -3.18 1.723 -3.201 1.471 -3.201C1.297 -3.201 0.244 -3.201 0.244 -2.273C0.244 -1.946 0.425 -1.764 0.516 -1.681C0.76 -1.437 1.053 -1.381 1.423 -1.311C1.75 -1.248 2.127 -1.179 2.127 -0.844C2.127 -0.404 1.548 -0.404 1.451 -0.404C1.004 -0.404 0.586 -0.565 0.307 -0.76L0.209 -0.237C0.446 -0.119 0.872 0.07 1.451 0.07C1.764 0.07 2.071 0.021 2.329 -0.167C2.587 -0.363 2.671 -0.669 2.671 -0.907C2.671 -1.032 2.657 -1.304 2.364 -1.569C2.106 -1.799 1.855 -1.848 1.52 -1.911C1.109 -1.988 0.788 -2.05 0.788 -2.357C0.788 -2.755 1.297 -2.755 1.402 -2.755C1.799 -2.755 2.106 -2.671 2.455 -2.49L2.545 -2.985Z' id='g0-115'/>
-<path d='M1.311 -2.657H2.343V-3.096H1.311V-3.982H0.774V-3.096H0.139V-2.657H0.753V-0.893C0.753 -0.425 0.872 0.07 1.374 0.07S2.26 -0.091 2.469 -0.188L2.35 -0.635C2.12 -0.467 1.876 -0.411 1.681 -0.411C1.388 -0.411 1.311 -0.697 1.311 -1.018V-2.657Z' id='g0-116'/>
-<path d='M4.951 -3.096H4.407C4.345 -2.901 3.954 -1.723 3.738 -0.997C3.682 -0.795 3.612 -0.572 3.592 -0.411H3.585C3.543 -0.697 3.299 -1.451 3.285 -1.499L2.769 -3.096H2.239C2.036 -2.497 1.513 -0.934 1.458 -0.425H1.451C1.395 -0.921 0.879 -2.462 0.767 -2.797C0.711 -2.964 0.711 -2.978 0.676 -3.096H0.105L1.123 0H1.709C1.716 -0.028 1.904 -0.579 2.148 -1.353C2.253 -1.695 2.462 -2.364 2.497 -2.671L2.504 -2.678C2.518 -2.532 2.559 -2.378 2.608 -2.204S2.706 -1.841 2.755 -1.681L3.292 0H3.933L4.951 -3.096Z' id='g0-119'/>
-<path d='M1.932 -1.597L3.285 -3.096H2.671L1.681 -1.953L0.669 -3.096H0.042L1.437 -1.597L0 0H0.621L1.681 -1.311L2.783 0H3.41L1.932 -1.597Z' id='g0-120'/>
-</defs>
-<g id='page1'>
-<path d='M140.82 215.441V206.586M199.488 215.441V206.586M258.156 215.441V206.586M316.824 215.441V206.586M375.496 215.441V206.586M140.82 72.48V81.34M199.488 72.48V81.34M258.156 72.48V81.34M316.824 72.48V81.34M375.496 72.48V81.34' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M111.484 210.836V206.586M170.152 210.836V206.586M228.824 210.836V206.586M287.492 210.836V206.586M346.16 210.836V206.586M404.828 210.836V206.586M111.484 77.086V81.34M170.152 77.086V81.34M228.824 77.086V81.34M287.492 77.086V81.34M346.16 77.086V81.34M404.828 77.086V81.34' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 206.586H86.402M82.148 175.273H86.402M82.148 143.961H86.402M82.148 112.648H86.402M82.148 81.34H86.402M434.164 206.586H429.91M434.164 175.273H429.91M434.164 143.961H429.91M434.164 112.648H429.91M434.164 81.34H429.91' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 206.586V81.34H434.164V206.586H82.148Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -11.54 34.954)'>
-<use x='114.487' xlink:href='#g3-99' y='186.027'/>
-<use x='118.25' xlink:href='#g3-102' y='186.027'/>
-<use x='120.838' xlink:href='#g3-114' y='186.027'/>
-<use x='123.73' xlink:href='#g3-97' y='186.027'/>
-<use x='127.798' xlink:href='#g3-99' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 45.565 34.954)'>
-<use x='114.487' xlink:href='#g3-108' y='186.027'/>
-<use x='116.507' xlink:href='#g3-101' y='186.027'/>
-<use x='120.271' xlink:href='#g3-97' y='186.027'/>
-<use x='124.339' xlink:href='#g3-110' y='186.027'/>
-<use x='128.711' xlink:href='#g3-78' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 106.188 34.954)'>
-<use x='114.487' xlink:href='#g3-114' y='186.027'/>
-<use x='117.379' xlink:href='#g3-101' y='186.027'/>
-<use x='121.142' xlink:href='#g3-100' y='186.027'/>
-<use x='125.515' xlink:href='#g3-105' y='186.027'/>
-<use x='127.535' xlink:href='#g3-115' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 159.716 34.954)'>
-<use x='114.487' xlink:href='#g3-108' y='186.027'/>
-<use x='116.507' xlink:href='#g3-97' y='186.027'/>
-<use x='120.34' xlink:href='#g3-114' y='186.027'/>
-<use x='123.232' xlink:href='#g3-115' y='186.027'/>
-<use x='126.478' xlink:href='#g3-111' y='186.027'/>
-<use x='130.712' xlink:href='#g3-110' y='186.027'/>
-<use x='135.085' xlink:href='#g3-78' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 215.596 34.954)'>
-<use x='114.487' xlink:href='#g3-109' y='186.027'/>
-<use x='121.211' xlink:href='#g3-115' y='186.027'/>
-<use x='124.458' xlink:href='#g3-116' y='186.027'/>
-<use x='127.516' xlink:href='#g3-114' y='186.027'/>
-<use x='130.408' xlink:href='#g3-101' y='186.027'/>
-<use x='134.171' xlink:href='#g3-115' y='186.027'/>
-<use x='137.418' xlink:href='#g3-115' y='186.027'/>
-<use x='140.664' xlink:href='#g3-78' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 277.158 34.954)'>
-<use x='114.487' xlink:href='#g3-114' y='186.027'/>
-<use x='117.379' xlink:href='#g3-112' y='186.027'/>
-<use x='121.751' xlink:href='#g3-116' y='186.027'/>
-<use x='124.809' xlink:href='#g3-101' y='186.027'/>
-<use x='128.573' xlink:href='#g3-115' y='186.027'/>
-<use x='131.819' xlink:href='#g3-116' y='186.027'/>
-<use x='134.877' xlink:href='#g3-78' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 22.192)'>
-<use x='114.487' xlink:href='#g2-48' y='186.027'/>
-<use x='117.133' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -9.12)'>
-<use x='114.487' xlink:href='#g2-48' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-53' y='186.027'/>
-<use x='121.25' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -40.431)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.743)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-53' y='186.027'/>
-<use x='121.25' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -103.054)'>
-<use x='114.487' xlink:href='#g2-50' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-120' y='186.027'/>
-</g>
-<path clip-path='url(#clip1)' d='M82.148 143.961H434.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M88.945 206.586H92.18V143.961H88.945ZM147.613 206.586H150.852V143.961H147.613ZM206.281 206.586H209.52V143.961H206.281ZM264.949 206.586H268.188V143.961H264.949ZM323.621 206.586H326.859V143.961H323.621ZM382.289 206.586H385.527V143.961H382.289Z' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M88.945 206.586H92.18V143.961H88.945ZM147.613 206.586H150.852V143.961H147.613ZM206.281 206.586H209.52V143.961H206.281ZM264.949 206.586H268.188V143.961H264.949ZM323.621 206.586H326.859V143.961H323.621ZM382.289 206.586H385.527V143.961H382.289Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M90.563 143.961V143.898' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M90.563 143.961V143.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M88.57 143.898H92.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M90.563 143.961V144.023' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M90.563 143.961V144.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M92.555 144.024H88.57' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M149.231 143.961V143.523' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M149.231 143.961V143.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M147.238 143.524H151.226' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M149.231 143.961V144.398' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M149.231 143.961V144.398' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M151.223 144.398H147.238' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M207.902 143.961V142.207' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M207.902 143.961V142.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M205.91 142.207H209.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M207.902 143.961V145.715' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M207.902 143.961V145.715' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M209.891 145.715H205.906' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M266.57 143.961V143.336' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M266.57 143.961V143.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M264.578 143.336H268.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M266.57 143.961V144.586' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M266.57 143.961V144.586' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M268.563 144.586H264.578' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M325.238 143.961V143.586' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M325.238 143.961V143.586' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M323.246 143.586H327.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M325.238 143.961V144.336' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M325.238 143.961V144.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M327.231 144.336H323.246' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M383.906 143.961V143.523' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M383.906 143.961V143.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M381.914 143.524H385.902' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M383.906 143.961V144.398' fill='#993333'/>
-<path clip-path='url(#clip1)' d='M383.906 143.961V144.398' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M385.898 144.398H381.914' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M94.176 206.586H97.41V142.519H94.176ZM152.844 206.586H156.082V140.203H152.844ZM211.512 206.586H214.75V148.344H211.512ZM270.18 206.586H273.418V121.418H270.18ZM328.852 206.586H332.09V135.07H328.852ZM387.52 206.586H390.758V81.34H387.52Z' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M94.176 206.586H97.41V142.519H94.176ZM152.844 206.586H156.082V140.203H152.844ZM211.512 206.586H214.75V148.344H211.512ZM270.18 206.586H273.418V121.418H270.18ZM328.852 206.586H332.09V135.07H328.852ZM387.52 206.586H390.758V81.34H387.52Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M95.793 142.519V142.519' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M93.801 142.52H97.785' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M95.793 142.519V142.519' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M93.801 142.52H97.785' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M154.461 140.203V139.203' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M154.461 140.203V139.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M152.469 139.203H156.457' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M154.461 140.203V141.207' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M154.461 140.203V141.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M156.453 141.207H152.468' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M213.133 148.344V148.031' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M213.133 148.344V148.031' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M211.141 148.032H215.125' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M213.133 148.344V148.656' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M213.133 148.344V148.656' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M215.121 148.656H211.136' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M271.801 121.418V121.23' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M271.801 121.418V121.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M269.809 121.23H273.793' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M271.801 121.418V121.605' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M271.801 121.418V121.605' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M273.793 121.606H269.808' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M330.469 135.07V134.254' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M330.469 135.07V134.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M328.477 134.254H332.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M330.469 135.07V135.883' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M330.469 135.07V135.883' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M332.461 135.883H328.476' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M389.137 81.34V81.34' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M387.145 81.34H391.133' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M389.137 81.34V81.34' fill='#8080bf'/>
-<path clip-path='url(#clip1)' d='M387.145 81.34H391.133' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M99.406 206.586H102.641V140.266H99.406ZM158.074 206.586H161.313V142.898H158.074ZM216.742 206.586H219.981V134.754H216.742ZM275.41 206.586H278.649V99.25H275.41ZM334.082 206.586H337.32V81.34H334.082ZM392.75 206.586H395.988V81.34H392.75Z' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M99.406 206.586H102.641V140.266H99.406ZM158.074 206.586H161.313V142.898H158.074ZM216.742 206.586H219.981V134.754H216.742ZM275.41 206.586H278.649V99.25H275.41ZM334.082 206.586H337.32V81.34H334.082ZM392.75 206.586H395.988V81.34H392.75Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M101.024 140.266V140.203' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M101.024 140.266V140.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M99.031 140.203H103.016' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M101.024 140.266V140.328' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M101.024 140.266V140.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M103.016 140.328H99.031' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M159.691 142.898V142.269' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M159.691 142.898V142.269' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M157.699 142.269H161.687' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M159.691 142.898V143.523' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M159.691 142.898V143.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M161.684 143.524H157.699' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M218.363 134.754V134.066' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M218.363 134.754V134.066' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M216.371 134.067H220.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M218.363 134.754V135.445' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M218.363 134.754V135.445' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M220.352 135.445H216.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M277.031 99.25V91.168' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M277.031 99.25V91.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M275.039 91.172H279.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M277.031 99.25V107.328' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M277.031 99.25V107.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M279.024 107.328H275.039' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M335.699 81.34V81.34' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M333.707 81.34H337.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M335.699 81.34V81.34' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M333.707 81.34H337.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M394.367 81.34V81.34' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M392.375 81.34H396.363' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M394.367 81.34V81.34' fill='#ffb733'/>
-<path clip-path='url(#clip1)' d='M392.375 81.34H396.363' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M104.637 206.586H107.871V124.859H104.637ZM163.305 206.586H166.543V141.207H163.305ZM221.973 206.586H225.211V118.035H221.973ZM280.641 206.586H283.879V121.043H280.641ZM339.313 206.586H342.551V133.066H339.313ZM397.981 206.586H401.219V89.039H397.981Z' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M104.637 206.586H107.871V124.859H104.637ZM163.305 206.586H166.543V141.207H163.305ZM221.973 206.586H225.211V118.035H221.973ZM280.641 206.586H283.879V121.043H280.641ZM339.313 206.586H342.551V133.066H339.313ZM397.981 206.586H401.219V89.039H397.981Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M106.254 124.859V124.797' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M106.254 124.859V124.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M104.261 124.796H108.246' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M106.254 124.859V124.922' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M106.254 124.859V124.922' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M108.246 124.922H104.261' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M164.922 141.207V140.894' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M164.922 141.207V140.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M162.929 140.895H166.917' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M164.922 141.207V141.519' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M164.922 141.207V141.519' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M166.914 141.52H162.929' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M223.594 118.035V117.973' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M223.594 118.035V117.973' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M221.601 117.973H225.585' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M223.594 118.035V118.098' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M223.594 118.035V118.098' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M225.582 118.098H221.597' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M282.262 121.043V120.539' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M282.262 121.043V120.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M280.269 120.539H284.253' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M282.262 121.043V121.543' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M282.262 121.043V121.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M284.254 121.543H280.269' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M340.93 133.066V132.812' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M340.93 133.066V132.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M338.937 132.812H342.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M340.93 133.066V133.316' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M340.93 133.066V133.316' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M342.922 133.316H338.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M399.598 89.039V88.539' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M399.598 89.039V88.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M397.605 88.539H401.593' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M399.598 89.039V89.543' fill='#bf80bf'/>
-<path clip-path='url(#clip1)' d='M399.598 89.039V89.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M401.59 89.543H397.605' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M109.867 206.586H113.102V142.332H109.867ZM168.535 206.586H171.774V143.086H168.535ZM227.203 206.586H230.442V132.125H227.203ZM285.871 206.586H289.109V139.641H285.871ZM344.543 206.586H347.781V81.34H344.543ZM403.211 206.586H406.449V100.187H403.211Z' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M109.867 206.586H113.102V142.332H109.867ZM168.535 206.586H171.774V143.086H168.535ZM227.203 206.586H230.442V132.125H227.203ZM285.871 206.586H289.109V139.641H285.871ZM344.543 206.586H347.781V81.34H344.543ZM403.211 206.586H406.449V100.187H403.211Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M111.484 142.332V142.269' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M111.484 142.332V142.269' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M109.492 142.269H113.477' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M111.484 142.332V142.394' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M111.484 142.332V142.394' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M113.477 142.395H109.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M170.152 143.086V142.644' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M170.152 143.086V142.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M168.16 142.644H172.145' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M170.152 143.086V143.523' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M170.152 143.086V143.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M172.145 143.524H168.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M228.824 132.125V131.312' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M228.824 132.125V131.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M226.832 131.312H230.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M228.824 132.125V132.941' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M228.824 132.125V132.941' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M230.813 132.941H226.828' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M287.492 139.641V138.387' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M287.492 139.641V138.387' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M285.5 138.387H289.484' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M287.492 139.641V140.894' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M287.492 139.641V140.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M289.485 140.895H285.5' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M346.16 81.34V81.34' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M344.168 81.34H348.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M346.16 81.34V81.34' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M344.168 81.34H348.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M404.828 100.187V99.562' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M404.828 100.187V99.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M402.836 99.562H406.824' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M404.828 100.187V100.812' fill='#dfbf9f'/>
-<path clip-path='url(#clip1)' d='M404.828 100.187V100.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M406.821 100.813H402.836' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M115.098 206.586H118.332V135.57H115.098ZM173.766 206.586H177.004V136.07H173.766ZM232.434 206.586H235.672V114.965H232.434ZM291.102 206.586H294.34V113.84H291.102ZM349.774 206.586H353.012V81.34H349.774ZM408.442 206.586H411.68V81.34H408.442Z' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M115.098 206.586H118.332V135.57H115.098ZM173.766 206.586H177.004V136.07H173.766ZM232.434 206.586H235.672V114.965H232.434ZM291.102 206.586H294.34V113.84H291.102ZM349.774 206.586H353.012V81.34H349.774ZM408.442 206.586H411.68V81.34H408.442Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M116.715 135.57V135.508' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M116.715 135.57V135.508' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M114.722 135.508H118.707' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M116.715 135.57V135.633' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M116.715 135.57V135.633' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M118.707 135.633H114.722' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M175.383 136.07V135.258' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M175.383 136.07V135.258' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M173.39 135.258H177.375' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M175.383 136.07V136.883' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M175.383 136.07V136.883' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M177.375 136.883H173.39' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M234.055 114.965V114.09' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M234.055 114.965V114.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M232.062 114.09H236.046' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M234.055 114.965V115.844' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M234.055 114.965V115.844' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M236.043 115.843H232.058' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M292.723 113.84V113.215' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M292.723 113.84V113.215' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M290.73 113.215H294.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M292.723 113.84V114.465' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M292.723 113.84V114.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M294.715 114.465H290.73' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M351.391 81.34V81.34' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M349.398 81.34H353.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M351.391 81.34V81.34' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M349.398 81.34H353.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M410.059 81.34V81.34' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M408.066 81.34H412.054' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M410.059 81.34V81.34' fill='#80bf80'/>
-<path clip-path='url(#clip1)' d='M408.066 81.34H412.054' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M120.328 206.586H123.563V135.633H120.328ZM178.996 206.586H182.234V81.34H178.996ZM237.664 206.586H240.902V138.387H237.664ZM296.332 206.586H299.57V81.34H296.332ZM355.004 206.586H358.238V81.34H355.004ZM413.672 206.586H416.91V81.34H413.672Z' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M120.328 206.586H123.563V135.633H120.328ZM178.996 206.586H182.234V81.34H178.996ZM237.664 206.586H240.902V138.387H237.664ZM296.332 206.586H299.57V81.34H296.332ZM355.004 206.586H358.238V81.34H355.004ZM413.672 206.586H416.91V81.34H413.672Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M121.945 135.633V135.57' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M121.945 135.633V135.57' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M119.953 135.571H123.938' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M121.945 135.633V135.695' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M121.945 135.633V135.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M123.938 135.695H119.953' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M180.613 81.34V81.34' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M178.621 81.34H182.606' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M180.613 81.34V81.34' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M178.621 81.34H182.606' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M239.285 138.387V136.195' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M239.285 138.387V136.195' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M237.293 136.195H241.278' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M239.285 138.387V140.578' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M239.285 138.387V140.578' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M241.274 140.578H237.289' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M297.953 81.34V81.34' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M295.961 81.34H299.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M297.953 81.34V81.34' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M295.961 81.34H299.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M356.621 81.34V81.34' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M354.629 81.34H358.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M356.621 81.34V81.34' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M354.629 81.34H358.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M415.289 81.34V81.34' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M413.297 81.34H417.285' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M415.289 81.34V81.34' fill='#bfbf80'/>
-<path clip-path='url(#clip1)' d='M413.297 81.34H417.285' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M125.559 206.586H128.793V139.266H125.559ZM184.227 206.586H187.465V135.695H184.227ZM242.895 206.586H246.133V137.824H242.895ZM301.563 206.586H304.801V97.433H301.563ZM360.234 206.586H363.469V81.34H360.234ZM418.902 206.586H422.141V81.34H418.902Z' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M125.559 206.586H128.793V139.266H125.559ZM184.227 206.586H187.465V135.695H184.227ZM242.895 206.586H246.133V137.824H242.895ZM301.563 206.586H304.801V97.433H301.563ZM360.234 206.586H363.469V81.34H360.234ZM418.902 206.586H422.141V81.34H418.902Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M127.176 139.266V139.203' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M127.176 139.266V139.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M125.183 139.203H129.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M127.176 139.266V139.328' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M127.176 139.266V139.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M129.168 139.328H125.183' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M185.844 135.695V135.258' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M185.844 135.695V135.258' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M183.851 135.258H187.836' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M185.844 135.695V136.133' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M185.844 135.695V136.133' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M187.836 136.133H183.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M244.516 137.824V137.012' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M244.516 137.824V137.012' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M242.523 137.012H246.508' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M244.516 137.824V138.637' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M244.516 137.824V138.637' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M246.504 138.637H242.519' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M303.184 97.433V95.617' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M303.184 97.433V95.617' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M301.191 95.617H305.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M303.184 97.433V99.25' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M303.184 97.433V99.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M305.176 99.25H301.191' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M361.852 81.34V81.34' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M359.859 81.34H363.844' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M361.852 81.34V81.34' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M359.859 81.34H363.844' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M420.52 81.34V81.34' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M418.527 81.34H422.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M420.52 81.34V81.34' fill='#339999'/>
-<path clip-path='url(#clip1)' d='M418.527 81.34H422.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M130.789 206.586H134.024V136.508H130.789ZM189.457 206.586H192.695V143.023H189.457ZM248.125 206.586H251.363V139.391H248.125ZM306.793 206.586H310.031V134.191H306.793ZM365.465 206.586H368.699V81.34H365.465ZM424.133 206.586H427.371V85.348H424.133Z' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M130.789 206.586H134.024V136.508H130.789ZM189.457 206.586H192.695V143.023H189.457ZM248.125 206.586H251.363V139.391H248.125ZM306.793 206.586H310.031V134.191H306.793ZM365.465 206.586H368.699V81.34H365.465ZM424.133 206.586H427.371V85.348H424.133Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M132.406 136.508V136.445' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M132.406 136.508V136.445' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M130.414 136.445H134.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M132.406 136.508V136.57' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M132.406 136.508V136.57' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M134.399 136.571H130.414' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M191.074 143.023V142.582' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M191.074 143.023V142.582' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M189.082 142.582H193.067' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M191.074 143.023V143.461' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M191.074 143.023V143.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M193.067 143.461H189.082' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M249.746 139.391V136.383' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M249.746 139.391V136.383' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M247.754 136.383H251.739' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M249.746 139.391V142.394' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M249.746 139.391V142.394' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M251.735 142.395H247.75' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M308.414 134.191V131.875' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M308.414 134.191V131.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M306.422 131.875H310.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M308.414 134.191V136.508' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M308.414 134.191V136.508' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M310.407 136.508H306.422' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M367.082 81.34V81.34' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M365.09 81.34H369.075' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M367.082 81.34V81.34' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M365.09 81.34H369.075' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M425.75 85.348V72.633' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M425.75 85.348V72.633' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M423.758 72.633H427.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M425.75 85.348V98.058' fill='#bf8080'/>
-<path clip-path='url(#clip1)' d='M425.75 85.348V98.058' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M427.743 98.059H423.758' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(0 -1 1 0 -93.83 252.423)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-48' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -35.161 252.423)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-48' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 23.508 252.423)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-48' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 82.177 252.423)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-48' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 140.846 252.423)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-48' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 199.515 252.423)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-48' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -88.6 250.983)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-50' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -29.93 248.666)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-54' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 28.739 256.807)'>
-<use x='114.487' xlink:href='#g2-48' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-57' y='186.027'/>
-<use x='121.25' xlink:href='#g2-51' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 87.408 229.879)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-51' y='186.027'/>
-<use x='121.25' xlink:href='#g2-54' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 146.077 243.531)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-52' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 204.746 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-53' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-56' y='186.027'/>
-<use x='126.877' xlink:href='#g2-50' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -83.369 248.729)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-54' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -24.7 251.359)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-50' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 33.969 243.218)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-53' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.638 207.711)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-55' y='186.027'/>
-<use x='121.25' xlink:href='#g2-49' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 151.307 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-50' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-51' y='186.027'/>
-<use x='126.877' xlink:href='#g2-54' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 209.976 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-50' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-57' y='186.027'/>
-<use x='126.877' xlink:href='#g2-49' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.139 233.323)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-51' y='186.027'/>
-<use x='121.25' xlink:href='#g2-49' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -19.47 249.668)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-52' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 39.199 226.497)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-52' y='186.027'/>
-<use x='121.25' xlink:href='#g2-49' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 97.868 229.503)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-51' y='186.027'/>
-<use x='121.25' xlink:href='#g2-55' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 156.537 241.527)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-55' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 215.206 197.503)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-56' y='186.027'/>
-<use x='121.25' xlink:href='#g2-56' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -72.908 250.795)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-51' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -14.239 251.547)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-49' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 44.43 240.588)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-57' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 103.099 248.102)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-55' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 161.768 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-50' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-49' y='186.027'/>
-<use x='126.877' xlink:href='#g2-54' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 220.437 208.65)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-55' y='186.027'/>
-<use x='121.25' xlink:href='#g2-48' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -67.678 244.032)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-51' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -9.009 244.533)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-51' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.66 223.429)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-52' y='186.027'/>
-<use x='121.25' xlink:href='#g2-54' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 108.329 222.302)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-52' y='186.027'/>
-<use x='121.25' xlink:href='#g2-56' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 166.998 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-56' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-52' y='186.027'/>
-<use x='126.877' xlink:href='#g2-50' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.667 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-57' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-57' y='186.027'/>
-<use x='126.877' xlink:href='#g2-51' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -62.447 244.095)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-51' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -3.778 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-51' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-54' y='186.027'/>
-<use x='126.877' xlink:href='#g2-51' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 54.891 246.85)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-57' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.56 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-50' y='186.027'/>
-<use x='122.76' xlink:href='#g2-51' y='186.027'/>
-<use x='125.406' xlink:href='#g2-46' y='186.027'/>
-<use x='126.877' xlink:href='#g2-57' y='186.027'/>
-<use x='129.523' xlink:href='#g2-57' y='186.027'/>
-<use x='132.169' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 172.229 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-49' y='186.027'/>
-<use x='122.76' xlink:href='#g2-56' y='186.027'/>
-<use x='125.406' xlink:href='#g2-46' y='186.027'/>
-<use x='126.877' xlink:href='#g2-53' y='186.027'/>
-<use x='129.523' xlink:href='#g2-52' y='186.027'/>
-<use x='132.169' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 230.898 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-51' y='186.027'/>
-<use x='122.76' xlink:href='#g2-52' y='186.027'/>
-<use x='125.406' xlink:href='#g2-46' y='186.027'/>
-<use x='126.877' xlink:href='#g2-52' y='186.027'/>
-<use x='129.523' xlink:href='#g2-53' y='186.027'/>
-<use x='132.169' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -57.217 247.727)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-56' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 1.452 244.157)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-51' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 60.121 246.286)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-48' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.79 205.895)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-55' y='186.027'/>
-<use x='121.25' xlink:href='#g2-52' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 177.459 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-52' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-51' y='186.027'/>
-<use x='126.877' xlink:href='#g2-51' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 236.128 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-50' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-49' y='186.027'/>
-<use x='126.877' xlink:href='#g2-50' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -51.986 244.971)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-50' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 6.683 251.484)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-50' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 65.352 247.852)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-48' y='186.027'/>
-<use x='121.25' xlink:href='#g2-55' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 124.021 242.654)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-49' y='186.027'/>
-<use x='121.25' xlink:href='#g2-54' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 182.69 189.8)'>
-<use x='109.598' xlink:href='#g4-1' y='186.027'/>
-<use x='113.103' xlink:href='#g4-1' y='186.027'/>
-<use x='116.608' xlink:href='#g4-1' y='186.027'/>
-<use x='120.114' xlink:href='#g2-50' y='186.027'/>
-<use x='122.76' xlink:href='#g2-46' y='186.027'/>
-<use x='124.23' xlink:href='#g2-50' y='186.027'/>
-<use x='126.877' xlink:href='#g2-55' y='186.027'/>
-<use x='129.523' xlink:href='#g2-120' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 241.359 193.808)'>
-<use x='114.487' xlink:href='#g2-49' y='186.027'/>
-<use x='117.133' xlink:href='#g2-46' y='186.027'/>
-<use x='118.603' xlink:href='#g2-57' y='186.027'/>
-<use x='121.25' xlink:href='#g2-52' y='186.027'/>
-</g>
-<g transform='matrix(0 -1 1 0 -126.667 313.708)'>
-<use x='114.487' xlink:href='#g1-82' y='186.027'/>
-<use x='120.457' xlink:href='#g1-101' y='186.027'/>
-<use x='124.553' xlink:href='#g1-108' y='186.027'/>
-<use x='126.753' xlink:href='#g1-97' y='186.027'/>
-<use x='131.181' xlink:href='#g1-116' y='186.027'/>
-<use x='134.509' xlink:href='#g1-105' y='186.027'/>
-<use x='136.709' xlink:href='#g1-118' y='186.027'/>
-<use x='140.957' xlink:href='#g1-101' y='186.027'/>
-<use x='148.124' xlink:href='#g1-116' y='186.027'/>
-<use x='151.452' xlink:href='#g1-105' y='186.027'/>
-<use x='153.652' xlink:href='#g1-109' y='186.027'/>
-<use x='160.972' xlink:href='#g1-101' y='186.027'/>
-<use x='168.139' xlink:href='#g3-40' y='186.027'/>
-<use x='171.432' xlink:href='#g3-108' y='186.027'/>
-<use x='173.453' xlink:href='#g3-111' y='186.027'/>
-<use x='177.452' xlink:href='#g3-119' y='186.027'/>
-<use x='183' xlink:href='#g3-101' y='186.027'/>
-<use x='186.764' xlink:href='#g3-114' y='186.027'/>
-<use x='192.479' xlink:href='#g3-105' y='186.027'/>
-<use x='194.499' xlink:href='#g3-115' y='186.027'/>
-<use x='200.568' xlink:href='#g3-98' y='186.027'/>
-<use x='205.176' xlink:href='#g3-101' y='186.027'/>
-<use x='208.94' xlink:href='#g3-116' y='186.027'/>
-<use x='211.998' xlink:href='#g3-116' y='186.027'/>
-<use x='215.056' xlink:href='#g3-101' y='186.027'/>
-<use x='218.819' xlink:href='#g3-114' y='186.027'/>
-<use x='221.711' xlink:href='#g3-41' y='186.027'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-b.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-b.svg
deleted file mode 100644
index 2d853ed..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-b.svg
+++ /dev/null
@@ -1,1185 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='258.383pt' version='1.1' viewBox='106.736 54.996 381.623 258.383' width='381.623pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip2'>
-<path d='M135.949 251.93H487.961V84.164H135.949Z'/>
-</clipPath>
-<use id='g3-40' transform='scale(1.143)' xlink:href='#g0-40'/>
-<use id='g3-41' transform='scale(1.143)' xlink:href='#g0-41'/>
-<use id='g3-45' transform='scale(1.143)' xlink:href='#g0-45'/>
-<use id='g3-49' transform='scale(1.143)' xlink:href='#g0-49'/>
-<use id='g3-54' transform='scale(1.143)' xlink:href='#g0-54'/>
-<use id='g3-56' transform='scale(1.143)' xlink:href='#g0-56'/>
-<use id='g3-58' transform='scale(1.143)' xlink:href='#g0-58'/>
-<use id='g3-78' transform='scale(1.143)' xlink:href='#g0-78'/>
-<use id='g3-97' transform='scale(1.143)' xlink:href='#g0-97'/>
-<use id='g3-98' transform='scale(1.143)' xlink:href='#g0-98'/>
-<use id='g3-99' transform='scale(1.143)' xlink:href='#g0-99'/>
-<use id='g3-100' transform='scale(1.143)' xlink:href='#g0-100'/>
-<use id='g3-101' transform='scale(1.143)' xlink:href='#g0-101'/>
-<use id='g3-103' transform='scale(1.143)' xlink:href='#g0-103'/>
-<use id='g3-104' transform='scale(1.143)' xlink:href='#g0-104'/>
-<use id='g3-105' transform='scale(1.143)' xlink:href='#g0-105'/>
-<use id='g3-106' transform='scale(1.143)' xlink:href='#g0-106'/>
-<use id='g3-108' transform='scale(1.143)' xlink:href='#g0-108'/>
-<use id='g3-109' transform='scale(1.143)' xlink:href='#g0-109'/>
-<use id='g3-110' transform='scale(1.143)' xlink:href='#g0-110'/>
-<use id='g3-111' transform='scale(1.143)' xlink:href='#g0-111'/>
-<use id='g3-112' transform='scale(1.143)' xlink:href='#g0-112'/>
-<use id='g3-114' transform='scale(1.143)' xlink:href='#g0-114'/>
-<use id='g3-115' transform='scale(1.143)' xlink:href='#g0-115'/>
-<use id='g3-116' transform='scale(1.143)' xlink:href='#g0-116'/>
-<use id='g3-119' transform='scale(1.143)' xlink:href='#g0-119'/>
-<use id='g3-120' transform='scale(1.143)' xlink:href='#g0-120'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g1-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g1-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g1-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g1-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g1-108'/>
-<path d='M6.581 -2.663C6.581 -3.327 6.402 -4.08 5.317 -4.08C4.564 -4.08 4.142 -3.622 3.927 -3.344C3.865 -3.524 3.676 -4.08 2.762 -4.08C2.053 -4.08 1.623 -3.667 1.417 -3.398V-4.035H0.726V0H1.47V-2.188C1.47 -2.78 1.704 -3.497 2.385 -3.497C3.282 -3.497 3.282 -2.86 3.282 -2.6V0H4.026V-2.188C4.026 -2.78 4.259 -3.497 4.94 -3.497C5.837 -3.497 5.837 -2.86 5.837 -2.6V0H6.581V-2.663Z' id='g1-109'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g1-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g1-118'/>
-<use id='g2-44' transform='scale(0.714)' xlink:href='#g0-44'/>
-<use id='g2-45' transform='scale(0.714)' xlink:href='#g0-45'/>
-<use id='g2-46' transform='scale(0.714)' xlink:href='#g0-46'/>
-<use id='g2-48' transform='scale(0.714)' xlink:href='#g0-48'/>
-<use id='g2-49' transform='scale(0.714)' xlink:href='#g0-49'/>
-<use id='g2-50' transform='scale(0.714)' xlink:href='#g0-50'/>
-<use id='g2-51' transform='scale(0.714)' xlink:href='#g0-51'/>
-<use id='g2-52' transform='scale(0.714)' xlink:href='#g0-52'/>
-<use id='g2-53' transform='scale(0.714)' xlink:href='#g0-53'/>
-<use id='g2-54' transform='scale(0.714)' xlink:href='#g0-54'/>
-<use id='g2-55' transform='scale(0.714)' xlink:href='#g0-55'/>
-<use id='g2-56' transform='scale(0.714)' xlink:href='#g0-56'/>
-<use id='g2-57' transform='scale(0.714)' xlink:href='#g0-57'/>
-<use id='g2-64' transform='scale(0.714)' xlink:href='#g0-64'/>
-<use id='g2-67' transform='scale(0.714)' xlink:href='#g0-67'/>
-<use id='g2-71' transform='scale(0.714)' xlink:href='#g0-71'/>
-<use id='g2-73' transform='scale(0.714)' xlink:href='#g0-73'/>
-<use id='g2-85' transform='scale(0.714)' xlink:href='#g0-85'/>
-<use id='g2-88' transform='scale(0.714)' xlink:href='#g0-88'/>
-<use id='g2-97' transform='scale(0.714)' xlink:href='#g0-97'/>
-<use id='g2-98' transform='scale(0.714)' xlink:href='#g0-98'/>
-<use id='g2-99' transform='scale(0.714)' xlink:href='#g0-99'/>
-<use id='g2-100' transform='scale(0.714)' xlink:href='#g0-100'/>
-<use id='g2-101' transform='scale(0.714)' xlink:href='#g0-101'/>
-<use id='g2-103' transform='scale(0.714)' xlink:href='#g0-103'/>
-<use id='g2-104' transform='scale(0.714)' xlink:href='#g0-104'/>
-<use id='g2-108' transform='scale(0.714)' xlink:href='#g0-108'/>
-<use id='g2-109' transform='scale(0.714)' xlink:href='#g0-109'/>
-<use id='g2-110' transform='scale(0.714)' xlink:href='#g0-110'/>
-<use id='g2-111' transform='scale(0.714)' xlink:href='#g0-111'/>
-<use id='g2-112' transform='scale(0.714)' xlink:href='#g0-112'/>
-<use id='g2-114' transform='scale(0.714)' xlink:href='#g0-114'/>
-<use id='g2-115' transform='scale(0.714)' xlink:href='#g0-115'/>
-<use id='g2-116' transform='scale(0.714)' xlink:href='#g0-116'/>
-<use id='g2-117' transform='scale(0.714)' xlink:href='#g0-117'/>
-<use id='g2-120' transform='scale(0.714)' xlink:href='#g0-120'/>
-<use id='g2-122' transform='scale(0.714)' xlink:href='#g0-122'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g4-1'/>
-<path d='M2.127 -5.23C2.008 -5.23 1.995 -5.23 1.911 -5.154C1.032 -4.387 0.586 -3.145 0.586 -1.743C0.586 -0.425 0.983 0.844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 0.063C1.276 -0.481 1.193 -1.053 1.193 -1.743C1.193 -4.156 2.322 -5.112 2.462 -5.23H2.127Z' id='g0-40'/>
-<path d='M0.746 1.743C0.865 1.743 0.879 1.743 0.962 1.667C1.841 0.9 2.287 -0.342 2.287 -1.743C2.287 -3.062 1.89 -4.331 0.969 -5.14C0.879 -5.23 0.865 -5.23 0.746 -5.23H0.411C0.432 -5.216 1.109 -4.638 1.43 -3.55C1.597 -3.006 1.681 -2.434 1.681 -1.743C1.681 0.669 0.551 1.625 0.411 1.743H0.746Z' id='g0-41'/>
-<path d='M1.339 -0.007V-0.628H0.711V0H0.907L0.704 0.893H1.018L1.339 -0.007Z' id='g0-44'/>
-<path d='M2.05 -1.332V-1.771H0.084V-1.332H2.05Z' id='g0-45'/>
-<path d='M1.339 -0.628H0.711V0H1.339V-0.628Z' id='g0-46'/>
-<path d='M3.403 -2.267C3.403 -2.601 3.403 -3.417 3.075 -3.989C2.72 -4.617 2.183 -4.721 1.848 -4.721C1.534 -4.721 0.99 -4.624 0.642 -4.024C0.307 -3.466 0.293 -2.706 0.293 -2.267C0.293 -1.75 0.321 -1.116 0.614 -0.586C0.921 -0.021 1.437 0.146 1.848 0.146C2.545 0.146 2.929 -0.258 3.138 -0.697C3.382 -1.193 3.403 -1.834 3.403 -2.267ZM1.848 -0.314C1.555 -0.314 1.22 -0.481 1.046 -0.983C0.907 -1.409 0.9 -1.848 0.9 -2.357C0.9 -2.999 0.9 -4.261 1.848 -4.261S2.797 -2.999 2.797 -2.357C2.797 -1.897 2.797 -1.374 2.629 -0.928C2.434 -0.425 2.078 -0.314 1.848 -0.314Z' id='g0-48'/>
-<path d='M2.239 -4.721H2.085C1.632 -4.303 1.06 -4.275 0.642 -4.261V-3.822C0.914 -3.829 1.262 -3.843 1.611 -3.982V-0.439H0.683V0H3.166V-0.439H2.239V-4.721Z' id='g0-49'/>
-<path d='M1.974 -0.537C1.89 -0.537 1.806 -0.53 1.723 -0.53H0.928L2.008 -1.485C2.134 -1.597 2.476 -1.855 2.608 -1.967C2.915 -2.246 3.327 -2.608 3.327 -3.215C3.327 -4.003 2.741 -4.721 1.743 -4.721C1.004 -4.721 0.544 -4.324 0.307 -3.612L0.635 -3.201C0.795 -3.787 1.039 -4.24 1.646 -4.24C2.232 -4.24 2.678 -3.829 2.678 -3.201C2.678 -2.622 2.336 -2.294 1.918 -1.897C1.778 -1.757 1.402 -1.444 1.255 -1.304C1.053 -1.123 0.572 -0.656 0.37 -0.481V0H3.327V-0.537H1.974Z' id='g0-50'/>
-<path d='M0.697 -3.578C0.983 -4.135 1.485 -4.289 1.82 -4.289C2.232 -4.289 2.538 -4.052 2.538 -3.654C2.538 -3.285 2.287 -2.831 1.757 -2.741C1.723 -2.734 1.695 -2.734 1.234 -2.699V-2.239H1.778C2.441 -2.239 2.685 -1.716 2.685 -1.276C2.685 -0.732 2.35 -0.314 1.806 -0.314C1.311 -0.314 0.746 -0.551 0.398 -0.997L0.307 -0.544C0.711 -0.091 1.276 0.146 1.82 0.146C2.734 0.146 3.389 -0.537 3.389 -1.269C3.389 -1.841 2.929 -2.301 2.378 -2.462C2.908 -2.734 3.18 -3.201 3.18 -3.654C3.18 -4.247 2.573 -4.721 1.827 -4.721C1.213 -4.721 0.704 -4.4 0.411 -3.982L0.697 -3.578Z' id='g0-51'/>
-<path d='M2.762 -1.165H3.487V-1.625H2.762V-4.575H2.071L0.209 -1.625V-1.165H2.162V0H2.762V-1.165ZM0.802 -1.625C1.011 -1.953 2.211 -3.815 2.211 -4.233V-1.625H0.802Z' id='g0-52'/>
-<path d='M1.144 -4.094H3.075V-4.575H0.586V-1.967H1.095C1.262 -2.343 1.59 -2.511 1.904 -2.511C2.19 -2.511 2.622 -2.315 2.622 -1.43C2.622 -0.516 2.043 -0.314 1.688 -0.314C1.227 -0.314 0.781 -0.558 0.544 -0.955L0.279 -0.537C0.621 -0.112 1.137 0.146 1.688 0.146C2.608 0.146 3.327 -0.565 3.327 -1.416C3.327 -2.28 2.685 -2.971 1.918 -2.971C1.618 -2.971 1.353 -2.866 1.144 -2.692V-4.094Z' id='g0-53'/>
-<path d='M3.062 -4.582C2.685 -4.721 2.42 -4.721 2.287 -4.721C1.227 -4.721 0.307 -3.724 0.307 -2.253C0.307 -0.363 1.158 0.146 1.862 0.146C2.427 0.146 2.72 -0.119 2.936 -0.342C3.382 -0.816 3.389 -1.311 3.389 -1.555C3.389 -2.469 2.894 -3.229 2.218 -3.229C1.534 -3.229 1.165 -2.873 0.962 -2.671C1.053 -3.626 1.541 -4.289 2.294 -4.289C2.434 -4.289 2.713 -4.275 3.062 -4.142V-4.582ZM0.969 -1.534C0.969 -1.576 0.969 -1.681 0.976 -1.716C0.976 -2.19 1.276 -2.769 1.897 -2.769C2.748 -2.769 2.748 -1.792 2.748 -1.555C2.748 -1.29 2.748 -0.997 2.559 -0.704C2.392 -0.453 2.183 -0.314 1.862 -0.314C1.123 -0.314 1.004 -1.227 0.969 -1.534Z' id='g0-54'/>
-<path d='M1.723 -4.038C1.806 -4.038 1.89 -4.045 1.974 -4.045H2.852C1.792 -3.006 1.116 -1.548 1.116 0.07H1.771C1.771 -1.967 2.762 -3.431 3.389 -4.087V-4.575H0.307V-4.038H1.723Z' id='g0-55'/>
-<path d='M2.385 -2.469C2.845 -2.615 3.285 -2.985 3.285 -3.501C3.285 -4.135 2.678 -4.721 1.848 -4.721S0.411 -4.135 0.411 -3.501C0.411 -2.978 0.865 -2.608 1.311 -2.469C0.697 -2.28 0.307 -1.806 0.307 -1.269C0.307 -0.523 0.969 0.146 1.848 0.146S3.389 -0.523 3.389 -1.269C3.389 -1.806 2.992 -2.28 2.385 -2.469ZM1.848 -2.699C1.353 -2.699 0.948 -2.985 0.948 -3.494C0.948 -3.94 1.262 -4.289 1.848 -4.289C2.427 -4.289 2.748 -3.94 2.748 -3.494C2.748 -2.999 2.357 -2.699 1.848 -2.699ZM1.848 -0.314C1.367 -0.314 0.941 -0.621 0.941 -1.276C0.941 -1.904 1.346 -2.239 1.848 -2.239S2.755 -1.897 2.755 -1.276C2.755 -0.621 2.322 -0.314 1.848 -0.314Z' id='g0-56'/>
-<path d='M0.537 -0.174C0.879 0.077 1.193 0.146 1.52 0.146C2.497 0.146 3.389 -0.837 3.389 -2.336C3.389 -4.24 2.545 -4.721 1.876 -4.721C1.255 -4.721 0.969 -4.428 0.767 -4.226C0.321 -3.773 0.307 -3.292 0.307 -3.02C0.307 -2.12 0.795 -1.346 1.478 -1.346C2.267 -1.346 2.699 -1.869 2.734 -1.911C2.636 -0.802 2.092 -0.314 1.52 -0.314C1.158 -0.314 0.934 -0.446 0.774 -0.579L0.537 -0.174ZM2.713 -3.027C2.72 -2.985 2.72 -2.915 2.72 -2.873C2.72 -2.357 2.406 -1.806 1.799 -1.806C1.534 -1.806 1.325 -1.883 1.144 -2.169C0.962 -2.441 0.948 -2.706 0.948 -3.02C0.948 -3.292 0.948 -3.605 1.165 -3.912C1.311 -4.122 1.52 -4.289 1.869 -4.289C2.545 -4.289 2.692 -3.473 2.713 -3.027Z' id='g0-57'/>
-<path d='M1.339 -3.096H0.711V-2.469H1.339V-3.096ZM0.711 -0.628V0H1.339V-0.628H0.711Z' id='g0-58'/>
-<path d='M4.142 -0.614C4.038 -0.614 4.024 -0.614 3.968 -0.586C3.626 -0.467 3.271 -0.391 2.901 -0.391C1.778 -0.391 0.976 -1.339 0.976 -2.42C0.976 -3.592 1.883 -4.449 2.859 -4.449C3.055 -4.449 3.515 -4.4 3.745 -3.843C3.55 -3.954 3.333 -4.003 3.152 -4.003C2.406 -4.003 1.778 -3.306 1.778 -2.42C1.778 -1.513 2.427 -0.837 3.145 -0.837C3.689 -0.837 4.519 -1.276 4.519 -2.518C4.519 -3.222 4.47 -4.91 2.866 -4.91C1.541 -4.91 0.411 -3.815 0.411 -2.42C0.411 -1.039 1.527 0.07 2.873 0.07C3.515 0.07 4.115 -0.195 4.519 -0.614H4.142ZM3.152 -1.297C2.72 -1.297 2.343 -1.778 2.343 -2.42C2.343 -3.082 2.734 -3.543 3.145 -3.543C3.578 -3.543 3.954 -3.062 3.954 -2.42C3.954 -1.757 3.564 -1.297 3.152 -1.297Z' id='g0-64'/>
-<path d='M4.317 -0.851C3.829 -0.551 3.605 -0.418 2.908 -0.418C1.827 -0.418 1.172 -1.43 1.172 -2.434C1.172 -3.466 1.89 -4.435 2.908 -4.435C3.368 -4.435 3.843 -4.289 4.163 -4.045L4.275 -4.679C3.787 -4.861 3.396 -4.917 2.887 -4.917C1.506 -4.917 0.474 -3.773 0.474 -2.427C0.474 -0.99 1.569 0.07 2.929 0.07C3.612 0.07 3.898 -0.07 4.359 -0.321L4.317 -0.851Z' id='g0-67'/>
-<path d='M4.442 -2.085H2.88V-1.625H3.829V-0.558C3.522 -0.481 3.222 -0.418 2.908 -0.418C1.834 -0.418 1.172 -1.43 1.172 -2.427C1.172 -3.382 1.82 -4.435 2.873 -4.435C3.515 -4.435 3.919 -4.24 4.268 -3.947L4.38 -4.582C3.898 -4.812 3.473 -4.924 2.943 -4.924C1.534 -4.924 0.474 -3.822 0.474 -2.427C0.474 -1.067 1.527 0.07 2.901 0.07C3.403 0.07 3.996 -0.042 4.442 -0.272V-2.085Z' id='g0-71'/>
-<path d='M1.381 -4.84H0.676V0H1.381V-4.84Z' id='g0-73'/>
-<path d='M1.646 -4.84H0.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-0.551H3.933L1.646 -4.84Z' id='g0-78'/>
-<path d='M4.4 -4.84H3.794V-1.625C3.794 -0.69 3.166 -0.265 2.566 -0.265S1.381 -0.697 1.381 -1.618V-4.84H0.676V-1.632C0.676 -0.607 1.555 0.146 2.559 0.146C3.557 0.146 4.4 -0.614 4.4 -1.632V-4.84Z' id='g0-85'/>
-<path d='M2.755 -2.552L4.519 -4.84H3.759L2.413 -3.055L1.039 -4.84H0.209L2.071 -2.552L0.105 0H0.865L2.413 -2.099L3.996 0H4.826L2.755 -2.552Z' id='g0-88'/>
-<path d='M2.971 -2.008C2.971 -2.72 2.427 -3.201 1.736 -3.201C1.297 -3.201 0.962 -3.11 0.572 -2.901L0.614 -2.392C0.844 -2.545 1.186 -2.755 1.736 -2.755C2.043 -2.755 2.364 -2.525 2.364 -2.001V-1.723C1.332 -1.688 0.314 -1.471 0.314 -0.823C0.314 -0.474 0.551 0.07 1.165 0.07C1.465 0.07 2.015 0.007 2.385 -0.265V0H2.971V-2.008ZM2.364 -0.99C2.364 -0.851 2.364 -0.669 2.12 -0.523C1.897 -0.398 1.625 -0.391 1.548 -0.391C1.165 -0.391 0.872 -0.565 0.872 -0.83C0.872 -1.276 2.05 -1.318 2.364 -1.332V-0.99Z' id='g0-97'/>
-<path d='M1.179 -4.84H0.593V0H1.2V-0.328C1.353 -0.195 1.688 0.07 2.197 0.07C2.957 0.07 3.571 -0.642 3.571 -1.555C3.571 -2.399 3.089 -3.166 2.392 -3.166C1.953 -3.166 1.527 -3.027 1.179 -2.769V-4.84ZM1.2 -2.197C1.2 -2.308 1.2 -2.392 1.444 -2.552C1.548 -2.615 1.736 -2.706 1.974 -2.706C2.441 -2.706 2.964 -2.392 2.964 -1.555C2.964 -0.704 2.385 -0.391 1.897 -0.391C1.639 -0.391 1.395 -0.509 1.2 -0.823V-2.197Z' id='g0-98'/>
-<path d='M3.034 -0.76C2.685 -0.537 2.308 -0.411 1.876 -0.411C1.234 -0.411 0.858 -0.928 0.858 -1.555C0.858 -2.092 1.137 -2.72 1.897 -2.72C2.371 -2.72 2.594 -2.622 2.95 -2.399L3.041 -2.901C2.622 -3.11 2.441 -3.201 1.897 -3.201C0.851 -3.201 0.251 -2.357 0.251 -1.548C0.251 -0.697 0.921 0.07 1.869 0.07C2.357 0.07 2.776 -0.077 3.075 -0.251L3.034 -0.76Z' id='g0-99'/>
-<path d='M3.229 -4.84H2.643V-2.797C2.197 -3.124 1.743 -3.166 1.541 -3.166C0.809 -3.166 0.251 -2.434 0.251 -1.548S0.802 0.07 1.52 0.07C1.953 0.07 2.357 -0.126 2.622 -0.363V0H3.229V-4.84ZM2.622 -0.865C2.448 -0.579 2.183 -0.391 1.848 -0.391C1.36 -0.391 0.858 -0.732 0.858 -1.541C0.858 -2.413 1.451 -2.706 1.925 -2.706C2.204 -2.706 2.441 -2.587 2.622 -2.35V-0.865Z' id='g0-100'/>
-<path d='M2.999 -0.76C2.608 -0.481 2.169 -0.391 1.869 -0.391C1.262 -0.391 0.802 -0.886 0.781 -1.527H3.068C3.068 -1.848 3.034 -2.315 2.762 -2.713C2.511 -3.068 2.092 -3.201 1.75 -3.201C0.9 -3.201 0.244 -2.455 0.244 -1.569C0.244 -0.676 0.941 0.07 1.862 0.07C2.267 0.07 2.685 -0.049 3.041 -0.265L2.999 -0.76ZM0.83 -1.946C0.99 -2.504 1.402 -2.741 1.75 -2.741C2.057 -2.741 2.511 -2.594 2.643 -1.946H0.83Z' id='g0-101'/>
-<path d='M3.508 -3.166C3.354 -3.166 2.887 -3.159 2.357 -2.957L2.343 -2.95C2.092 -3.117 1.848 -3.166 1.646 -3.166C0.962 -3.166 0.453 -2.629 0.453 -2.029C0.453 -1.785 0.537 -1.534 0.697 -1.339C0.6 -1.22 0.495 -1.025 0.495 -0.76C0.495 -0.488 0.607 -0.314 0.669 -0.23C0.286 -0.007 0.209 0.314 0.209 0.481C0.209 1.011 0.941 1.43 1.848 1.43C2.762 1.43 3.487 1.011 3.487 0.481C3.487 -0.502 2.267 -0.502 1.967 -0.502H1.318C1.206 -0.502 0.907 -0.502 0.907 -0.865C0.907 -1.004 0.955 -1.074 0.962 -1.088C1.206 -0.934 1.451 -0.886 1.639 -0.886C2.322 -0.886 2.831 -1.423 2.831 -2.022C2.831 -2.246 2.769 -2.448 2.643 -2.636C2.615 -2.678 2.615 -2.685 2.615 -2.692C2.615 -2.72 3.034 -2.72 3.068 -2.72C3.075 -2.72 3.34 -2.72 3.592 -2.692L3.508 -3.166ZM1.646 -1.318C1.269 -1.318 0.99 -1.555 0.99 -2.022C0.99 -2.566 1.339 -2.734 1.639 -2.734C2.015 -2.734 2.294 -2.497 2.294 -2.029C2.294 -1.485 1.946 -1.318 1.646 -1.318ZM1.974 0.042C2.134 0.042 2.957 0.042 2.957 0.488C2.957 0.788 2.434 0.997 1.848 0.997S0.739 0.788 0.739 0.488C0.739 0.453 0.739 0.042 1.304 0.042H1.974Z' id='g0-103'/>
-<path d='M3.243 -2.064C3.243 -2.608 3.082 -3.166 2.225 -3.166C1.625 -3.166 1.304 -2.817 1.165 -2.671V-4.84H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-2.064Z' id='g0-104'/>
-<path d='M1.227 -4.784H0.523V-4.08H1.227V-4.784ZM1.172 -3.096H0.586V0H1.172V-3.096Z' id='g0-105'/>
-<path d='M1.381 -4.784H0.676V-4.08H1.381V-4.784ZM-0.453 1.186C-0.133 1.36 0.181 1.423 0.446 1.423C0.928 1.423 1.381 1.053 1.381 0.411V-3.096H0.795V0.46C0.795 0.586 0.795 0.697 0.649 0.816C0.488 0.934 0.293 0.934 0.23 0.934C-0.063 0.934 -0.244 0.802 -0.328 0.725L-0.453 1.186Z' id='g0-106'/>
-<path d='M1.172 -4.84H0.586V0H1.172V-4.84Z' id='g0-108'/>
-<path d='M5.3 -2.064C5.3 -2.608 5.14 -3.166 4.282 -3.166C3.696 -3.166 3.333 -2.824 3.166 -2.601C3.096 -2.79 2.922 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-1.695C3.243 -2.155 3.438 -2.706 3.975 -2.706C4.693 -2.706 4.693 -2.218 4.693 -2.015V0H5.3V-2.064Z' id='g0-109'/>
-<path d='M3.243 -2.064C3.243 -2.608 3.082 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-2.064Z' id='g0-110'/>
-<path d='M3.487 -1.527C3.487 -2.448 2.755 -3.201 1.848 -3.201S0.209 -2.441 0.209 -1.527C0.209 -0.642 0.948 0.07 1.848 0.07C2.755 0.07 3.487 -0.642 3.487 -1.527ZM1.848 -0.411C1.297 -0.411 0.816 -0.816 0.816 -1.604S1.332 -2.741 1.848 -2.741C2.371 -2.741 2.88 -2.378 2.88 -1.604C2.88 -0.809 2.385 -0.411 1.848 -0.411Z' id='g0-111'/>
-<path d='M1.2 -0.328C1.569 0.007 1.967 0.07 2.204 0.07C2.943 0.07 3.571 -0.635 3.571 -1.555C3.571 -2.392 3.11 -3.166 2.42 -3.166C2.106 -3.166 1.583 -3.075 1.179 -2.762V-3.096H0.593V1.353H1.2V-0.328ZM1.2 -2.315C1.36 -2.511 1.632 -2.685 1.967 -2.685C2.525 -2.685 2.964 -2.169 2.964 -1.555C2.964 -0.865 2.441 -0.391 1.897 -0.391C1.792 -0.391 1.618 -0.404 1.437 -0.551C1.227 -0.711 1.2 -0.816 1.2 -0.948V-2.315Z' id='g0-112'/>
-<path d='M1.179 -1.485C1.179 -2.239 1.806 -2.643 2.42 -2.65V-3.166C1.834 -3.159 1.409 -2.873 1.13 -2.504V-3.145H0.593V0H1.179V-1.485Z' id='g0-114'/>
-<path d='M2.545 -2.985C2.071 -3.18 1.723 -3.201 1.471 -3.201C1.297 -3.201 0.244 -3.201 0.244 -2.273C0.244 -1.946 0.425 -1.764 0.516 -1.681C0.76 -1.437 1.053 -1.381 1.423 -1.311C1.75 -1.248 2.127 -1.179 2.127 -0.844C2.127 -0.404 1.548 -0.404 1.451 -0.404C1.004 -0.404 0.586 -0.565 0.307 -0.76L0.209 -0.237C0.446 -0.119 0.872 0.07 1.451 0.07C1.764 0.07 2.071 0.021 2.329 -0.167C2.587 -0.363 2.671 -0.669 2.671 -0.907C2.671 -1.032 2.657 -1.304 2.364 -1.569C2.106 -1.799 1.855 -1.848 1.52 -1.911C1.109 -1.988 0.788 -2.05 0.788 -2.357C0.788 -2.755 1.297 -2.755 1.402 -2.755C1.799 -2.755 2.106 -2.671 2.455 -2.49L2.545 -2.985Z' id='g0-115'/>
-<path d='M1.311 -2.657H2.343V-3.096H1.311V-3.982H0.774V-3.096H0.139V-2.657H0.753V-0.893C0.753 -0.425 0.872 0.07 1.374 0.07S2.26 -0.091 2.469 -0.188L2.35 -0.635C2.12 -0.467 1.876 -0.411 1.681 -0.411C1.388 -0.411 1.311 -0.697 1.311 -1.018V-2.657Z' id='g0-116'/>
-<path d='M3.243 -3.096H2.636V-1.074C2.636 -0.516 2.162 -0.342 1.757 -0.342C1.241 -0.342 1.186 -0.481 1.186 -0.802V-3.096H0.579V-0.76C0.579 -0.139 0.851 0.07 1.339 0.07C1.625 0.07 2.239 0.014 2.657 -0.321V0H3.243V-3.096Z' id='g0-117'/>
-<path d='M4.951 -3.096H4.407C4.345 -2.901 3.954 -1.723 3.738 -0.997C3.682 -0.795 3.612 -0.572 3.592 -0.411H3.585C3.543 -0.697 3.299 -1.451 3.285 -1.499L2.769 -3.096H2.239C2.036 -2.497 1.513 -0.934 1.458 -0.425H1.451C1.395 -0.921 0.879 -2.462 0.767 -2.797C0.711 -2.964 0.711 -2.978 0.676 -3.096H0.105L1.123 0H1.709C1.716 -0.028 1.904 -0.579 2.148 -1.353C2.253 -1.695 2.462 -2.364 2.497 -2.671L2.504 -2.678C2.518 -2.532 2.559 -2.378 2.608 -2.204S2.706 -1.841 2.755 -1.681L3.292 0H3.933L4.951 -3.096Z' id='g0-119'/>
-<path d='M1.932 -1.597L3.285 -3.096H2.671L1.681 -1.953L0.669 -3.096H0.042L1.437 -1.597L0 0H0.621L1.681 -1.311L2.783 0H3.41L1.932 -1.597Z' id='g0-120'/>
-<path d='M2.957 -2.803V-3.096H0.307V-2.65H1.332C1.416 -2.65 1.499 -2.657 1.583 -2.657H2.127L0.209 -0.307V0H2.978V-0.467H1.897C1.813 -0.467 1.73 -0.46 1.646 -0.46H1.039L2.957 -2.803Z' id='g0-122'/>
-</defs>
-<g id='page2'>
-<path d='M194.617 260.785V251.93M253.285 260.785V251.93M311.953 260.785V251.93M370.625 260.785V251.93M429.293 260.785V251.93M194.617 75.308V84.164M253.285 75.308V84.164M311.953 75.308V84.164M370.625 75.308V84.164M429.293 75.308V84.164' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M165.281 256.18V251.93M223.953 256.18V251.93M282.621 256.18V251.93M341.289 256.18V251.93M399.957 256.18V251.93M458.629 256.18V251.93M165.281 79.91V84.164M223.953 79.91V84.164M282.621 79.91V84.164M341.289 79.91V84.164M399.957 79.91V84.164M458.629 79.91V84.164' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 251.93H140.199M135.949 218.375H140.199M135.949 184.824H140.199M135.949 151.269H140.199M135.949 117.719H140.199M135.949 84.164H140.199M487.961 251.93H483.711M487.961 218.375H483.711M487.961 184.824H483.711M487.961 151.269H483.711M487.961 117.719H483.711M487.961 84.164H483.711' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 251.93V84.164H487.961V251.93H135.949Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -21.265 74.992)'>
-<use x='168.285' xlink:href='#g3-97' y='191.334'/>
-<use x='172.353' xlink:href='#g3-108' y='191.334'/>
-<use x='174.373' xlink:href='#g3-108' y='191.334'/>
-<use x='176.393' xlink:href='#g3-111' y='191.334'/>
-<use x='180.863' xlink:href='#g3-99' y='191.334'/>
-<use x='184.627' xlink:href='#g3-45' y='191.334'/>
-<use x='187.449' xlink:href='#g3-116' y='191.334'/>
-<use x='190.507' xlink:href='#g3-101' y='191.334'/>
-<use x='194.271' xlink:href='#g3-115' y='191.334'/>
-<use x='197.517' xlink:href='#g3-116' y='191.334'/>
-<use x='200.575' xlink:href='#g3-49' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 74.992)'>
-<use x='168.285' xlink:href='#g3-97' y='191.334'/>
-<use x='172.353' xlink:href='#g3-108' y='191.334'/>
-<use x='174.373' xlink:href='#g3-108' y='191.334'/>
-<use x='176.393' xlink:href='#g3-111' y='191.334'/>
-<use x='180.863' xlink:href='#g3-99' y='191.334'/>
-<use x='184.627' xlink:href='#g3-45' y='191.334'/>
-<use x='187.449' xlink:href='#g3-116' y='191.334'/>
-<use x='190.507' xlink:href='#g3-101' y='191.334'/>
-<use x='194.271' xlink:href='#g3-115' y='191.334'/>
-<use x='197.517' xlink:href='#g3-116' y='191.334'/>
-<use x='200.575' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 74.992)'>
-<use x='168.285' xlink:href='#g3-115' y='191.334'/>
-<use x='171.531' xlink:href='#g3-104' y='191.334'/>
-<use x='175.904' xlink:href='#g3-54' y='191.334'/>
-<use x='180.138' xlink:href='#g3-98' y='191.334'/>
-<use x='184.746' xlink:href='#g3-101' y='191.334'/>
-<use x='188.509' xlink:href='#g3-110' y='191.334'/>
-<use x='192.882' xlink:href='#g3-99' y='191.334'/>
-<use x='196.646' xlink:href='#g3-104' y='191.334'/>
-<use x='201.018' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 74.992)'>
-<use x='168.285' xlink:href='#g3-115' y='191.334'/>
-<use x='171.531' xlink:href='#g3-104' y='191.334'/>
-<use x='175.904' xlink:href='#g3-56' y='191.334'/>
-<use x='180.138' xlink:href='#g3-98' y='191.334'/>
-<use x='184.746' xlink:href='#g3-101' y='191.334'/>
-<use x='188.509' xlink:href='#g3-110' y='191.334'/>
-<use x='192.882' xlink:href='#g3-99' y='191.334'/>
-<use x='196.646' xlink:href='#g3-104' y='191.334'/>
-<use x='201.018' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 74.992)'>
-<use x='168.285' xlink:href='#g3-120' y='191.334'/>
-<use x='172.187' xlink:href='#g3-109' y='191.334'/>
-<use x='178.912' xlink:href='#g3-97' y='191.334'/>
-<use x='182.98' xlink:href='#g3-108' y='191.334'/>
-<use x='185' xlink:href='#g3-108' y='191.334'/>
-<use x='187.02' xlink:href='#g3-111' y='191.334'/>
-<use x='191.49' xlink:href='#g3-99' y='191.334'/>
-<use x='195.254' xlink:href='#g3-45' y='191.334'/>
-<use x='198.076' xlink:href='#g3-116' y='191.334'/>
-<use x='201.134' xlink:href='#g3-101' y='191.334'/>
-<use x='204.898' xlink:href='#g3-115' y='191.334'/>
-<use x='208.144' xlink:href='#g3-116' y='191.334'/>
-<use x='211.202' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 74.992)'>
-<use x='168.285' xlink:href='#g3-99' y='191.334'/>
-<use x='172.049' xlink:href='#g3-97' y='191.334'/>
-<use x='176.117' xlink:href='#g3-99' y='191.334'/>
-<use x='179.88' xlink:href='#g3-104' y='191.334'/>
-<use x='184.253' xlink:href='#g3-101' y='191.334'/>
-<use x='188.017' xlink:href='#g3-45' y='191.334'/>
-<use x='190.839' xlink:href='#g3-115' y='191.334'/>
-<use x='194.086' xlink:href='#g3-99' y='191.334'/>
-<use x='197.849' xlink:href='#g3-114' y='191.334'/>
-<use x='200.741' xlink:href='#g3-97' y='191.334'/>
-<use x='204.81' xlink:href='#g3-116' y='191.334'/>
-<use x='207.868' xlink:href='#g3-99' y='191.334'/>
-<use x='211.631' xlink:href='#g3-104' y='191.334'/>
-<use x='216.004' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 62.23)'>
-<use x='168.285' xlink:href='#g2-48' y='191.334'/>
-<use x='170.931' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 28.677)'>
-<use x='168.285' xlink:href='#g2-48' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-53' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -4.876)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -38.43)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-53' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.983)'>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -105.536)'>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-53' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<path clip-path='url(#clip2)' d='M135.949 184.824H487.961' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M142.742 251.93H145.981V184.824H142.742ZM201.41 251.93H204.649V184.824H201.41ZM260.078 251.93H263.317V184.824H260.078ZM318.75 251.93H321.988V184.824H318.75ZM377.418 251.93H380.656V184.824H377.418ZM436.086 251.93H439.324V184.824H436.086Z' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M142.742 251.93H145.981V184.824H142.742ZM201.41 251.93H204.649V184.824H201.41ZM260.078 251.93H263.317V184.824H260.078ZM318.75 251.93H321.988V184.824H318.75ZM377.418 251.93H380.656V184.824H377.418ZM436.086 251.93H439.324V184.824H436.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M144.359 184.824V184.758' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M144.359 184.824V184.758' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M142.367 184.758H146.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M144.359 184.824V184.891' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M144.359 184.824V184.891' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M146.352 184.891H142.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M203.031 184.824V184.621' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M203.031 184.824V184.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M201.039 184.621H205.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M203.031 184.824V185.023' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M203.031 184.824V185.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M205.023 185.023H201.035' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M261.699 184.824V179.855' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M261.699 184.824V179.855' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M259.707 179.855H263.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M261.699 184.824V189.789' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M261.699 184.824V189.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M263.691 189.789H259.707' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M320.367 184.824V184.824' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M318.375 184.824H322.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M320.367 184.824V184.824' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M318.375 184.824H322.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M379.035 184.824V184.152' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M379.035 184.824V184.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M377.043 184.152H381.031' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M379.035 184.824V185.492' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M379.035 184.824V185.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M381.027 185.492H377.043' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M437.707 184.824V179.254' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M437.707 184.824V179.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M435.715 179.254H439.699' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M437.707 184.824V190.394' fill='#993333'/>
-<path clip-path='url(#clip2)' d='M437.707 184.824V190.394' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M439.699 190.395H435.711' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M147.973 251.93H151.211V184.621H147.973ZM206.641 251.93H209.879V163.75H206.641ZM265.309 251.93H268.547V84.164H265.309ZM323.981 251.93H327.219V84.164H323.981ZM382.649 251.93H385.887V84.164H382.649ZM441.317 251.93H444.555V84.164H441.317Z' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M147.973 251.93H151.211V184.621H147.973ZM206.641 251.93H209.879V163.75H206.641ZM265.309 251.93H268.547V84.164H265.309ZM323.981 251.93H327.219V84.164H323.981ZM382.649 251.93H385.887V84.164H382.649ZM441.317 251.93H444.555V84.164H441.317Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M149.59 184.621V184.555' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M149.59 184.621V184.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M147.598 184.555H151.586' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M149.59 184.621V184.687' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M149.59 184.621V184.687' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M151.582 184.688H147.597' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M208.262 163.75V162.41' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M208.262 163.75V162.41' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M206.27 162.411H210.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M208.262 163.75V165.094' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M208.262 163.75V165.094' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M210.253 165.094H206.265' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M266.93 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M264.938 84.164H268.922' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M266.93 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M264.938 84.164H268.922' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M325.598 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M323.606 84.164H327.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M325.598 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M323.606 84.164H327.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M384.266 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M382.274 84.164H386.262' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M384.266 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M382.274 84.164H386.262' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M442.938 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M440.946 84.164H444.93' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M442.938 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip2)' d='M440.946 84.164H444.93' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M153.203 251.93H156.442V178.312H153.203ZM211.871 251.93H215.11V178.984H211.871ZM270.539 251.93H273.777V131.875H270.539ZM329.211 251.93H332.449V124.832H329.211ZM387.879 251.93H391.117V84.164H387.879ZM446.547 251.93H449.785V84.164H446.547Z' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M153.203 251.93H156.442V178.312H153.203ZM211.871 251.93H215.11V178.984H211.871ZM270.539 251.93H273.777V131.875H270.539ZM329.211 251.93H332.449V124.832H329.211ZM387.879 251.93H391.117V84.164H387.879ZM446.547 251.93H449.785V84.164H446.547Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M154.82 178.312V178.312' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M152.828 178.313H156.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M154.82 178.312V178.312' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M152.828 178.313H156.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M213.492 178.984V178.918' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M213.492 178.984V178.918' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M211.5 178.918H215.484' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M213.492 178.984V179.051' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M213.492 178.984V179.051' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M215.484 179.051H211.496' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M272.16 131.875V126.91' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M272.16 131.875V126.91' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M270.168 126.91H274.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M272.16 131.875V136.844' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M272.16 131.875V136.844' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M274.152 136.844H270.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M330.828 124.832V121.945' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M330.828 124.832V121.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M328.836 121.946H332.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M330.828 124.832V127.715' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M330.828 124.832V127.715' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M332.82 127.715H328.836' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M389.496 84.164V84.164' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M387.504 84.164H391.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M389.496 84.164V84.164' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M387.504 84.164H391.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M448.168 84.164V84.164' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M446.176 84.164H450.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M448.168 84.164V84.164' fill='#ffb733'/>
-<path clip-path='url(#clip2)' d='M446.176 84.164H450.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M158.434 251.93H161.672V164.422H158.434ZM217.102 251.93H220.34V166.57H217.102ZM275.77 251.93H279.008V84.164H275.77ZM334.442 251.93H337.68V97.383H334.442ZM393.109 251.93H396.348V130.535H393.109ZM451.777 251.93H455.016V184.824H451.777Z' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M158.434 251.93H161.672V164.422H158.434ZM217.102 251.93H220.34V166.57H217.102ZM275.77 251.93H279.008V84.164H275.77ZM334.442 251.93H337.68V97.383H334.442ZM393.109 251.93H396.348V130.535H393.109ZM451.777 251.93H455.016V184.824H451.777Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M160.051 164.422V164.355' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M160.051 164.422V164.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M158.058 164.356H162.046' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M160.051 164.422V164.488' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M160.051 164.422V164.488' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M162.043 164.488H158.058' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M218.723 166.57V166.57' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M216.73 166.57H220.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M218.723 166.57V166.57' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M216.73 166.57H220.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M277.391 84.164V84.164' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M275.398 84.164H279.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M277.391 84.164V84.164' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M275.398 84.164H279.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M336.059 97.383V93.558' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M336.059 97.383V93.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M334.066 93.559H338.05' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M336.059 97.383V101.207' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M336.059 97.383V101.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M338.05 101.207H334.066' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M394.727 130.535V129.996' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M394.727 130.535V129.996' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M392.734 129.996H396.722' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M394.727 130.535V131.07' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M394.727 130.535V131.07' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M396.718 131.07H392.734' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M453.399 184.824V179.254' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M453.399 184.824V179.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M451.406 179.254H455.39' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M453.399 184.824V190.394' fill='#bf80bf'/>
-<path clip-path='url(#clip2)' d='M453.399 184.824V190.394' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M455.39 190.395H451.402' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M163.664 251.93H166.903V178.449H163.664ZM222.332 251.93H225.57V182.34H222.332ZM281 251.93H284.238V160.129H281ZM339.672 251.93H342.91V179.723H339.672ZM398.34 251.93H401.578V183.211H398.34ZM457.008 251.93H460.246V180.863H457.008Z' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M163.664 251.93H166.903V178.449H163.664ZM222.332 251.93H225.57V182.34H222.332ZM281 251.93H284.238V160.129H281ZM339.672 251.93H342.91V179.723H339.672ZM398.34 251.93H401.578V183.211H398.34ZM457.008 251.93H460.246V180.863H457.008Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M165.281 178.449V178.379' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M165.281 178.449V178.379' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M163.289 178.379H167.277' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M165.281 178.449V178.516' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M165.281 178.449V178.516' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M167.274 178.516H163.289' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M223.953 182.34V182.004' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M223.953 182.34V182.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M221.961 182.004H225.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M223.953 182.34V182.676' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M223.953 182.34V182.676' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M225.945 182.676H221.957' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M282.621 160.129V155.164' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M282.621 160.129V155.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M280.629 155.164H284.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M282.621 160.129V165.094' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M282.621 160.129V165.094' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M284.613 165.094H280.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M341.289 179.723V178.312' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M341.289 179.723V178.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M339.297 178.313H343.281' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M341.289 179.723V181.133' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M341.289 179.723V181.133' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M343.281 181.133H339.297' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M399.957 183.211V182.207' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M399.957 183.211V182.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M397.965 182.207H401.953' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M399.957 183.211V184.219' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M399.957 183.211V184.219' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M401.949 184.219H397.965' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M458.629 180.863V171.199' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M458.629 180.863V171.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M456.637 171.2H460.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M458.629 180.863V190.527' fill='#dfbf9f'/>
-<path clip-path='url(#clip2)' d='M458.629 180.863V190.527' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M460.621 190.527H456.633' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M168.895 251.93H172.133V175.496H168.895ZM227.563 251.93H230.801V84.164H227.563ZM286.231 251.93H289.469V84.164H286.231ZM344.902 251.93H348.141V84.164H344.902ZM403.57 251.93H406.809V84.164H403.57ZM462.238 251.93H465.477V84.164H462.238Z' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M168.895 251.93H172.133V175.496H168.895ZM227.563 251.93H230.801V84.164H227.563ZM286.231 251.93H289.469V84.164H286.231ZM344.902 251.93H348.141V84.164H344.902ZM403.57 251.93H406.809V84.164H403.57ZM462.238 251.93H465.477V84.164H462.238Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M170.512 175.496V175.43' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M170.512 175.496V175.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M168.519 175.429H172.507' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M170.512 175.496V175.562' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M170.512 175.496V175.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M172.504 175.562H168.519' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M229.184 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M227.191 84.164H231.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M229.184 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M227.191 84.164H231.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M287.852 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M285.859 84.164H289.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M287.852 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M285.859 84.164H289.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M346.52 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M344.527 84.164H348.511' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M346.52 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M344.527 84.164H348.511' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M405.188 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M403.195 84.164H407.183' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M405.188 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M403.195 84.164H407.183' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M463.859 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M461.867 84.164H465.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M463.859 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip2)' d='M461.867 84.164H465.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M174.125 251.93H177.363V120.402H174.125ZM232.793 251.93H236.031V84.164H232.793ZM291.461 251.93H294.699V84.164H291.461ZM350.133 251.93H353.371V84.164H350.133ZM408.801 251.93H412.039V84.164H408.801ZM467.469 251.93H470.707V184.824H467.469Z' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M174.125 251.93H177.363V120.402H174.125ZM232.793 251.93H236.031V84.164H232.793ZM291.461 251.93H294.699V84.164H291.461ZM350.133 251.93H353.371V84.164H350.133ZM408.801 251.93H412.039V84.164H408.801ZM467.469 251.93H470.707V184.824H467.469Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M175.742 120.402V120.266' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M175.742 120.402V120.266' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M173.75 120.266H177.738' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M175.742 120.402V120.535' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M175.742 120.402V120.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M177.735 120.535H173.75' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M234.414 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M232.422 84.164H236.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M234.414 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M232.422 84.164H236.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M293.082 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M291.09 84.164H295.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M293.082 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M291.09 84.164H295.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M351.75 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M349.758 84.164H353.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M351.75 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M349.758 84.164H353.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M410.418 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M408.426 84.164H412.414' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M410.418 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M408.426 84.164H412.414' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M469.09 184.824V179.254' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M469.09 184.824V179.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M467.098 179.254H471.082' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M469.09 184.824V190.394' fill='#bfbf80'/>
-<path clip-path='url(#clip2)' d='M469.09 184.824V190.394' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M471.082 190.395H467.094' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M179.356 251.93H182.594V168.652H179.356ZM238.024 251.93H241.262V169.457H238.024ZM296.692 251.93H299.93V84.164H296.692ZM355.363 251.93H358.602V84.164H355.363ZM414.031 251.93H417.27V84.164H414.031ZM472.699 251.93H475.938V84.164H472.699Z' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M179.356 251.93H182.594V168.652H179.356ZM238.024 251.93H241.262V169.457H238.024ZM296.692 251.93H299.93V84.164H296.692ZM355.363 251.93H358.602V84.164H355.363ZM414.031 251.93H417.27V84.164H414.031ZM472.699 251.93H475.938V84.164H472.699Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M180.973 168.652V168.582' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M180.973 168.652V168.582' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M178.98 168.582H182.968' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M180.973 168.652V168.719' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M180.973 168.652V168.719' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M182.965 168.719H178.98' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M239.645 169.457V169.387' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M239.645 169.457V169.387' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M237.652 169.387H241.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M239.645 169.457V169.523' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M239.645 169.457V169.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M241.633 169.524H237.648' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M298.313 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M296.32 84.164H300.304' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M298.313 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M296.32 84.164H300.304' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M356.981 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M354.988 84.164H358.972' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M356.981 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M354.988 84.164H358.972' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M415.649 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M413.656 84.164H417.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M415.649 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M413.656 84.164H417.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M474.32 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M472.328 84.164H476.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M474.32 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip2)' d='M472.328 84.164H476.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M184.586 251.93H187.824V176.301H184.586ZM243.254 251.93H246.492V177.309H243.254ZM301.922 251.93H305.16V84.164H301.922ZM360.594 251.93H363.832V84.164H360.594ZM419.262 251.93H422.5V143.621H419.262ZM477.93 251.93H481.168V176.906H477.93Z' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M184.586 251.93H187.824V176.301H184.586ZM243.254 251.93H246.492V177.309H243.254ZM301.922 251.93H305.16V84.164H301.922ZM360.594 251.93H363.832V84.164H360.594ZM419.262 251.93H422.5V143.621H419.262ZM477.93 251.93H481.168V176.906H477.93Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M186.203 176.301V175.965' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M186.203 176.301V175.965' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M184.211 175.965H188.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M186.203 176.301V176.637' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M186.203 176.301V176.637' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M188.196 176.637H184.211' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M244.875 177.309V177.172' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M244.875 177.309V177.172' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M242.883 177.172H246.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M244.875 177.309V177.441' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M244.875 177.309V177.441' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M246.864 177.441H242.879' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M303.543 84.164V84.164' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M301.551 84.164H305.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M303.543 84.164V84.164' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M301.551 84.164H305.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M362.211 84.164V84.164' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M360.219 84.164H364.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M362.211 84.164V84.164' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M360.219 84.164H364.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M420.879 143.621V142.746' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M420.879 143.621V142.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M418.887 142.746H422.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M420.879 143.621V144.492' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M420.879 143.621V144.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M422.871 144.492H418.887' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M479.551 176.906V171.336' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M479.551 176.906V171.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M477.559 171.336H481.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M479.551 176.906V182.473' fill='#bf8080'/>
-<path clip-path='url(#clip2)' d='M479.551 176.906V182.473' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M481.543 182.472H477.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M420.539 312.98H487.762V278.973H420.539Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 255.575 118.327)'>
-<use x='168.285' xlink:href='#g2-99' y='167.424'/>
-<use x='170.637' xlink:href='#g2-53' y='167.424'/>
-<use x='173.284' xlink:href='#g2-45' y='167.424'/>
-<use x='175.048' xlink:href='#g2-49' y='167.424'/>
-<use x='177.694' xlink:href='#g2-56' y='167.424'/>
-<use x='180.341' xlink:href='#g2-120' y='167.424'/>
-<use x='182.779' xlink:href='#g2-108' y='167.424'/>
-<use x='184.042' xlink:href='#g2-97' y='167.424'/>
-<use x='186.438' xlink:href='#g2-114' y='167.424'/>
-<use x='188.245' xlink:href='#g2-103' y='167.424'/>
-<use x='190.891' xlink:href='#g2-101' y='167.424'/>
-<use x='193.244' xlink:href='#g2-44' y='167.424'/>
-<use x='196.478' xlink:href='#g2-49' y='167.424'/>
-<use x='199.124' xlink:href='#g2-52' y='167.424'/>
-<use x='201.771' xlink:href='#g2-52' y='167.424'/>
-<use x='204.417' xlink:href='#g2-71' y='167.424'/>
-<use x='207.946' xlink:href='#g2-98' y='167.424'/>
-<use x='168.285' xlink:href='#g2-55' y='173.401'/>
-<use x='170.931' xlink:href='#g2-50' y='173.401'/>
-<use x='175.342' xlink:href='#g2-112' y='173.401'/>
-<use x='177.928' xlink:href='#g2-114' y='173.401'/>
-<use x='179.735' xlink:href='#g2-111' y='173.401'/>
-<use x='182.529' xlink:href='#g2-99' y='173.401'/>
-<use x='186.645' xlink:href='#g2-73' y='173.401'/>
-<use x='188.115' xlink:href='#g2-110' y='173.401'/>
-<use x='190.848' xlink:href='#g2-116' y='173.401'/>
-<use x='192.759' xlink:href='#g2-101' y='173.401'/>
-<use x='195.112' xlink:href='#g2-108' y='173.401'/>
-<use x='198.139' xlink:href='#g2-88' y='173.401'/>
-<use x='201.667' xlink:href='#g2-101' y='173.401'/>
-<use x='204.019' xlink:href='#g2-111' y='173.401'/>
-<use x='206.666' xlink:href='#g2-110' y='173.401'/>
-<use x='211.163' xlink:href='#g2-64' y='173.401'/>
-<use x='214.691' xlink:href='#g2-51' y='173.401'/>
-<use x='217.338' xlink:href='#g2-71' y='173.401'/>
-<use x='220.866' xlink:href='#g2-104' y='173.401'/>
-<use x='223.599' xlink:href='#g2-122' y='173.401'/>
-<use x='168.285' xlink:href='#g2-85' y='179.379'/>
-<use x='171.917' xlink:href='#g2-98' y='179.379'/>
-<use x='174.65' xlink:href='#g2-117' y='179.379'/>
-<use x='177.383' xlink:href='#g2-110' y='179.379'/>
-<use x='180.116' xlink:href='#g2-116' y='179.379'/>
-<use x='182.027' xlink:href='#g2-117' y='179.379'/>
-<use x='186.524' xlink:href='#g2-49' y='179.379'/>
-<use x='189.17' xlink:href='#g2-56' y='179.379'/>
-<use x='191.817' xlink:href='#g2-46' y='179.379'/>
-<use x='193.287' xlink:href='#g2-48' y='179.379'/>
-<use x='195.933' xlink:href='#g2-52' y='179.379'/>
-<use x='198.58' xlink:href='#g2-46' y='179.379'/>
-<use x='200.05' xlink:href='#g2-49' y='179.379'/>
-<use x='202.696' xlink:href='#g2-44' y='179.379'/>
-<use x='205.931' xlink:href='#g2-71' y='179.379'/>
-<use x='209.459' xlink:href='#g2-67' y='179.379'/>
-<use x='212.841' xlink:href='#g2-67' y='179.379'/>
-<use x='217.986' xlink:href='#g2-55' y='179.379'/>
-<use x='220.633' xlink:href='#g2-46' y='179.379'/>
-<use x='222.103' xlink:href='#g2-52' y='179.379'/>
-<use x='224.749' xlink:href='#g2-46' y='179.379'/>
-<use x='226.219' xlink:href='#g2-48' y='179.379'/>
-<use x='168.285' xlink:href='#g2-51' y='185.357'/>
-<use x='170.931' xlink:href='#g2-54' y='185.357'/>
-<use x='175.342' xlink:href='#g2-99' y='185.357'/>
-<use x='177.694' xlink:href='#g2-111' y='185.357'/>
-<use x='180.193' xlink:href='#g2-114' y='185.357'/>
-<use x='182.001' xlink:href='#g2-101' y='185.357'/>
-<use x='184.353' xlink:href='#g2-115' y='185.357'/>
-<use x='188.146' xlink:href='#g2-111' y='185.357'/>
-<use x='190.793' xlink:href='#g2-110' y='185.357'/>
-<use x='195.29' xlink:href='#g2-50' y='185.357'/>
-<use x='199.7' xlink:href='#g2-110' y='185.357'/>
-<use x='202.433' xlink:href='#g2-117' y='185.357'/>
-<use x='205.166' xlink:href='#g2-109' y='185.357'/>
-<use x='209.369' xlink:href='#g2-97' y='185.357'/>
-<use x='213.676' xlink:href='#g2-110' y='185.357'/>
-<use x='216.409' xlink:href='#g2-111' y='185.357'/>
-<use x='219.202' xlink:href='#g2-100' y='185.357'/>
-<use x='221.935' xlink:href='#g2-101' y='185.357'/>
-<use x='224.287' xlink:href='#g2-115' y='185.357'/>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-48' y='191.334'/>
-<use x='173.578' xlink:href='#g2-50' y='191.334'/>
-<use x='176.224' xlink:href='#g2-48' y='191.334'/>
-<use x='178.87' xlink:href='#g2-45' y='191.334'/>
-<use x='180.635' xlink:href='#g2-48' y='191.334'/>
-<use x='183.281' xlink:href='#g2-49' y='191.334'/>
-<use x='185.927' xlink:href='#g2-45' y='191.334'/>
-<use x='187.692' xlink:href='#g2-49' y='191.334'/>
-<use x='190.338' xlink:href='#g2-56' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -45.339 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 13.33 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 71.999 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 130.668 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 189.337 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 248.006 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -40.108 346.703)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 18.561 325.833)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-51' y='191.334'/>
-<use x='175.048' xlink:href='#g2-49' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 77.23 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-50' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-56' y='191.334'/>
-<use x='180.675' xlink:href='#g2-52' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 135.899 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-49' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-51' y='191.334'/>
-<use x='183.321' xlink:href='#g2-50' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 194.568 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-49' y='191.334'/>
-<use x='179.205' xlink:href='#g2-51' y='191.334'/>
-<use x='181.851' xlink:href='#g2-46' y='191.334'/>
-<use x='183.321' xlink:href='#g2-55' y='191.334'/>
-<use x='185.968' xlink:href='#g2-49' y='191.334'/>
-<use x='188.614' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 253.236 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-50' y='191.334'/>
-<use x='176.558' xlink:href='#g2-56' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-55' y='191.334'/>
-<use x='183.321' xlink:href='#g2-54' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -34.878 340.395)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 23.791 341.066)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-57' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 82.46 293.957)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-55' y='191.334'/>
-<use x='175.048' xlink:href='#g2-57' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 141.129 286.911)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-56' y='191.334'/>
-<use x='175.048' xlink:href='#g2-57' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 199.798 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-49' y='191.334'/>
-<use x='176.558' xlink:href='#g2-48' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-52' y='191.334'/>
-<use x='183.321' xlink:href='#g2-52' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 258.467 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-50' y='191.334'/>
-<use x='176.558' xlink:href='#g2-56' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-53' y='191.334'/>
-<use x='183.321' xlink:href='#g2-51' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -29.648 326.504)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-51' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 29.021 328.651)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-50' y='191.334'/>
-<use x='175.048' xlink:href='#g2-55' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 87.69 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-50' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-54' y='191.334'/>
-<use x='180.675' xlink:href='#g2-56' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 146.359 259.465)'>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-51' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 205.028 292.615)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-56' y='191.334'/>
-<use x='175.048' xlink:href='#g2-49' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 263.697 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -24.417 340.529)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 34.252 344.421)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-52' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.921 322.209)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-51' y='191.334'/>
-<use x='175.048' xlink:href='#g2-55' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 151.59 341.804)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-56' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 210.259 345.293)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-50' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 268.928 342.945)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-54' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -19.187 337.576)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-52' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 39.482 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-54' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-50' y='191.334'/>
-<use x='180.675' xlink:href='#g2-56' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 98.151 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-54' y='191.334'/>
-<use x='176.558' xlink:href='#g2-48' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-48' y='191.334'/>
-<use x='183.321' xlink:href='#g2-48' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 156.82 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-50' y='191.334'/>
-<use x='176.558' xlink:href='#g2-49' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-55' y='191.334'/>
-<use x='183.321' xlink:href='#g2-57' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 215.489 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-48' y='191.334'/>
-<use x='179.205' xlink:href='#g2-55' y='191.334'/>
-<use x='181.851' xlink:href='#g2-46' y='191.334'/>
-<use x='183.321' xlink:href='#g2-48' y='191.334'/>
-<use x='185.968' xlink:href='#g2-50' y='191.334'/>
-<use x='188.614' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 274.158 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-49' y='191.334'/>
-<use x='176.558' xlink:href='#g2-51' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-51' y='191.334'/>
-<use x='183.321' xlink:href='#g2-53' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -13.956 282.482)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-57' y='191.334'/>
-<use x='175.048' xlink:href='#g2-54' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 44.713 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-52' y='191.334'/>
-<use x='176.558' xlink:href='#g2-50' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-53' y='191.334'/>
-<use x='183.321' xlink:href='#g2-56' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 103.382 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-50' y='191.334'/>
-<use x='176.558' xlink:href='#g2-50' y='191.334'/>
-<use x='179.205' xlink:href='#g2-57' y='191.334'/>
-<use x='181.851' xlink:href='#g2-46' y='191.334'/>
-<use x='183.321' xlink:href='#g2-53' y='191.334'/>
-<use x='185.968' xlink:href='#g2-56' y='191.334'/>
-<use x='188.614' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 162.051 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-55' y='191.334'/>
-<use x='176.558' xlink:href='#g2-51' y='191.334'/>
-<use x='179.205' xlink:href='#g2-53' y='191.334'/>
-<use x='181.851' xlink:href='#g2-46' y='191.334'/>
-<use x='183.321' xlink:href='#g2-50' y='191.334'/>
-<use x='185.968' xlink:href='#g2-55' y='191.334'/>
-<use x='188.614' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 220.72 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-50' y='191.334'/>
-<use x='179.205' xlink:href='#g2-52' y='191.334'/>
-<use x='181.851' xlink:href='#g2-46' y='191.334'/>
-<use x='183.321' xlink:href='#g2-54' y='191.334'/>
-<use x='185.968' xlink:href='#g2-55' y='191.334'/>
-<use x='188.614' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 279.389 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -8.726 330.731)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-50' y='191.334'/>
-<use x='175.048' xlink:href='#g2-52' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.943 331.537)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-50' y='191.334'/>
-<use x='175.048' xlink:href='#g2-51' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 108.612 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-52' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-54' y='191.334'/>
-<use x='183.321' xlink:href='#g2-56' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 167.281 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-55' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-50' y='191.334'/>
-<use x='180.675' xlink:href='#g2-57' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.95 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-52' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-49' y='191.334'/>
-<use x='180.675' xlink:href='#g2-51' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 284.619 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-49' y='191.334'/>
-<use x='176.558' xlink:href='#g2-49' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-52' y='191.334'/>
-<use x='183.321' xlink:href='#g2-55' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -3.495 338.381)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-51' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 55.174 339.388)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-49' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.843 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-52' y='191.334'/>
-<use x='180.675' xlink:href='#g2-50' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 172.512 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-53' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-50' y='191.334'/>
-<use x='180.675' xlink:href='#g2-55' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 231.181 305.701)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-54' y='191.334'/>
-<use x='175.048' xlink:href='#g2-49' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 289.85 338.985)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-50' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.176 391.591)'>
-<use x='168.285' xlink:href='#g1-82' y='191.334'/>
-<use x='174.255' xlink:href='#g1-101' y='191.334'/>
-<use x='178.351' xlink:href='#g1-108' y='191.334'/>
-<use x='180.551' xlink:href='#g1-97' y='191.334'/>
-<use x='184.979' xlink:href='#g1-116' y='191.334'/>
-<use x='188.307' xlink:href='#g1-105' y='191.334'/>
-<use x='190.507' xlink:href='#g1-118' y='191.334'/>
-<use x='194.755' xlink:href='#g1-101' y='191.334'/>
-<use x='201.922' xlink:href='#g1-116' y='191.334'/>
-<use x='205.25' xlink:href='#g1-105' y='191.334'/>
-<use x='207.45' xlink:href='#g1-109' y='191.334'/>
-<use x='214.77' xlink:href='#g1-101' y='191.334'/>
-<use x='221.937' xlink:href='#g3-40' y='191.334'/>
-<use x='225.231' xlink:href='#g3-108' y='191.334'/>
-<use x='227.251' xlink:href='#g3-111' y='191.334'/>
-<use x='231.25' xlink:href='#g3-119' y='191.334'/>
-<use x='236.799' xlink:href='#g3-101' y='191.334'/>
-<use x='240.562' xlink:href='#g3-114' y='191.334'/>
-<use x='246.277' xlink:href='#g3-105' y='191.334'/>
-<use x='248.297' xlink:href='#g3-115' y='191.334'/>
-<use x='254.366' xlink:href='#g3-98' y='191.334'/>
-<use x='258.974' xlink:href='#g3-101' y='191.334'/>
-<use x='262.738' xlink:href='#g3-116' y='191.334'/>
-<use x='265.796' xlink:href='#g3-116' y='191.334'/>
-<use x='268.854' xlink:href='#g3-101' y='191.334'/>
-<use x='272.618' xlink:href='#g3-114' y='191.334'/>
-<use x='275.51' xlink:href='#g3-41' y='191.334'/>
-</g>
-<path d='M136.149 312.324H341.363V282.324H136.149Z' fill='#ffffff'/>
-<path d='M136.149 312.324H341.363V282.324H136.149Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path d='M139.336 292.816H142.324V284.844H139.336ZM145.313 292.816H148.301V286.836H145.313Z' fill='#993333'/>
-<path d='M139.336 292.816H142.324V284.844H139.336ZM145.313 292.816H148.301V286.836H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -40.354 114.479)'>
-<use x='195.372' xlink:href='#g3-120' y='178.327'/>
-<use x='199.274' xlink:href='#g3-109' y='178.327'/>
-<use x='205.999' xlink:href='#g3-105' y='178.327'/>
-<use x='208.019' xlink:href='#g3-58' y='178.327'/>
-<use x='210.371' xlink:href='#g0-57' y='178.327'/>
-<use x='214.076' xlink:href='#g0-57' y='178.327'/>
-</g>
-<path d='M184.145 292.816H187.133V284.844H184.145ZM190.121 292.816H193.109V286.836H190.121Z' fill='#8080bf'/>
-<path d='M184.145 292.816H187.133V284.844H184.145ZM190.121 292.816H193.109V286.836H190.121Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.441 114.036)'>
-<use x='239.382' xlink:href='#g3-116' y='178.327'/>
-<use x='242.44' xlink:href='#g3-99' y='178.327'/>
-<use x='246.204' xlink:href='#g3-58' y='178.327'/>
-<use x='248.556' xlink:href='#g0-53' y='178.327'/>
-<use x='252.261' xlink:href='#g0-55' y='178.327'/>
-</g>
-<path d='M227.356 292.816H230.344V284.844H227.356ZM233.332 292.816H236.32V286.836H233.332Z' fill='#ffb733'/>
-<path d='M227.356 292.816H230.344V284.844H227.356ZM233.332 292.816H236.32V286.836H233.332Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.04 114.479)'>
-<use x='281.863' xlink:href='#g3-106' y='178.327'/>
-<use x='284.119' xlink:href='#g3-101' y='178.327'/>
-<use x='287.882' xlink:href='#g3-58' y='178.327'/>
-<use x='290.235' xlink:href='#g0-53' y='178.327'/>
-<use x='293.94' xlink:href='#g0-56' y='178.327'/>
-</g>
-<path d='M269.106 292.816H272.094V284.844H269.106ZM275.086 292.816H278.074V286.836H275.086Z' fill='#bf80bf'/>
-<path d='M269.106 292.816H272.094V284.844H269.106ZM275.086 292.816H278.074V286.836H275.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -39.932 114.515)'>
-<use x='321.287' xlink:href='#g3-116' y='178.327'/>
-<use x='324.345' xlink:href='#g3-98' y='178.327'/>
-<use x='328.717' xlink:href='#g3-98' y='178.327'/>
-<use x='333.09' xlink:href='#g3-58' y='178.327'/>
-<use x='335.442' xlink:href='#g0-53' y='178.327'/>
-<use x='339.147' xlink:href='#g0-56' y='178.327'/>
-</g>
-<path d='M306.203 292.816H309.191V284.844H306.203ZM312.18 292.816H315.168V286.836H312.18Z' fill='#dfbf9f'/>
-<path d='M306.203 292.816H309.191V284.844H306.203ZM312.18 292.816H315.168V286.836H312.18Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.662 114.036)'>
-<use x='356.019' xlink:href='#g3-114' y='178.327'/>
-<use x='358.911' xlink:href='#g3-112' y='178.327'/>
-<use x='363.284' xlink:href='#g3-58' y='178.327'/>
-<use x='365.636' xlink:href='#g0-56' y='178.327'/>
-<use x='369.341' xlink:href='#g0-49' y='178.327'/>
-</g>
-<path d='M139.336 305.82H142.324V297.852H139.336ZM145.313 305.82H148.301V299.844H145.313Z' fill='#80bf80'/>
-<path d='M139.336 305.82H142.324V297.852H139.336ZM145.313 305.82H148.301V299.844H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -43.882 114.515)'>
-<use x='195.372' xlink:href='#g3-104' y='191.334'/>
-<use x='199.744' xlink:href='#g3-111' y='191.334'/>
-<use x='203.978' xlink:href='#g3-97' y='191.334'/>
-<use x='207.811' xlink:href='#g3-114' y='191.334'/>
-<use x='210.703' xlink:href='#g3-100' y='191.334'/>
-<use x='215.076' xlink:href='#g3-58' y='191.334'/>
-<use x='217.428' xlink:href='#g0-51' y='191.334'/>
-<use x='221.133' xlink:href='#g0-51' y='191.334'/>
-</g>
-<path d='M184.145 305.82H187.133V297.852H184.145ZM190.121 305.82H193.109V299.844H190.121Z' fill='#bfbf80'/>
-<path d='M184.145 305.82H187.133V297.852H184.145ZM190.121 305.82H193.109V299.844H190.121Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -43.084 114.515)'>
-<use x='239.382' xlink:href='#g3-109' y='191.334'/>
-<use x='246.107' xlink:href='#g3-101' y='191.334'/>
-<use x='249.871' xlink:href='#g3-115' y='191.334'/>
-<use x='253.117' xlink:href='#g3-104' y='191.334'/>
-<use x='257.489' xlink:href='#g3-58' y='191.334'/>
-<use x='259.842' xlink:href='#g0-50' y='191.334'/>
-<use x='263.547' xlink:href='#g0-56' y='191.334'/>
-</g>
-<path d='M227.356 305.82H230.344V297.852H227.356ZM233.332 305.82H236.32V299.844H233.332Z' fill='#339999'/>
-<path d='M227.356 305.82H230.344V297.852H227.356ZM233.332 305.82H236.32V299.844H233.332Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -42.353 114.515)'>
-<use x='281.863' xlink:href='#g3-103' y='191.334'/>
-<use x='286.097' xlink:href='#g3-108' y='191.334'/>
-<use x='288.118' xlink:href='#g3-105' y='191.334'/>
-<use x='290.138' xlink:href='#g3-98' y='191.334'/>
-<use x='294.746' xlink:href='#g3-99' y='191.334'/>
-<use x='298.509' xlink:href='#g3-58' y='191.334'/>
-<use x='300.862' xlink:href='#g0-52' y='191.334'/>
-<use x='304.567' xlink:href='#g0-55' y='191.334'/>
-</g>
-<path d='M269.106 305.82H272.094V297.852H269.106ZM275.086 305.82H278.074V299.844H275.086Z' fill='#bf8080'/>
-<path d='M269.106 305.82H272.094V297.852H269.106ZM275.086 305.82H278.074V299.844H275.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -40.026 114.479)'>
-<use x='321.287' xlink:href='#g3-115' y='191.334'/>
-<use x='324.533' xlink:href='#g3-109' y='191.334'/>
-<use x='331.258' xlink:href='#g3-105' y='191.334'/>
-<use x='333.278' xlink:href='#g3-58' y='191.334'/>
-<use x='335.63' xlink:href='#g0-54' y='191.334'/>
-<use x='339.335' xlink:href='#g0-55' y='191.334'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-a.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-a.svg
deleted file mode 100644
index 393bfad..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-a.svg
+++ /dev/null
@@ -1,757 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='193.064pt' version='1.1' viewBox='52.938 51.67 381.624 193.064' width='381.624pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip7'>
-<path d='M82.148 228.594H434.164V60.828H82.148Z'/>
-</clipPath>
-<use id='g3-40' transform='scale(1.143)' xlink:href='#g0-40'/>
-<use id='g3-41' transform='scale(1.143)' xlink:href='#g0-41'/>
-<use id='g3-78' transform='scale(1.143)' xlink:href='#g0-78'/>
-<use id='g3-97' transform='scale(1.143)' xlink:href='#g0-97'/>
-<use id='g3-98' transform='scale(1.143)' xlink:href='#g0-98'/>
-<use id='g3-99' transform='scale(1.143)' xlink:href='#g0-99'/>
-<use id='g3-100' transform='scale(1.143)' xlink:href='#g0-100'/>
-<use id='g3-101' transform='scale(1.143)' xlink:href='#g0-101'/>
-<use id='g3-102' transform='scale(1.143)' xlink:href='#g0-102'/>
-<use id='g3-105' transform='scale(1.143)' xlink:href='#g0-105'/>
-<use id='g3-108' transform='scale(1.143)' xlink:href='#g0-108'/>
-<use id='g3-109' transform='scale(1.143)' xlink:href='#g0-109'/>
-<use id='g3-110' transform='scale(1.143)' xlink:href='#g0-110'/>
-<use id='g3-111' transform='scale(1.143)' xlink:href='#g0-111'/>
-<use id='g3-112' transform='scale(1.143)' xlink:href='#g0-112'/>
-<use id='g3-114' transform='scale(1.143)' xlink:href='#g0-114'/>
-<use id='g3-115' transform='scale(1.143)' xlink:href='#g0-115'/>
-<use id='g3-116' transform='scale(1.143)' xlink:href='#g0-116'/>
-<use id='g3-119' transform='scale(1.143)' xlink:href='#g0-119'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g1-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g1-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g1-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g1-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g1-108'/>
-<path d='M1.462 -1.91C1.462 -2.851 2.197 -3.425 3.013 -3.434V-4.08C2.367 -4.071 1.775 -3.748 1.408 -3.219V-4.035H0.744V0H1.462V-1.91Z' id='g1-114'/>
-<path d='M3.165 -3.847C2.609 -4.098 2.197 -4.133 1.829 -4.133C1.623 -4.133 0.305 -4.133 0.305 -2.95C0.305 -2.52 0.565 -2.251 0.664 -2.152C1.004 -1.856 1.237 -1.811 1.847 -1.695C2.134 -1.641 2.645 -1.542 2.645 -1.085C2.645 -0.502 1.919 -0.502 1.802 -0.502C1.273 -0.502 0.762 -0.681 0.377 -0.95L0.26 -0.296C0.798 -0.009 1.345 0.099 1.802 0.099C2.385 0.099 3.318 -0.09 3.318 -1.157C3.318 -1.47 3.192 -1.784 2.878 -2.053C2.573 -2.313 2.304 -2.367 1.748 -2.475C1.426 -2.537 0.977 -2.618 0.977 -3.04C0.977 -3.569 1.614 -3.569 1.748 -3.569C2.403 -3.569 2.789 -3.362 3.049 -3.219L3.165 -3.847Z' id='g1-115'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g1-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g1-118'/>
-<use id='g2-46' transform='scale(0.714)' xlink:href='#g0-46'/>
-<use id='g2-48' transform='scale(0.714)' xlink:href='#g0-48'/>
-<use id='g2-49' transform='scale(0.714)' xlink:href='#g0-49'/>
-<use id='g2-50' transform='scale(0.714)' xlink:href='#g0-50'/>
-<use id='g2-51' transform='scale(0.714)' xlink:href='#g0-51'/>
-<use id='g2-52' transform='scale(0.714)' xlink:href='#g0-52'/>
-<use id='g2-53' transform='scale(0.714)' xlink:href='#g0-53'/>
-<use id='g2-54' transform='scale(0.714)' xlink:href='#g0-54'/>
-<use id='g2-55' transform='scale(0.714)' xlink:href='#g0-55'/>
-<use id='g2-56' transform='scale(0.714)' xlink:href='#g0-56'/>
-<use id='g2-57' transform='scale(0.714)' xlink:href='#g0-57'/>
-<use id='g2-120' transform='scale(0.714)' xlink:href='#g0-120'/>
-<path d='M2.127 -5.23C2.008 -5.23 1.995 -5.23 1.911 -5.154C1.032 -4.387 0.586 -3.145 0.586 -1.743C0.586 -0.425 0.983 0.844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 0.063C1.276 -0.481 1.193 -1.053 1.193 -1.743C1.193 -4.156 2.322 -5.112 2.462 -5.23H2.127Z' id='g0-40'/>
-<path d='M0.746 1.743C0.865 1.743 0.879 1.743 0.962 1.667C1.841 0.9 2.287 -0.342 2.287 -1.743C2.287 -3.062 1.89 -4.331 0.969 -5.14C0.879 -5.23 0.865 -5.23 0.746 -5.23H0.411C0.432 -5.216 1.109 -4.638 1.43 -3.55C1.597 -3.006 1.681 -2.434 1.681 -1.743C1.681 0.669 0.551 1.625 0.411 1.743H0.746Z' id='g0-41'/>
-<path d='M1.339 -0.628H0.711V0H1.339V-0.628Z' id='g0-46'/>
-<path d='M3.403 -2.267C3.403 -2.601 3.403 -3.417 3.075 -3.989C2.72 -4.617 2.183 -4.721 1.848 -4.721C1.534 -4.721 0.99 -4.624 0.642 -4.024C0.307 -3.466 0.293 -2.706 0.293 -2.267C0.293 -1.75 0.321 -1.116 0.614 -0.586C0.921 -0.021 1.437 0.146 1.848 0.146C2.545 0.146 2.929 -0.258 3.138 -0.697C3.382 -1.193 3.403 -1.834 3.403 -2.267ZM1.848 -0.314C1.555 -0.314 1.22 -0.481 1.046 -0.983C0.907 -1.409 0.9 -1.848 0.9 -2.357C0.9 -2.999 0.9 -4.261 1.848 -4.261S2.797 -2.999 2.797 -2.357C2.797 -1.897 2.797 -1.374 2.629 -0.928C2.434 -0.425 2.078 -0.314 1.848 -0.314Z' id='g0-48'/>
-<path d='M2.239 -4.721H2.085C1.632 -4.303 1.06 -4.275 0.642 -4.261V-3.822C0.914 -3.829 1.262 -3.843 1.611 -3.982V-0.439H0.683V0H3.166V-0.439H2.239V-4.721Z' id='g0-49'/>
-<path d='M1.974 -0.537C1.89 -0.537 1.806 -0.53 1.723 -0.53H0.928L2.008 -1.485C2.134 -1.597 2.476 -1.855 2.608 -1.967C2.915 -2.246 3.327 -2.608 3.327 -3.215C3.327 -4.003 2.741 -4.721 1.743 -4.721C1.004 -4.721 0.544 -4.324 0.307 -3.612L0.635 -3.201C0.795 -3.787 1.039 -4.24 1.646 -4.24C2.232 -4.24 2.678 -3.829 2.678 -3.201C2.678 -2.622 2.336 -2.294 1.918 -1.897C1.778 -1.757 1.402 -1.444 1.255 -1.304C1.053 -1.123 0.572 -0.656 0.37 -0.481V0H3.327V-0.537H1.974Z' id='g0-50'/>
-<path d='M0.697 -3.578C0.983 -4.135 1.485 -4.289 1.82 -4.289C2.232 -4.289 2.538 -4.052 2.538 -3.654C2.538 -3.285 2.287 -2.831 1.757 -2.741C1.723 -2.734 1.695 -2.734 1.234 -2.699V-2.239H1.778C2.441 -2.239 2.685 -1.716 2.685 -1.276C2.685 -0.732 2.35 -0.314 1.806 -0.314C1.311 -0.314 0.746 -0.551 0.398 -0.997L0.307 -0.544C0.711 -0.091 1.276 0.146 1.82 0.146C2.734 0.146 3.389 -0.537 3.389 -1.269C3.389 -1.841 2.929 -2.301 2.378 -2.462C2.908 -2.734 3.18 -3.201 3.18 -3.654C3.18 -4.247 2.573 -4.721 1.827 -4.721C1.213 -4.721 0.704 -4.4 0.411 -3.982L0.697 -3.578Z' id='g0-51'/>
-<path d='M2.762 -1.165H3.487V-1.625H2.762V-4.575H2.071L0.209 -1.625V-1.165H2.162V0H2.762V-1.165ZM0.802 -1.625C1.011 -1.953 2.211 -3.815 2.211 -4.233V-1.625H0.802Z' id='g0-52'/>
-<path d='M1.144 -4.094H3.075V-4.575H0.586V-1.967H1.095C1.262 -2.343 1.59 -2.511 1.904 -2.511C2.19 -2.511 2.622 -2.315 2.622 -1.43C2.622 -0.516 2.043 -0.314 1.688 -0.314C1.227 -0.314 0.781 -0.558 0.544 -0.955L0.279 -0.537C0.621 -0.112 1.137 0.146 1.688 0.146C2.608 0.146 3.327 -0.565 3.327 -1.416C3.327 -2.28 2.685 -2.971 1.918 -2.971C1.618 -2.971 1.353 -2.866 1.144 -2.692V-4.094Z' id='g0-53'/>
-<path d='M3.062 -4.582C2.685 -4.721 2.42 -4.721 2.287 -4.721C1.227 -4.721 0.307 -3.724 0.307 -2.253C0.307 -0.363 1.158 0.146 1.862 0.146C2.427 0.146 2.72 -0.119 2.936 -0.342C3.382 -0.816 3.389 -1.311 3.389 -1.555C3.389 -2.469 2.894 -3.229 2.218 -3.229C1.534 -3.229 1.165 -2.873 0.962 -2.671C1.053 -3.626 1.541 -4.289 2.294 -4.289C2.434 -4.289 2.713 -4.275 3.062 -4.142V-4.582ZM0.969 -1.534C0.969 -1.576 0.969 -1.681 0.976 -1.716C0.976 -2.19 1.276 -2.769 1.897 -2.769C2.748 -2.769 2.748 -1.792 2.748 -1.555C2.748 -1.29 2.748 -0.997 2.559 -0.704C2.392 -0.453 2.183 -0.314 1.862 -0.314C1.123 -0.314 1.004 -1.227 0.969 -1.534Z' id='g0-54'/>
-<path d='M1.723 -4.038C1.806 -4.038 1.89 -4.045 1.974 -4.045H2.852C1.792 -3.006 1.116 -1.548 1.116 0.07H1.771C1.771 -1.967 2.762 -3.431 3.389 -4.087V-4.575H0.307V-4.038H1.723Z' id='g0-55'/>
-<path d='M2.385 -2.469C2.845 -2.615 3.285 -2.985 3.285 -3.501C3.285 -4.135 2.678 -4.721 1.848 -4.721S0.411 -4.135 0.411 -3.501C0.411 -2.978 0.865 -2.608 1.311 -2.469C0.697 -2.28 0.307 -1.806 0.307 -1.269C0.307 -0.523 0.969 0.146 1.848 0.146S3.389 -0.523 3.389 -1.269C3.389 -1.806 2.992 -2.28 2.385 -2.469ZM1.848 -2.699C1.353 -2.699 0.948 -2.985 0.948 -3.494C0.948 -3.94 1.262 -4.289 1.848 -4.289C2.427 -4.289 2.748 -3.94 2.748 -3.494C2.748 -2.999 2.357 -2.699 1.848 -2.699ZM1.848 -0.314C1.367 -0.314 0.941 -0.621 0.941 -1.276C0.941 -1.904 1.346 -2.239 1.848 -2.239S2.755 -1.897 2.755 -1.276C2.755 -0.621 2.322 -0.314 1.848 -0.314Z' id='g0-56'/>
-<path d='M0.537 -0.174C0.879 0.077 1.193 0.146 1.52 0.146C2.497 0.146 3.389 -0.837 3.389 -2.336C3.389 -4.24 2.545 -4.721 1.876 -4.721C1.255 -4.721 0.969 -4.428 0.767 -4.226C0.321 -3.773 0.307 -3.292 0.307 -3.02C0.307 -2.12 0.795 -1.346 1.478 -1.346C2.267 -1.346 2.699 -1.869 2.734 -1.911C2.636 -0.802 2.092 -0.314 1.52 -0.314C1.158 -0.314 0.934 -0.446 0.774 -0.579L0.537 -0.174ZM2.713 -3.027C2.72 -2.985 2.72 -2.915 2.72 -2.873C2.72 -2.357 2.406 -1.806 1.799 -1.806C1.534 -1.806 1.325 -1.883 1.144 -2.169C0.962 -2.441 0.948 -2.706 0.948 -3.02C0.948 -3.292 0.948 -3.605 1.165 -3.912C1.311 -4.122 1.52 -4.289 1.869 -4.289C2.545 -4.289 2.692 -3.473 2.713 -3.027Z' id='g0-57'/>
-<path d='M1.646 -4.84H0.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-0.551H3.933L1.646 -4.84Z' id='g0-78'/>
-<path d='M2.971 -2.008C2.971 -2.72 2.427 -3.201 1.736 -3.201C1.297 -3.201 0.962 -3.11 0.572 -2.901L0.614 -2.392C0.844 -2.545 1.186 -2.755 1.736 -2.755C2.043 -2.755 2.364 -2.525 2.364 -2.001V-1.723C1.332 -1.688 0.314 -1.471 0.314 -0.823C0.314 -0.474 0.551 0.07 1.165 0.07C1.465 0.07 2.015 0.007 2.385 -0.265V0H2.971V-2.008ZM2.364 -0.99C2.364 -0.851 2.364 -0.669 2.12 -0.523C1.897 -0.398 1.625 -0.391 1.548 -0.391C1.165 -0.391 0.872 -0.565 0.872 -0.83C0.872 -1.276 2.05 -1.318 2.364 -1.332V-0.99Z' id='g0-97'/>
-<path d='M1.179 -4.84H0.593V0H1.2V-0.328C1.353 -0.195 1.688 0.07 2.197 0.07C2.957 0.07 3.571 -0.642 3.571 -1.555C3.571 -2.399 3.089 -3.166 2.392 -3.166C1.953 -3.166 1.527 -3.027 1.179 -2.769V-4.84ZM1.2 -2.197C1.2 -2.308 1.2 -2.392 1.444 -2.552C1.548 -2.615 1.736 -2.706 1.974 -2.706C2.441 -2.706 2.964 -2.392 2.964 -1.555C2.964 -0.704 2.385 -0.391 1.897 -0.391C1.639 -0.391 1.395 -0.509 1.2 -0.823V-2.197Z' id='g0-98'/>
-<path d='M3.034 -0.76C2.685 -0.537 2.308 -0.411 1.876 -0.411C1.234 -0.411 0.858 -0.928 0.858 -1.555C0.858 -2.092 1.137 -2.72 1.897 -2.72C2.371 -2.72 2.594 -2.622 2.95 -2.399L3.041 -2.901C2.622 -3.11 2.441 -3.201 1.897 -3.201C0.851 -3.201 0.251 -2.357 0.251 -1.548C0.251 -0.697 0.921 0.07 1.869 0.07C2.357 0.07 2.776 -0.077 3.075 -0.251L3.034 -0.76Z' id='g0-99'/>
-<path d='M3.229 -4.84H2.643V-2.797C2.197 -3.124 1.743 -3.166 1.541 -3.166C0.809 -3.166 0.251 -2.434 0.251 -1.548S0.802 0.07 1.52 0.07C1.953 0.07 2.357 -0.126 2.622 -0.363V0H3.229V-4.84ZM2.622 -0.865C2.448 -0.579 2.183 -0.391 1.848 -0.391C1.36 -0.391 0.858 -0.732 0.858 -1.541C0.858 -2.413 1.451 -2.706 1.925 -2.706C2.204 -2.706 2.441 -2.587 2.622 -2.35V-0.865Z' id='g0-100'/>
-<path d='M2.999 -0.76C2.608 -0.481 2.169 -0.391 1.869 -0.391C1.262 -0.391 0.802 -0.886 0.781 -1.527H3.068C3.068 -1.848 3.034 -2.315 2.762 -2.713C2.511 -3.068 2.092 -3.201 1.75 -3.201C0.9 -3.201 0.244 -2.455 0.244 -1.569C0.244 -0.676 0.941 0.07 1.862 0.07C2.267 0.07 2.685 -0.049 3.041 -0.265L2.999 -0.76ZM0.83 -1.946C0.99 -2.504 1.402 -2.741 1.75 -2.741C2.057 -2.741 2.511 -2.594 2.643 -1.946H0.83Z' id='g0-101'/>
-<path d='M1.325 -2.657H2.12V-3.096H1.304V-3.898C1.304 -4.38 1.743 -4.449 1.974 -4.449C2.12 -4.449 2.308 -4.428 2.566 -4.331V-4.84C2.385 -4.882 2.169 -4.91 1.981 -4.91C1.262 -4.91 0.739 -4.394 0.739 -3.703V-3.096H0.202V-2.657H0.739V0H1.325V-2.657Z' id='g0-102'/>
-<path d='M1.227 -4.784H0.523V-4.08H1.227V-4.784ZM1.172 -3.096H0.586V0H1.172V-3.096Z' id='g0-105'/>
-<path d='M1.172 -4.84H0.586V0H1.172V-4.84Z' id='g0-108'/>
-<path d='M5.3 -2.064C5.3 -2.608 5.14 -3.166 4.282 -3.166C3.696 -3.166 3.333 -2.824 3.166 -2.601C3.096 -2.79 2.922 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-1.695C3.243 -2.155 3.438 -2.706 3.975 -2.706C4.693 -2.706 4.693 -2.218 4.693 -2.015V0H5.3V-2.064Z' id='g0-109'/>
-<path d='M3.243 -2.064C3.243 -2.608 3.082 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-2.064Z' id='g0-110'/>
-<path d='M3.487 -1.527C3.487 -2.448 2.755 -3.201 1.848 -3.201S0.209 -2.441 0.209 -1.527C0.209 -0.642 0.948 0.07 1.848 0.07C2.755 0.07 3.487 -0.642 3.487 -1.527ZM1.848 -0.411C1.297 -0.411 0.816 -0.816 0.816 -1.604S1.332 -2.741 1.848 -2.741C2.371 -2.741 2.88 -2.378 2.88 -1.604C2.88 -0.809 2.385 -0.411 1.848 -0.411Z' id='g0-111'/>
-<path d='M1.2 -0.328C1.569 0.007 1.967 0.07 2.204 0.07C2.943 0.07 3.571 -0.635 3.571 -1.555C3.571 -2.392 3.11 -3.166 2.42 -3.166C2.106 -3.166 1.583 -3.075 1.179 -2.762V-3.096H0.593V1.353H1.2V-0.328ZM1.2 -2.315C1.36 -2.511 1.632 -2.685 1.967 -2.685C2.525 -2.685 2.964 -2.169 2.964 -1.555C2.964 -0.865 2.441 -0.391 1.897 -0.391C1.792 -0.391 1.618 -0.404 1.437 -0.551C1.227 -0.711 1.2 -0.816 1.2 -0.948V-2.315Z' id='g0-112'/>
-<path d='M1.179 -1.485C1.179 -2.239 1.806 -2.643 2.42 -2.65V-3.166C1.834 -3.159 1.409 -2.873 1.13 -2.504V-3.145H0.593V0H1.179V-1.485Z' id='g0-114'/>
-<path d='M2.545 -2.985C2.071 -3.18 1.723 -3.201 1.471 -3.201C1.297 -3.201 0.244 -3.201 0.244 -2.273C0.244 -1.946 0.425 -1.764 0.516 -1.681C0.76 -1.437 1.053 -1.381 1.423 -1.311C1.75 -1.248 2.127 -1.179 2.127 -0.844C2.127 -0.404 1.548 -0.404 1.451 -0.404C1.004 -0.404 0.586 -0.565 0.307 -0.76L0.209 -0.237C0.446 -0.119 0.872 0.07 1.451 0.07C1.764 0.07 2.071 0.021 2.329 -0.167C2.587 -0.363 2.671 -0.669 2.671 -0.907C2.671 -1.032 2.657 -1.304 2.364 -1.569C2.106 -1.799 1.855 -1.848 1.52 -1.911C1.109 -1.988 0.788 -2.05 0.788 -2.357C0.788 -2.755 1.297 -2.755 1.402 -2.755C1.799 -2.755 2.106 -2.671 2.455 -2.49L2.545 -2.985Z' id='g0-115'/>
-<path d='M1.311 -2.657H2.343V-3.096H1.311V-3.982H0.774V-3.096H0.139V-2.657H0.753V-0.893C0.753 -0.425 0.872 0.07 1.374 0.07S2.26 -0.091 2.469 -0.188L2.35 -0.635C2.12 -0.467 1.876 -0.411 1.681 -0.411C1.388 -0.411 1.311 -0.697 1.311 -1.018V-2.657Z' id='g0-116'/>
-<path d='M4.951 -3.096H4.407C4.345 -2.901 3.954 -1.723 3.738 -0.997C3.682 -0.795 3.612 -0.572 3.592 -0.411H3.585C3.543 -0.697 3.299 -1.451 3.285 -1.499L2.769 -3.096H2.239C2.036 -2.497 1.513 -0.934 1.458 -0.425H1.451C1.395 -0.921 0.879 -2.462 0.767 -2.797C0.711 -2.964 0.711 -2.978 0.676 -3.096H0.105L1.123 0H1.709C1.716 -0.028 1.904 -0.579 2.148 -1.353C2.253 -1.695 2.462 -2.364 2.497 -2.671L2.504 -2.678C2.518 -2.532 2.559 -2.378 2.608 -2.204S2.706 -1.841 2.755 -1.681L3.292 0H3.933L4.951 -3.096Z' id='g0-119'/>
-<path d='M1.932 -1.597L3.285 -3.096H2.671L1.681 -1.953L0.669 -3.096H0.042L1.437 -1.597L0 0H0.621L1.681 -1.311L2.783 0H3.41L1.932 -1.597Z' id='g0-120'/>
-</defs>
-<g id='page7'>
-<path d='M140.82 237.449V228.594M199.488 237.449V228.594M258.156 237.449V228.594M316.824 237.449V228.594M375.496 237.449V228.594M140.82 51.969V60.828M199.488 51.969V60.828M258.156 51.969V60.828M316.824 51.969V60.828M375.496 51.969V60.828' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M111.484 232.844V228.594M170.152 232.844V228.594M228.824 232.844V228.594M287.492 232.844V228.594M346.16 232.844V228.594M404.828 232.844V228.594M111.484 56.574V60.828M170.152 56.574V60.828M228.824 56.574V60.828M287.492 56.574V60.828M346.16 56.574V60.828M404.828 56.574V60.828' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 228.594H86.402M82.148 195.039H86.402M82.148 161.484H86.402M82.148 127.934H86.402M82.148 94.379H86.402M82.148 60.828H86.402M434.164 228.594H429.91M434.164 195.039H429.91M434.164 161.484H429.91M434.164 127.934H429.91M434.164 94.379H429.91M434.164 60.828H429.91' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 228.594V60.828H434.164V228.594H82.148Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -11.54 34.954)'>
-<use x='114.487' xlink:href='#g3-99' y='208.035'/>
-<use x='118.25' xlink:href='#g3-102' y='208.035'/>
-<use x='120.838' xlink:href='#g3-114' y='208.035'/>
-<use x='123.73' xlink:href='#g3-97' y='208.035'/>
-<use x='127.798' xlink:href='#g3-99' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 45.565 34.954)'>
-<use x='114.487' xlink:href='#g3-108' y='208.035'/>
-<use x='116.507' xlink:href='#g3-101' y='208.035'/>
-<use x='120.271' xlink:href='#g3-97' y='208.035'/>
-<use x='124.339' xlink:href='#g3-110' y='208.035'/>
-<use x='128.711' xlink:href='#g3-78' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 106.188 34.954)'>
-<use x='114.487' xlink:href='#g3-114' y='208.035'/>
-<use x='117.379' xlink:href='#g3-101' y='208.035'/>
-<use x='121.142' xlink:href='#g3-100' y='208.035'/>
-<use x='125.515' xlink:href='#g3-105' y='208.035'/>
-<use x='127.535' xlink:href='#g3-115' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 159.716 34.954)'>
-<use x='114.487' xlink:href='#g3-108' y='208.035'/>
-<use x='116.507' xlink:href='#g3-97' y='208.035'/>
-<use x='120.34' xlink:href='#g3-114' y='208.035'/>
-<use x='123.232' xlink:href='#g3-115' y='208.035'/>
-<use x='126.478' xlink:href='#g3-111' y='208.035'/>
-<use x='130.712' xlink:href='#g3-110' y='208.035'/>
-<use x='135.085' xlink:href='#g3-78' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 215.596 34.954)'>
-<use x='114.487' xlink:href='#g3-109' y='208.035'/>
-<use x='121.211' xlink:href='#g3-115' y='208.035'/>
-<use x='124.458' xlink:href='#g3-116' y='208.035'/>
-<use x='127.516' xlink:href='#g3-114' y='208.035'/>
-<use x='130.408' xlink:href='#g3-101' y='208.035'/>
-<use x='134.171' xlink:href='#g3-115' y='208.035'/>
-<use x='137.418' xlink:href='#g3-115' y='208.035'/>
-<use x='140.664' xlink:href='#g3-78' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 277.158 34.954)'>
-<use x='114.487' xlink:href='#g3-114' y='208.035'/>
-<use x='117.379' xlink:href='#g3-112' y='208.035'/>
-<use x='121.751' xlink:href='#g3-116' y='208.035'/>
-<use x='124.809' xlink:href='#g3-101' y='208.035'/>
-<use x='128.573' xlink:href='#g3-115' y='208.035'/>
-<use x='131.819' xlink:href='#g3-116' y='208.035'/>
-<use x='134.877' xlink:href='#g3-78' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 22.192)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-120' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -11.361)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-53' y='208.035'/>
-<use x='121.25' xlink:href='#g2-120' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -44.915)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-120' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -78.468)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-53' y='208.035'/>
-<use x='121.25' xlink:href='#g2-120' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -112.021)'>
-<use x='114.487' xlink:href='#g2-50' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-120' y='208.035'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -145.574)'>
-<use x='114.487' xlink:href='#g2-50' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-53' y='208.035'/>
-<use x='121.25' xlink:href='#g2-120' y='208.035'/>
-</g>
-<path clip-path='url(#clip7)' d='M82.148 161.484H434.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M88.945 228.594H92.18V161.484H88.945ZM147.613 228.594H150.852V161.484H147.613ZM206.281 228.594H209.52V161.484H206.281ZM264.949 228.594H268.188V161.484H264.949ZM323.621 228.594H326.859V161.484H323.621ZM382.289 228.594H385.527V161.484H382.289Z' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M88.945 228.594H92.18V161.484H88.945ZM147.613 228.594H150.852V161.484H147.613ZM206.281 228.594H209.52V161.484H206.281ZM264.949 228.594H268.188V161.484H264.949ZM323.621 228.594H326.859V161.484H323.621ZM382.289 228.594H385.527V161.484H382.289Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M90.563 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M88.57 161.484H92.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M90.563 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M88.57 161.484H92.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M149.231 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M147.238 161.484H151.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M149.231 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M147.238 161.484H151.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M207.902 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M205.906 161.484H209.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M207.902 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M205.906 161.484H209.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M266.57 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M264.578 161.484H268.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M266.57 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M264.578 161.484H268.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M325.238 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M323.246 161.484H327.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M325.238 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M323.246 161.484H327.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M383.906 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M381.914 161.484H385.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M383.906 161.484V161.484' fill='#ffffff'/>
-<path clip-path='url(#clip7)' d='M381.914 161.484H385.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M94.176 228.594H97.41V74.719H94.176ZM152.844 228.594H156.082V172.559H152.844ZM211.512 228.594H214.75V145.852H211.512ZM270.18 228.594H273.418V154.773H270.18ZM328.852 228.594H332.09V193.43H328.852ZM387.52 228.594H390.758V191.148H387.52Z' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M94.176 228.594H97.41V74.719H94.176ZM152.844 228.594H156.082V172.559H152.844ZM211.512 228.594H214.75V145.852H211.512ZM270.18 228.594H273.418V154.773H270.18ZM328.852 228.594H332.09V193.43H328.852ZM387.52 228.594H390.758V191.148H387.52Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M95.793 74.719V74.719' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M93.801 74.719H97.785' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M95.793 74.719V74.719' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M93.801 74.719H97.785' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M154.461 172.559V172.559' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M152.469 172.558H156.454' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M154.461 172.559V172.559' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M152.469 172.558H156.454' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M213.133 145.852V145.852' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M211.137 145.851H215.125' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M213.133 145.852V145.852' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M211.137 145.851H215.125' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M271.801 154.773V154.773' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M269.809 154.773H273.793' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M271.801 154.773V154.773' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M269.809 154.773H273.793' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M330.469 193.43V193.43' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M328.477 193.429H332.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M330.469 193.43V193.43' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M328.477 193.429H332.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M389.137 191.148V191.148' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M387.145 191.149H391.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M389.137 191.148V191.148' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M387.145 191.149H391.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M99.406 228.594H102.641V138.133H99.406ZM158.074 228.594H161.313V162.961H158.074ZM216.742 228.594H219.981V157.797H216.742ZM275.41 228.594H278.649V141.02H275.41ZM334.082 228.594H337.32V191.816H334.082ZM392.75 228.594H395.988V179.871H392.75Z' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M99.406 228.594H102.641V138.133H99.406ZM158.074 228.594H161.313V162.961H158.074ZM216.742 228.594H219.981V157.797H216.742ZM275.41 228.594H278.649V141.02H275.41ZM334.082 228.594H337.32V191.816H334.082ZM392.75 228.594H395.988V179.871H392.75Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M101.024 138.133V138.133' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M99.031 138.133H103.016' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M101.024 138.133V138.133' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M99.031 138.133H103.016' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M159.691 162.961V162.961' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M157.699 162.961H161.684' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M159.691 162.961V162.961' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M157.699 162.961H161.684' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M218.363 157.797V157.797' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M216.367 157.797H220.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M218.363 157.797V157.797' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M216.367 157.797H220.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M277.031 141.02V141.02' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M275.039 141.02H279.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M277.031 141.02V141.02' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M275.039 141.02H279.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M335.699 191.816V191.816' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M333.707 191.816H337.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M335.699 191.816V191.816' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M333.707 191.816H337.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M394.367 179.871V179.871' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M392.375 179.871H396.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M394.367 179.871V179.871' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M392.375 179.871H396.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M104.637 228.594H107.871V140.883H104.637ZM163.305 228.594H166.543V152.695H163.305ZM221.973 228.594H225.211V115.184H221.973ZM280.641 228.594H283.879V167.793H280.641ZM339.313 228.594H342.551V189.738H339.313ZM397.981 228.594H401.219V194.367H397.981Z' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M104.637 228.594H107.871V140.883H104.637ZM163.305 228.594H166.543V152.695H163.305ZM221.973 228.594H225.211V115.184H221.973ZM280.641 228.594H283.879V167.793H280.641ZM339.313 228.594H342.551V189.738H339.313ZM397.981 228.594H401.219V194.367H397.981Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M106.254 140.883V140.883' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M104.261 140.882H108.246' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M106.254 140.883V140.883' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M104.261 140.882H108.246' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M164.922 152.695V152.695' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M162.929 152.695H166.914' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M164.922 152.695V152.695' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M162.929 152.695H166.914' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M223.594 115.184V115.184' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M221.597 115.184H225.585' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M223.594 115.184V115.184' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M221.597 115.184H225.585' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M282.262 167.793V167.793' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M280.269 167.793H284.253' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M282.262 167.793V167.793' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M280.269 167.793H284.253' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M340.93 189.738V189.738' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M338.937 189.739H342.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M340.93 189.738V189.738' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M338.937 189.739H342.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M399.598 194.367V194.367' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M397.605 194.367H401.589' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M399.598 194.367V194.367' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M397.605 194.367H401.589' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M109.867 228.594H113.102V163.031H109.867ZM168.535 228.594H171.774V157.191H168.535ZM227.203 228.594H230.442V142.094H227.203ZM285.871 228.594H289.109V150.414H285.871ZM344.543 228.594H347.781V150.949H344.543ZM403.211 228.594H406.449V103.105H403.211Z' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M109.867 228.594H113.102V163.031H109.867ZM168.535 228.594H171.774V157.191H168.535ZM227.203 228.594H230.442V142.094H227.203ZM285.871 228.594H289.109V150.414H285.871ZM344.543 228.594H347.781V150.949H344.543ZM403.211 228.594H406.449V103.105H403.211Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M111.484 163.031V163.031' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M109.492 163.031H113.477' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M111.484 163.031V163.031' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M109.492 163.031H113.477' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M170.152 157.191V157.191' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M168.16 157.191H172.145' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M170.152 157.191V157.191' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M168.16 157.191H172.145' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M228.824 142.094V142.094' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M226.828 142.093H230.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M228.824 142.094V142.094' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M226.828 142.093H230.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M287.492 150.414V150.414' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M285.5 150.414H289.484' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M287.492 150.414V150.414' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M285.5 150.414H289.484' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M346.16 150.949V150.949' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M344.168 150.949H348.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M346.16 150.949V150.949' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M344.168 150.949H348.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M404.828 103.105V103.105' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M402.836 103.106H406.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M404.828 103.105V103.105' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M402.836 103.106H406.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M115.098 228.594H118.332V133.906H115.098ZM173.766 228.594H177.004V148.133H173.766ZM232.434 228.594H235.672V144.91H232.434ZM291.102 228.594H294.34V160.48H291.102ZM349.774 228.594H353.012V168.801H349.774ZM408.442 228.594H411.68V181.484H408.442Z' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M115.098 228.594H118.332V133.906H115.098ZM173.766 228.594H177.004V148.133H173.766ZM232.434 228.594H235.672V144.91H232.434ZM291.102 228.594H294.34V160.48H291.102ZM349.774 228.594H353.012V168.801H349.774ZM408.442 228.594H411.68V181.484H408.442Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M116.715 133.906V133.906' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M114.722 133.906H118.707' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M116.715 133.906V133.906' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M114.722 133.906H118.707' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M175.383 148.133V148.133' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M173.39 148.133H177.375' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M175.383 148.133V148.133' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M173.39 148.133H177.375' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M234.055 144.91V144.91' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M232.058 144.91H236.046' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M234.055 144.91V144.91' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M232.058 144.91H236.046' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M292.723 160.48V160.48' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M290.73 160.48H294.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M292.723 160.48V160.48' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M290.73 160.48H294.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M351.391 168.801V168.801' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M349.398 168.801H353.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M351.391 168.801V168.801' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M349.398 168.801H353.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M410.059 181.484V181.484' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M408.066 181.485H412.05' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M410.059 181.484V181.484' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M408.066 181.485H412.05' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M120.328 228.594H123.563V140.48H120.328ZM178.996 228.594H182.234V159.473H178.996ZM237.664 228.594H240.902V159.406H237.664ZM296.332 228.594H299.57V157.797H296.332ZM355.004 228.594H358.238V172.355H355.004ZM413.672 228.594H416.91V184.637H413.672Z' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M120.328 228.594H123.563V140.48H120.328ZM178.996 228.594H182.234V159.473H178.996ZM237.664 228.594H240.902V159.406H237.664ZM296.332 228.594H299.57V157.797H296.332ZM355.004 228.594H358.238V172.355H355.004ZM413.672 228.594H416.91V184.637H413.672Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M121.945 140.48V140.48' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M119.953 140.481H123.938' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M121.945 140.48V140.48' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M119.953 140.481H123.938' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M180.613 159.473V159.473' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M178.621 159.473H182.606' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M180.613 159.473V159.473' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M178.621 159.473H182.606' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M239.285 159.406V159.406' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M237.289 159.407H241.274' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M239.285 159.406V159.406' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M237.289 159.407H241.274' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M297.953 157.797V157.797' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M295.961 157.797H299.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M297.953 157.797V157.797' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M295.961 157.797H299.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M356.621 172.355V172.355' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M354.629 172.355H358.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M356.621 172.355V172.355' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M354.629 172.355H358.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M415.289 184.637V184.637' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M413.297 184.637H417.281' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M415.289 184.637V184.637' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M413.297 184.637H417.281' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M125.559 228.594H128.793V163.098H125.559ZM184.227 228.594H187.465V151.824H184.227ZM242.895 228.594H246.133V161.082H242.895ZM301.563 228.594H304.801V167.457H301.563ZM360.234 228.594H363.469V168.195H360.234ZM418.902 228.594H422.141V199.332H418.902Z' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M125.559 228.594H128.793V163.098H125.559ZM184.227 228.594H187.465V151.824H184.227ZM242.895 228.594H246.133V161.082H242.895ZM301.563 228.594H304.801V167.457H301.563ZM360.234 228.594H363.469V168.195H360.234ZM418.902 228.594H422.141V199.332H418.902Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M127.176 163.098V163.098' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M125.183 163.097H129.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M127.176 163.098V163.098' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M125.183 163.097H129.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M185.844 151.824V151.824' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M183.851 151.825H187.836' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M185.844 151.824V151.824' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M183.851 151.825H187.836' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M244.516 161.082V161.082' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M242.519 161.082H246.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M244.516 161.082V161.082' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M242.519 161.082H246.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M303.184 167.457V167.457' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M301.191 167.457H305.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M303.184 167.457V167.457' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M301.191 167.457H305.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M361.852 168.195V168.195' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M359.859 168.196H363.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M361.852 168.195V168.195' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M359.859 168.196H363.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M420.52 199.332V199.332' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M418.527 199.332H422.511' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M420.52 199.332V199.332' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M418.527 199.332H422.511' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M130.789 228.594H134.024V157.996H130.789ZM189.457 228.594H192.695V153.969H189.457ZM248.125 228.594H251.363V154.305H248.125ZM306.793 228.594H310.031V122.633H306.793ZM365.465 228.594H368.699V165.98H365.465ZM424.133 228.594H427.371V150.211H424.133Z' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M130.789 228.594H134.024V157.996H130.789ZM189.457 228.594H192.695V153.969H189.457ZM248.125 228.594H251.363V154.305H248.125ZM306.793 228.594H310.031V122.633H306.793ZM365.465 228.594H368.699V165.98H365.465ZM424.133 228.594H427.371V150.211H424.133Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M132.406 157.996V157.996' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M130.414 157.996H134.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M132.406 157.996V157.996' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M130.414 157.996H134.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M191.074 153.969V153.969' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M189.082 153.969H193.067' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M191.074 153.969V153.969' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M189.082 153.969H193.067' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M249.746 154.305V154.305' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M247.75 154.305H251.735' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M249.746 154.305V154.305' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M247.75 154.305H251.735' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M308.414 122.633V122.633' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M306.422 122.633H310.407' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M308.414 122.633V122.633' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M306.422 122.633H310.407' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M367.082 165.98V165.98' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M365.09 165.98H369.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M367.082 165.98V165.98' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M365.09 165.98H369.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M425.75 150.211V150.211' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M423.758 150.211H427.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M425.75 150.211V150.211' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M423.758 150.211H427.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(0 -1 1 0 -115.838 269.769)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -57.169 269.769)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 1.5 269.769)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 60.169 269.769)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.838 269.769)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 177.507 269.769)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -110.608 183.001)'>
-<use x='114.487' xlink:href='#g2-50' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-50' y='208.035'/>
-<use x='121.25' xlink:href='#g2-57' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -51.938 280.841)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-56' y='208.035'/>
-<use x='121.25' xlink:href='#g2-52' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 6.731 254.133)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-50' y='208.035'/>
-<use x='121.25' xlink:href='#g2-51' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 65.4 263.058)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-49' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 124.069 301.711)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-53' y='208.035'/>
-<use x='121.25' xlink:href='#g2-50' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 182.738 299.43)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-53' y='208.035'/>
-<use x='121.25' xlink:href='#g2-54' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -105.377 246.416)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-51' y='208.035'/>
-<use x='121.25' xlink:href='#g2-53' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -46.708 271.245)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-57' y='208.035'/>
-<use x='121.25' xlink:href='#g2-56' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 11.961 266.078)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-53' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 70.63 249.302)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-51' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 129.299 300.101)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-53' y='208.035'/>
-<use x='121.25' xlink:href='#g2-53' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 187.968 288.156)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-55' y='208.035'/>
-<use x='121.25' xlink:href='#g2-51' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -100.147 249.167)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-51' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -41.478 260.978)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-49' y='208.035'/>
-<use x='121.25' xlink:href='#g2-51' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 17.191 223.466)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-54' y='208.035'/>
-<use x='121.25' xlink:href='#g2-57' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 75.86 276.077)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-57' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 134.529 298.021)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-53' y='208.035'/>
-<use x='121.25' xlink:href='#g2-56' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 193.198 302.651)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-53' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -94.916 271.312)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-57' y='208.035'/>
-<use x='121.25' xlink:href='#g2-56' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -36.247 265.474)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-54' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 22.422 250.375)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-50' y='208.035'/>
-<use x='121.25' xlink:href='#g2-57' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 81.091 258.696)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-49' y='208.035'/>
-<use x='121.25' xlink:href='#g2-54' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 139.76 259.233)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-49' y='208.035'/>
-<use x='121.25' xlink:href='#g2-54' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 198.429 211.387)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-56' y='208.035'/>
-<use x='121.25' xlink:href='#g2-55' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -89.686 242.188)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-52' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -31.017 256.415)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-50' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 27.652 253.194)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-50' y='208.035'/>
-<use x='121.25' xlink:href='#g2-53' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 86.321 268.762)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-50' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 144.99 277.083)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-56' y='208.035'/>
-<use x='121.25' xlink:href='#g2-57' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 203.659 289.767)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-55' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -84.455 248.765)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-51' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -25.786 267.756)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-51' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 32.883 267.689)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-51' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 91.552 266.078)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-53' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 150.221 280.64)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-56' y='208.035'/>
-<use x='121.25' xlink:href='#g2-52' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 208.89 292.921)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-54' y='208.035'/>
-<use x='121.25' xlink:href='#g2-54' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -79.225 271.379)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-57' y='208.035'/>
-<use x='121.25' xlink:href='#g2-56' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -20.556 260.106)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-49' y='208.035'/>
-<use x='121.25' xlink:href='#g2-52' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 38.113 269.366)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 96.782 275.741)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-57' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 155.451 276.48)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-57' y='208.035'/>
-<use x='121.25' xlink:href='#g2-48' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 214.12 307.617)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-52' y='208.035'/>
-<use x='121.25' xlink:href='#g2-52' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -73.994 266.279)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-48' y='208.035'/>
-<use x='121.25' xlink:href='#g2-53' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -15.325 262.253)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-49' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 43.344 262.589)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-49' y='208.035'/>
-<use x='121.25' xlink:href='#g2-49' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 102.013 230.914)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-53' y='208.035'/>
-<use x='121.25' xlink:href='#g2-56' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 160.682 274.265)'>
-<use x='114.487' xlink:href='#g2-48' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-57' y='208.035'/>
-<use x='121.25' xlink:href='#g2-51' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 219.351 258.495)'>
-<use x='114.487' xlink:href='#g2-49' y='208.035'/>
-<use x='117.133' xlink:href='#g2-46' y='208.035'/>
-<use x='118.603' xlink:href='#g2-49' y='208.035'/>
-<use x='121.25' xlink:href='#g2-55' y='208.035'/>
-</g>
-<g transform='matrix(0 -1 1 0 -148.675 311.091)'>
-<use x='114.487' xlink:href='#g1-82' y='208.035'/>
-<use x='120.457' xlink:href='#g1-101' y='208.035'/>
-<use x='124.553' xlink:href='#g1-108' y='208.035'/>
-<use x='126.753' xlink:href='#g1-97' y='208.035'/>
-<use x='131.181' xlink:href='#g1-116' y='208.035'/>
-<use x='134.509' xlink:href='#g1-105' y='208.035'/>
-<use x='136.709' xlink:href='#g1-118' y='208.035'/>
-<use x='140.957' xlink:href='#g1-101' y='208.035'/>
-<use x='148.124' xlink:href='#g1-114' y='208.035'/>
-<use x='151.272' xlink:href='#g1-115' y='208.035'/>
-<use x='154.805' xlink:href='#g1-115' y='208.035'/>
-<use x='161.409' xlink:href='#g3-40' y='208.035'/>
-<use x='164.702' xlink:href='#g3-108' y='208.035'/>
-<use x='166.722' xlink:href='#g3-111' y='208.035'/>
-<use x='170.721' xlink:href='#g3-119' y='208.035'/>
-<use x='176.27' xlink:href='#g3-101' y='208.035'/>
-<use x='180.034' xlink:href='#g3-114' y='208.035'/>
-<use x='185.749' xlink:href='#g3-105' y='208.035'/>
-<use x='187.769' xlink:href='#g3-115' y='208.035'/>
-<use x='193.838' xlink:href='#g3-98' y='208.035'/>
-<use x='198.446' xlink:href='#g3-101' y='208.035'/>
-<use x='202.209' xlink:href='#g3-116' y='208.035'/>
-<use x='205.267' xlink:href='#g3-116' y='208.035'/>
-<use x='208.325' xlink:href='#g3-101' y='208.035'/>
-<use x='212.089' xlink:href='#g3-114' y='208.035'/>
-<use x='214.981' xlink:href='#g3-41' y='208.035'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-b.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-b.svg
deleted file mode 100644
index 419dc25..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-b.svg
+++ /dev/null
@@ -1,1028 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='255.738pt' version='1.1' viewBox='106.736 54.996 381.624 255.738' width='381.624pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip8'>
-<path d='M135.949 249.281H487.961V81.519H135.949Z'/>
-</clipPath>
-<use id='g3-40' transform='scale(1.143)' xlink:href='#g0-40'/>
-<use id='g3-41' transform='scale(1.143)' xlink:href='#g0-41'/>
-<use id='g3-45' transform='scale(1.143)' xlink:href='#g0-45'/>
-<use id='g3-49' transform='scale(1.143)' xlink:href='#g0-49'/>
-<use id='g3-54' transform='scale(1.143)' xlink:href='#g0-54'/>
-<use id='g3-56' transform='scale(1.143)' xlink:href='#g0-56'/>
-<use id='g3-58' transform='scale(1.143)' xlink:href='#g0-58'/>
-<use id='g3-78' transform='scale(1.143)' xlink:href='#g0-78'/>
-<use id='g3-97' transform='scale(1.143)' xlink:href='#g0-97'/>
-<use id='g3-98' transform='scale(1.143)' xlink:href='#g0-98'/>
-<use id='g3-99' transform='scale(1.143)' xlink:href='#g0-99'/>
-<use id='g3-100' transform='scale(1.143)' xlink:href='#g0-100'/>
-<use id='g3-101' transform='scale(1.143)' xlink:href='#g0-101'/>
-<use id='g3-103' transform='scale(1.143)' xlink:href='#g0-103'/>
-<use id='g3-104' transform='scale(1.143)' xlink:href='#g0-104'/>
-<use id='g3-105' transform='scale(1.143)' xlink:href='#g0-105'/>
-<use id='g3-106' transform='scale(1.143)' xlink:href='#g0-106'/>
-<use id='g3-108' transform='scale(1.143)' xlink:href='#g0-108'/>
-<use id='g3-109' transform='scale(1.143)' xlink:href='#g0-109'/>
-<use id='g3-110' transform='scale(1.143)' xlink:href='#g0-110'/>
-<use id='g3-111' transform='scale(1.143)' xlink:href='#g0-111'/>
-<use id='g3-112' transform='scale(1.143)' xlink:href='#g0-112'/>
-<use id='g3-114' transform='scale(1.143)' xlink:href='#g0-114'/>
-<use id='g3-115' transform='scale(1.143)' xlink:href='#g0-115'/>
-<use id='g3-116' transform='scale(1.143)' xlink:href='#g0-116'/>
-<use id='g3-119' transform='scale(1.143)' xlink:href='#g0-119'/>
-<use id='g3-120' transform='scale(1.143)' xlink:href='#g0-120'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g1-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g1-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g1-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g1-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g1-108'/>
-<path d='M1.462 -1.91C1.462 -2.851 2.197 -3.425 3.013 -3.434V-4.08C2.367 -4.071 1.775 -3.748 1.408 -3.219V-4.035H0.744V0H1.462V-1.91Z' id='g1-114'/>
-<path d='M3.165 -3.847C2.609 -4.098 2.197 -4.133 1.829 -4.133C1.623 -4.133 0.305 -4.133 0.305 -2.95C0.305 -2.52 0.565 -2.251 0.664 -2.152C1.004 -1.856 1.237 -1.811 1.847 -1.695C2.134 -1.641 2.645 -1.542 2.645 -1.085C2.645 -0.502 1.919 -0.502 1.802 -0.502C1.273 -0.502 0.762 -0.681 0.377 -0.95L0.26 -0.296C0.798 -0.009 1.345 0.099 1.802 0.099C2.385 0.099 3.318 -0.09 3.318 -1.157C3.318 -1.47 3.192 -1.784 2.878 -2.053C2.573 -2.313 2.304 -2.367 1.748 -2.475C1.426 -2.537 0.977 -2.618 0.977 -3.04C0.977 -3.569 1.614 -3.569 1.748 -3.569C2.403 -3.569 2.789 -3.362 3.049 -3.219L3.165 -3.847Z' id='g1-115'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g1-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g1-118'/>
-<use id='g2-44' transform='scale(0.714)' xlink:href='#g0-44'/>
-<use id='g2-45' transform='scale(0.714)' xlink:href='#g0-45'/>
-<use id='g2-46' transform='scale(0.714)' xlink:href='#g0-46'/>
-<use id='g2-48' transform='scale(0.714)' xlink:href='#g0-48'/>
-<use id='g2-49' transform='scale(0.714)' xlink:href='#g0-49'/>
-<use id='g2-50' transform='scale(0.714)' xlink:href='#g0-50'/>
-<use id='g2-51' transform='scale(0.714)' xlink:href='#g0-51'/>
-<use id='g2-52' transform='scale(0.714)' xlink:href='#g0-52'/>
-<use id='g2-53' transform='scale(0.714)' xlink:href='#g0-53'/>
-<use id='g2-54' transform='scale(0.714)' xlink:href='#g0-54'/>
-<use id='g2-55' transform='scale(0.714)' xlink:href='#g0-55'/>
-<use id='g2-56' transform='scale(0.714)' xlink:href='#g0-56'/>
-<use id='g2-57' transform='scale(0.714)' xlink:href='#g0-57'/>
-<use id='g2-64' transform='scale(0.714)' xlink:href='#g0-64'/>
-<use id='g2-67' transform='scale(0.714)' xlink:href='#g0-67'/>
-<use id='g2-71' transform='scale(0.714)' xlink:href='#g0-71'/>
-<use id='g2-73' transform='scale(0.714)' xlink:href='#g0-73'/>
-<use id='g2-85' transform='scale(0.714)' xlink:href='#g0-85'/>
-<use id='g2-88' transform='scale(0.714)' xlink:href='#g0-88'/>
-<use id='g2-97' transform='scale(0.714)' xlink:href='#g0-97'/>
-<use id='g2-98' transform='scale(0.714)' xlink:href='#g0-98'/>
-<use id='g2-99' transform='scale(0.714)' xlink:href='#g0-99'/>
-<use id='g2-100' transform='scale(0.714)' xlink:href='#g0-100'/>
-<use id='g2-101' transform='scale(0.714)' xlink:href='#g0-101'/>
-<use id='g2-103' transform='scale(0.714)' xlink:href='#g0-103'/>
-<use id='g2-104' transform='scale(0.714)' xlink:href='#g0-104'/>
-<use id='g2-108' transform='scale(0.714)' xlink:href='#g0-108'/>
-<use id='g2-109' transform='scale(0.714)' xlink:href='#g0-109'/>
-<use id='g2-110' transform='scale(0.714)' xlink:href='#g0-110'/>
-<use id='g2-111' transform='scale(0.714)' xlink:href='#g0-111'/>
-<use id='g2-112' transform='scale(0.714)' xlink:href='#g0-112'/>
-<use id='g2-114' transform='scale(0.714)' xlink:href='#g0-114'/>
-<use id='g2-115' transform='scale(0.714)' xlink:href='#g0-115'/>
-<use id='g2-116' transform='scale(0.714)' xlink:href='#g0-116'/>
-<use id='g2-117' transform='scale(0.714)' xlink:href='#g0-117'/>
-<use id='g2-120' transform='scale(0.714)' xlink:href='#g0-120'/>
-<use id='g2-122' transform='scale(0.714)' xlink:href='#g0-122'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g4-1'/>
-<path d='M2.127 -5.23C2.008 -5.23 1.995 -5.23 1.911 -5.154C1.032 -4.387 0.586 -3.145 0.586 -1.743C0.586 -0.425 0.983 0.844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 0.063C1.276 -0.481 1.193 -1.053 1.193 -1.743C1.193 -4.156 2.322 -5.112 2.462 -5.23H2.127Z' id='g0-40'/>
-<path d='M0.746 1.743C0.865 1.743 0.879 1.743 0.962 1.667C1.841 0.9 2.287 -0.342 2.287 -1.743C2.287 -3.062 1.89 -4.331 0.969 -5.14C0.879 -5.23 0.865 -5.23 0.746 -5.23H0.411C0.432 -5.216 1.109 -4.638 1.43 -3.55C1.597 -3.006 1.681 -2.434 1.681 -1.743C1.681 0.669 0.551 1.625 0.411 1.743H0.746Z' id='g0-41'/>
-<path d='M1.339 -0.007V-0.628H0.711V0H0.907L0.704 0.893H1.018L1.339 -0.007Z' id='g0-44'/>
-<path d='M2.05 -1.332V-1.771H0.084V-1.332H2.05Z' id='g0-45'/>
-<path d='M1.339 -0.628H0.711V0H1.339V-0.628Z' id='g0-46'/>
-<path d='M3.403 -2.267C3.403 -2.601 3.403 -3.417 3.075 -3.989C2.72 -4.617 2.183 -4.721 1.848 -4.721C1.534 -4.721 0.99 -4.624 0.642 -4.024C0.307 -3.466 0.293 -2.706 0.293 -2.267C0.293 -1.75 0.321 -1.116 0.614 -0.586C0.921 -0.021 1.437 0.146 1.848 0.146C2.545 0.146 2.929 -0.258 3.138 -0.697C3.382 -1.193 3.403 -1.834 3.403 -2.267ZM1.848 -0.314C1.555 -0.314 1.22 -0.481 1.046 -0.983C0.907 -1.409 0.9 -1.848 0.9 -2.357C0.9 -2.999 0.9 -4.261 1.848 -4.261S2.797 -2.999 2.797 -2.357C2.797 -1.897 2.797 -1.374 2.629 -0.928C2.434 -0.425 2.078 -0.314 1.848 -0.314Z' id='g0-48'/>
-<path d='M2.239 -4.721H2.085C1.632 -4.303 1.06 -4.275 0.642 -4.261V-3.822C0.914 -3.829 1.262 -3.843 1.611 -3.982V-0.439H0.683V0H3.166V-0.439H2.239V-4.721Z' id='g0-49'/>
-<path d='M1.974 -0.537C1.89 -0.537 1.806 -0.53 1.723 -0.53H0.928L2.008 -1.485C2.134 -1.597 2.476 -1.855 2.608 -1.967C2.915 -2.246 3.327 -2.608 3.327 -3.215C3.327 -4.003 2.741 -4.721 1.743 -4.721C1.004 -4.721 0.544 -4.324 0.307 -3.612L0.635 -3.201C0.795 -3.787 1.039 -4.24 1.646 -4.24C2.232 -4.24 2.678 -3.829 2.678 -3.201C2.678 -2.622 2.336 -2.294 1.918 -1.897C1.778 -1.757 1.402 -1.444 1.255 -1.304C1.053 -1.123 0.572 -0.656 0.37 -0.481V0H3.327V-0.537H1.974Z' id='g0-50'/>
-<path d='M0.697 -3.578C0.983 -4.135 1.485 -4.289 1.82 -4.289C2.232 -4.289 2.538 -4.052 2.538 -3.654C2.538 -3.285 2.287 -2.831 1.757 -2.741C1.723 -2.734 1.695 -2.734 1.234 -2.699V-2.239H1.778C2.441 -2.239 2.685 -1.716 2.685 -1.276C2.685 -0.732 2.35 -0.314 1.806 -0.314C1.311 -0.314 0.746 -0.551 0.398 -0.997L0.307 -0.544C0.711 -0.091 1.276 0.146 1.82 0.146C2.734 0.146 3.389 -0.537 3.389 -1.269C3.389 -1.841 2.929 -2.301 2.378 -2.462C2.908 -2.734 3.18 -3.201 3.18 -3.654C3.18 -4.247 2.573 -4.721 1.827 -4.721C1.213 -4.721 0.704 -4.4 0.411 -3.982L0.697 -3.578Z' id='g0-51'/>
-<path d='M2.762 -1.165H3.487V-1.625H2.762V-4.575H2.071L0.209 -1.625V-1.165H2.162V0H2.762V-1.165ZM0.802 -1.625C1.011 -1.953 2.211 -3.815 2.211 -4.233V-1.625H0.802Z' id='g0-52'/>
-<path d='M1.144 -4.094H3.075V-4.575H0.586V-1.967H1.095C1.262 -2.343 1.59 -2.511 1.904 -2.511C2.19 -2.511 2.622 -2.315 2.622 -1.43C2.622 -0.516 2.043 -0.314 1.688 -0.314C1.227 -0.314 0.781 -0.558 0.544 -0.955L0.279 -0.537C0.621 -0.112 1.137 0.146 1.688 0.146C2.608 0.146 3.327 -0.565 3.327 -1.416C3.327 -2.28 2.685 -2.971 1.918 -2.971C1.618 -2.971 1.353 -2.866 1.144 -2.692V-4.094Z' id='g0-53'/>
-<path d='M3.062 -4.582C2.685 -4.721 2.42 -4.721 2.287 -4.721C1.227 -4.721 0.307 -3.724 0.307 -2.253C0.307 -0.363 1.158 0.146 1.862 0.146C2.427 0.146 2.72 -0.119 2.936 -0.342C3.382 -0.816 3.389 -1.311 3.389 -1.555C3.389 -2.469 2.894 -3.229 2.218 -3.229C1.534 -3.229 1.165 -2.873 0.962 -2.671C1.053 -3.626 1.541 -4.289 2.294 -4.289C2.434 -4.289 2.713 -4.275 3.062 -4.142V-4.582ZM0.969 -1.534C0.969 -1.576 0.969 -1.681 0.976 -1.716C0.976 -2.19 1.276 -2.769 1.897 -2.769C2.748 -2.769 2.748 -1.792 2.748 -1.555C2.748 -1.29 2.748 -0.997 2.559 -0.704C2.392 -0.453 2.183 -0.314 1.862 -0.314C1.123 -0.314 1.004 -1.227 0.969 -1.534Z' id='g0-54'/>
-<path d='M1.723 -4.038C1.806 -4.038 1.89 -4.045 1.974 -4.045H2.852C1.792 -3.006 1.116 -1.548 1.116 0.07H1.771C1.771 -1.967 2.762 -3.431 3.389 -4.087V-4.575H0.307V-4.038H1.723Z' id='g0-55'/>
-<path d='M2.385 -2.469C2.845 -2.615 3.285 -2.985 3.285 -3.501C3.285 -4.135 2.678 -4.721 1.848 -4.721S0.411 -4.135 0.411 -3.501C0.411 -2.978 0.865 -2.608 1.311 -2.469C0.697 -2.28 0.307 -1.806 0.307 -1.269C0.307 -0.523 0.969 0.146 1.848 0.146S3.389 -0.523 3.389 -1.269C3.389 -1.806 2.992 -2.28 2.385 -2.469ZM1.848 -2.699C1.353 -2.699 0.948 -2.985 0.948 -3.494C0.948 -3.94 1.262 -4.289 1.848 -4.289C2.427 -4.289 2.748 -3.94 2.748 -3.494C2.748 -2.999 2.357 -2.699 1.848 -2.699ZM1.848 -0.314C1.367 -0.314 0.941 -0.621 0.941 -1.276C0.941 -1.904 1.346 -2.239 1.848 -2.239S2.755 -1.897 2.755 -1.276C2.755 -0.621 2.322 -0.314 1.848 -0.314Z' id='g0-56'/>
-<path d='M0.537 -0.174C0.879 0.077 1.193 0.146 1.52 0.146C2.497 0.146 3.389 -0.837 3.389 -2.336C3.389 -4.24 2.545 -4.721 1.876 -4.721C1.255 -4.721 0.969 -4.428 0.767 -4.226C0.321 -3.773 0.307 -3.292 0.307 -3.02C0.307 -2.12 0.795 -1.346 1.478 -1.346C2.267 -1.346 2.699 -1.869 2.734 -1.911C2.636 -0.802 2.092 -0.314 1.52 -0.314C1.158 -0.314 0.934 -0.446 0.774 -0.579L0.537 -0.174ZM2.713 -3.027C2.72 -2.985 2.72 -2.915 2.72 -2.873C2.72 -2.357 2.406 -1.806 1.799 -1.806C1.534 -1.806 1.325 -1.883 1.144 -2.169C0.962 -2.441 0.948 -2.706 0.948 -3.02C0.948 -3.292 0.948 -3.605 1.165 -3.912C1.311 -4.122 1.52 -4.289 1.869 -4.289C2.545 -4.289 2.692 -3.473 2.713 -3.027Z' id='g0-57'/>
-<path d='M1.339 -3.096H0.711V-2.469H1.339V-3.096ZM0.711 -0.628V0H1.339V-0.628H0.711Z' id='g0-58'/>
-<path d='M4.142 -0.614C4.038 -0.614 4.024 -0.614 3.968 -0.586C3.626 -0.467 3.271 -0.391 2.901 -0.391C1.778 -0.391 0.976 -1.339 0.976 -2.42C0.976 -3.592 1.883 -4.449 2.859 -4.449C3.055 -4.449 3.515 -4.4 3.745 -3.843C3.55 -3.954 3.333 -4.003 3.152 -4.003C2.406 -4.003 1.778 -3.306 1.778 -2.42C1.778 -1.513 2.427 -0.837 3.145 -0.837C3.689 -0.837 4.519 -1.276 4.519 -2.518C4.519 -3.222 4.47 -4.91 2.866 -4.91C1.541 -4.91 0.411 -3.815 0.411 -2.42C0.411 -1.039 1.527 0.07 2.873 0.07C3.515 0.07 4.115 -0.195 4.519 -0.614H4.142ZM3.152 -1.297C2.72 -1.297 2.343 -1.778 2.343 -2.42C2.343 -3.082 2.734 -3.543 3.145 -3.543C3.578 -3.543 3.954 -3.062 3.954 -2.42C3.954 -1.757 3.564 -1.297 3.152 -1.297Z' id='g0-64'/>
-<path d='M4.317 -0.851C3.829 -0.551 3.605 -0.418 2.908 -0.418C1.827 -0.418 1.172 -1.43 1.172 -2.434C1.172 -3.466 1.89 -4.435 2.908 -4.435C3.368 -4.435 3.843 -4.289 4.163 -4.045L4.275 -4.679C3.787 -4.861 3.396 -4.917 2.887 -4.917C1.506 -4.917 0.474 -3.773 0.474 -2.427C0.474 -0.99 1.569 0.07 2.929 0.07C3.612 0.07 3.898 -0.07 4.359 -0.321L4.317 -0.851Z' id='g0-67'/>
-<path d='M4.442 -2.085H2.88V-1.625H3.829V-0.558C3.522 -0.481 3.222 -0.418 2.908 -0.418C1.834 -0.418 1.172 -1.43 1.172 -2.427C1.172 -3.382 1.82 -4.435 2.873 -4.435C3.515 -4.435 3.919 -4.24 4.268 -3.947L4.38 -4.582C3.898 -4.812 3.473 -4.924 2.943 -4.924C1.534 -4.924 0.474 -3.822 0.474 -2.427C0.474 -1.067 1.527 0.07 2.901 0.07C3.403 0.07 3.996 -0.042 4.442 -0.272V-2.085Z' id='g0-71'/>
-<path d='M1.381 -4.84H0.676V0H1.381V-4.84Z' id='g0-73'/>
-<path d='M1.646 -4.84H0.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-0.551H3.933L1.646 -4.84Z' id='g0-78'/>
-<path d='M4.4 -4.84H3.794V-1.625C3.794 -0.69 3.166 -0.265 2.566 -0.265S1.381 -0.697 1.381 -1.618V-4.84H0.676V-1.632C0.676 -0.607 1.555 0.146 2.559 0.146C3.557 0.146 4.4 -0.614 4.4 -1.632V-4.84Z' id='g0-85'/>
-<path d='M2.755 -2.552L4.519 -4.84H3.759L2.413 -3.055L1.039 -4.84H0.209L2.071 -2.552L0.105 0H0.865L2.413 -2.099L3.996 0H4.826L2.755 -2.552Z' id='g0-88'/>
-<path d='M2.971 -2.008C2.971 -2.72 2.427 -3.201 1.736 -3.201C1.297 -3.201 0.962 -3.11 0.572 -2.901L0.614 -2.392C0.844 -2.545 1.186 -2.755 1.736 -2.755C2.043 -2.755 2.364 -2.525 2.364 -2.001V-1.723C1.332 -1.688 0.314 -1.471 0.314 -0.823C0.314 -0.474 0.551 0.07 1.165 0.07C1.465 0.07 2.015 0.007 2.385 -0.265V0H2.971V-2.008ZM2.364 -0.99C2.364 -0.851 2.364 -0.669 2.12 -0.523C1.897 -0.398 1.625 -0.391 1.548 -0.391C1.165 -0.391 0.872 -0.565 0.872 -0.83C0.872 -1.276 2.05 -1.318 2.364 -1.332V-0.99Z' id='g0-97'/>
-<path d='M1.179 -4.84H0.593V0H1.2V-0.328C1.353 -0.195 1.688 0.07 2.197 0.07C2.957 0.07 3.571 -0.642 3.571 -1.555C3.571 -2.399 3.089 -3.166 2.392 -3.166C1.953 -3.166 1.527 -3.027 1.179 -2.769V-4.84ZM1.2 -2.197C1.2 -2.308 1.2 -2.392 1.444 -2.552C1.548 -2.615 1.736 -2.706 1.974 -2.706C2.441 -2.706 2.964 -2.392 2.964 -1.555C2.964 -0.704 2.385 -0.391 1.897 -0.391C1.639 -0.391 1.395 -0.509 1.2 -0.823V-2.197Z' id='g0-98'/>
-<path d='M3.034 -0.76C2.685 -0.537 2.308 -0.411 1.876 -0.411C1.234 -0.411 0.858 -0.928 0.858 -1.555C0.858 -2.092 1.137 -2.72 1.897 -2.72C2.371 -2.72 2.594 -2.622 2.95 -2.399L3.041 -2.901C2.622 -3.11 2.441 -3.201 1.897 -3.201C0.851 -3.201 0.251 -2.357 0.251 -1.548C0.251 -0.697 0.921 0.07 1.869 0.07C2.357 0.07 2.776 -0.077 3.075 -0.251L3.034 -0.76Z' id='g0-99'/>
-<path d='M3.229 -4.84H2.643V-2.797C2.197 -3.124 1.743 -3.166 1.541 -3.166C0.809 -3.166 0.251 -2.434 0.251 -1.548S0.802 0.07 1.52 0.07C1.953 0.07 2.357 -0.126 2.622 -0.363V0H3.229V-4.84ZM2.622 -0.865C2.448 -0.579 2.183 -0.391 1.848 -0.391C1.36 -0.391 0.858 -0.732 0.858 -1.541C0.858 -2.413 1.451 -2.706 1.925 -2.706C2.204 -2.706 2.441 -2.587 2.622 -2.35V-0.865Z' id='g0-100'/>
-<path d='M2.999 -0.76C2.608 -0.481 2.169 -0.391 1.869 -0.391C1.262 -0.391 0.802 -0.886 0.781 -1.527H3.068C3.068 -1.848 3.034 -2.315 2.762 -2.713C2.511 -3.068 2.092 -3.201 1.75 -3.201C0.9 -3.201 0.244 -2.455 0.244 -1.569C0.244 -0.676 0.941 0.07 1.862 0.07C2.267 0.07 2.685 -0.049 3.041 -0.265L2.999 -0.76ZM0.83 -1.946C0.99 -2.504 1.402 -2.741 1.75 -2.741C2.057 -2.741 2.511 -2.594 2.643 -1.946H0.83Z' id='g0-101'/>
-<path d='M3.508 -3.166C3.354 -3.166 2.887 -3.159 2.357 -2.957L2.343 -2.95C2.092 -3.117 1.848 -3.166 1.646 -3.166C0.962 -3.166 0.453 -2.629 0.453 -2.029C0.453 -1.785 0.537 -1.534 0.697 -1.339C0.6 -1.22 0.495 -1.025 0.495 -0.76C0.495 -0.488 0.607 -0.314 0.669 -0.23C0.286 -0.007 0.209 0.314 0.209 0.481C0.209 1.011 0.941 1.43 1.848 1.43C2.762 1.43 3.487 1.011 3.487 0.481C3.487 -0.502 2.267 -0.502 1.967 -0.502H1.318C1.206 -0.502 0.907 -0.502 0.907 -0.865C0.907 -1.004 0.955 -1.074 0.962 -1.088C1.206 -0.934 1.451 -0.886 1.639 -0.886C2.322 -0.886 2.831 -1.423 2.831 -2.022C2.831 -2.246 2.769 -2.448 2.643 -2.636C2.615 -2.678 2.615 -2.685 2.615 -2.692C2.615 -2.72 3.034 -2.72 3.068 -2.72C3.075 -2.72 3.34 -2.72 3.592 -2.692L3.508 -3.166ZM1.646 -1.318C1.269 -1.318 0.99 -1.555 0.99 -2.022C0.99 -2.566 1.339 -2.734 1.639 -2.734C2.015 -2.734 2.294 -2.497 2.294 -2.029C2.294 -1.485 1.946 -1.318 1.646 -1.318ZM1.974 0.042C2.134 0.042 2.957 0.042 2.957 0.488C2.957 0.788 2.434 0.997 1.848 0.997S0.739 0.788 0.739 0.488C0.739 0.453 0.739 0.042 1.304 0.042H1.974Z' id='g0-103'/>
-<path d='M3.243 -2.064C3.243 -2.608 3.082 -3.166 2.225 -3.166C1.625 -3.166 1.304 -2.817 1.165 -2.671V-4.84H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-2.064Z' id='g0-104'/>
-<path d='M1.227 -4.784H0.523V-4.08H1.227V-4.784ZM1.172 -3.096H0.586V0H1.172V-3.096Z' id='g0-105'/>
-<path d='M1.381 -4.784H0.676V-4.08H1.381V-4.784ZM-0.453 1.186C-0.133 1.36 0.181 1.423 0.446 1.423C0.928 1.423 1.381 1.053 1.381 0.411V-3.096H0.795V0.46C0.795 0.586 0.795 0.697 0.649 0.816C0.488 0.934 0.293 0.934 0.23 0.934C-0.063 0.934 -0.244 0.802 -0.328 0.725L-0.453 1.186Z' id='g0-106'/>
-<path d='M1.172 -4.84H0.586V0H1.172V-4.84Z' id='g0-108'/>
-<path d='M5.3 -2.064C5.3 -2.608 5.14 -3.166 4.282 -3.166C3.696 -3.166 3.333 -2.824 3.166 -2.601C3.096 -2.79 2.922 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-1.695C3.243 -2.155 3.438 -2.706 3.975 -2.706C4.693 -2.706 4.693 -2.218 4.693 -2.015V0H5.3V-2.064Z' id='g0-109'/>
-<path d='M3.243 -2.064C3.243 -2.608 3.082 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-2.064Z' id='g0-110'/>
-<path d='M3.487 -1.527C3.487 -2.448 2.755 -3.201 1.848 -3.201S0.209 -2.441 0.209 -1.527C0.209 -0.642 0.948 0.07 1.848 0.07C2.755 0.07 3.487 -0.642 3.487 -1.527ZM1.848 -0.411C1.297 -0.411 0.816 -0.816 0.816 -1.604S1.332 -2.741 1.848 -2.741C2.371 -2.741 2.88 -2.378 2.88 -1.604C2.88 -0.809 2.385 -0.411 1.848 -0.411Z' id='g0-111'/>
-<path d='M1.2 -0.328C1.569 0.007 1.967 0.07 2.204 0.07C2.943 0.07 3.571 -0.635 3.571 -1.555C3.571 -2.392 3.11 -3.166 2.42 -3.166C2.106 -3.166 1.583 -3.075 1.179 -2.762V-3.096H0.593V1.353H1.2V-0.328ZM1.2 -2.315C1.36 -2.511 1.632 -2.685 1.967 -2.685C2.525 -2.685 2.964 -2.169 2.964 -1.555C2.964 -0.865 2.441 -0.391 1.897 -0.391C1.792 -0.391 1.618 -0.404 1.437 -0.551C1.227 -0.711 1.2 -0.816 1.2 -0.948V-2.315Z' id='g0-112'/>
-<path d='M1.179 -1.485C1.179 -2.239 1.806 -2.643 2.42 -2.65V-3.166C1.834 -3.159 1.409 -2.873 1.13 -2.504V-3.145H0.593V0H1.179V-1.485Z' id='g0-114'/>
-<path d='M2.545 -2.985C2.071 -3.18 1.723 -3.201 1.471 -3.201C1.297 -3.201 0.244 -3.201 0.244 -2.273C0.244 -1.946 0.425 -1.764 0.516 -1.681C0.76 -1.437 1.053 -1.381 1.423 -1.311C1.75 -1.248 2.127 -1.179 2.127 -0.844C2.127 -0.404 1.548 -0.404 1.451 -0.404C1.004 -0.404 0.586 -0.565 0.307 -0.76L0.209 -0.237C0.446 -0.119 0.872 0.07 1.451 0.07C1.764 0.07 2.071 0.021 2.329 -0.167C2.587 -0.363 2.671 -0.669 2.671 -0.907C2.671 -1.032 2.657 -1.304 2.364 -1.569C2.106 -1.799 1.855 -1.848 1.52 -1.911C1.109 -1.988 0.788 -2.05 0.788 -2.357C0.788 -2.755 1.297 -2.755 1.402 -2.755C1.799 -2.755 2.106 -2.671 2.455 -2.49L2.545 -2.985Z' id='g0-115'/>
-<path d='M1.311 -2.657H2.343V-3.096H1.311V-3.982H0.774V-3.096H0.139V-2.657H0.753V-0.893C0.753 -0.425 0.872 0.07 1.374 0.07S2.26 -0.091 2.469 -0.188L2.35 -0.635C2.12 -0.467 1.876 -0.411 1.681 -0.411C1.388 -0.411 1.311 -0.697 1.311 -1.018V-2.657Z' id='g0-116'/>
-<path d='M3.243 -3.096H2.636V-1.074C2.636 -0.516 2.162 -0.342 1.757 -0.342C1.241 -0.342 1.186 -0.481 1.186 -0.802V-3.096H0.579V-0.76C0.579 -0.139 0.851 0.07 1.339 0.07C1.625 0.07 2.239 0.014 2.657 -0.321V0H3.243V-3.096Z' id='g0-117'/>
-<path d='M4.951 -3.096H4.407C4.345 -2.901 3.954 -1.723 3.738 -0.997C3.682 -0.795 3.612 -0.572 3.592 -0.411H3.585C3.543 -0.697 3.299 -1.451 3.285 -1.499L2.769 -3.096H2.239C2.036 -2.497 1.513 -0.934 1.458 -0.425H1.451C1.395 -0.921 0.879 -2.462 0.767 -2.797C0.711 -2.964 0.711 -2.978 0.676 -3.096H0.105L1.123 0H1.709C1.716 -0.028 1.904 -0.579 2.148 -1.353C2.253 -1.695 2.462 -2.364 2.497 -2.671L2.504 -2.678C2.518 -2.532 2.559 -2.378 2.608 -2.204S2.706 -1.841 2.755 -1.681L3.292 0H3.933L4.951 -3.096Z' id='g0-119'/>
-<path d='M1.932 -1.597L3.285 -3.096H2.671L1.681 -1.953L0.669 -3.096H0.042L1.437 -1.597L0 0H0.621L1.681 -1.311L2.783 0H3.41L1.932 -1.597Z' id='g0-120'/>
-<path d='M2.957 -2.803V-3.096H0.307V-2.65H1.332C1.416 -2.65 1.499 -2.657 1.583 -2.657H2.127L0.209 -0.307V0H2.978V-0.467H1.897C1.813 -0.467 1.73 -0.46 1.646 -0.46H1.039L2.957 -2.803Z' id='g0-122'/>
-</defs>
-<g id='page8'>
-<path d='M194.617 258.141V249.281M253.285 258.141V249.281M311.953 258.141V249.281M370.625 258.141V249.281M429.293 258.141V249.281M194.617 72.66V81.519M253.285 72.66V81.519M311.953 72.66V81.519M370.625 72.66V81.519M429.293 72.66V81.519' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M165.281 253.535V249.281M223.953 253.535V249.281M282.621 253.535V249.281M341.289 253.535V249.281M399.957 253.535V249.281M458.629 253.535V249.281M165.281 77.266V81.519M223.953 77.266V81.519M282.621 77.266V81.519M341.289 77.266V81.519M399.957 77.266V81.519M458.629 77.266V81.519' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 249.281H140.199M135.949 215.73H140.199M135.949 182.176H140.199M135.949 148.625H140.199M135.949 115.07H140.199M135.949 81.519H140.199M487.961 249.281H483.711M487.961 215.73H483.711M487.961 182.176H483.711M487.961 148.625H483.711M487.961 115.07H483.711M487.961 81.519H483.711' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 249.281V81.519H487.961V249.281H135.949Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -21.265 74.992)'>
-<use x='168.285' xlink:href='#g3-97' y='188.688'/>
-<use x='172.353' xlink:href='#g3-108' y='188.688'/>
-<use x='174.373' xlink:href='#g3-108' y='188.688'/>
-<use x='176.393' xlink:href='#g3-111' y='188.688'/>
-<use x='180.863' xlink:href='#g3-99' y='188.688'/>
-<use x='184.627' xlink:href='#g3-45' y='188.688'/>
-<use x='187.449' xlink:href='#g3-116' y='188.688'/>
-<use x='190.507' xlink:href='#g3-101' y='188.688'/>
-<use x='194.271' xlink:href='#g3-115' y='188.688'/>
-<use x='197.517' xlink:href='#g3-116' y='188.688'/>
-<use x='200.575' xlink:href='#g3-49' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 74.992)'>
-<use x='168.285' xlink:href='#g3-97' y='188.688'/>
-<use x='172.353' xlink:href='#g3-108' y='188.688'/>
-<use x='174.373' xlink:href='#g3-108' y='188.688'/>
-<use x='176.393' xlink:href='#g3-111' y='188.688'/>
-<use x='180.863' xlink:href='#g3-99' y='188.688'/>
-<use x='184.627' xlink:href='#g3-45' y='188.688'/>
-<use x='187.449' xlink:href='#g3-116' y='188.688'/>
-<use x='190.507' xlink:href='#g3-101' y='188.688'/>
-<use x='194.271' xlink:href='#g3-115' y='188.688'/>
-<use x='197.517' xlink:href='#g3-116' y='188.688'/>
-<use x='200.575' xlink:href='#g3-78' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 74.992)'>
-<use x='168.285' xlink:href='#g3-115' y='188.688'/>
-<use x='171.531' xlink:href='#g3-104' y='188.688'/>
-<use x='175.904' xlink:href='#g3-54' y='188.688'/>
-<use x='180.138' xlink:href='#g3-98' y='188.688'/>
-<use x='184.746' xlink:href='#g3-101' y='188.688'/>
-<use x='188.509' xlink:href='#g3-110' y='188.688'/>
-<use x='192.882' xlink:href='#g3-99' y='188.688'/>
-<use x='196.646' xlink:href='#g3-104' y='188.688'/>
-<use x='201.018' xlink:href='#g3-78' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 74.992)'>
-<use x='168.285' xlink:href='#g3-115' y='188.688'/>
-<use x='171.531' xlink:href='#g3-104' y='188.688'/>
-<use x='175.904' xlink:href='#g3-56' y='188.688'/>
-<use x='180.138' xlink:href='#g3-98' y='188.688'/>
-<use x='184.746' xlink:href='#g3-101' y='188.688'/>
-<use x='188.509' xlink:href='#g3-110' y='188.688'/>
-<use x='192.882' xlink:href='#g3-99' y='188.688'/>
-<use x='196.646' xlink:href='#g3-104' y='188.688'/>
-<use x='201.018' xlink:href='#g3-78' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 74.992)'>
-<use x='168.285' xlink:href='#g3-120' y='188.688'/>
-<use x='172.187' xlink:href='#g3-109' y='188.688'/>
-<use x='178.912' xlink:href='#g3-97' y='188.688'/>
-<use x='182.98' xlink:href='#g3-108' y='188.688'/>
-<use x='185' xlink:href='#g3-108' y='188.688'/>
-<use x='187.02' xlink:href='#g3-111' y='188.688'/>
-<use x='191.49' xlink:href='#g3-99' y='188.688'/>
-<use x='195.254' xlink:href='#g3-45' y='188.688'/>
-<use x='198.076' xlink:href='#g3-116' y='188.688'/>
-<use x='201.134' xlink:href='#g3-101' y='188.688'/>
-<use x='204.898' xlink:href='#g3-115' y='188.688'/>
-<use x='208.144' xlink:href='#g3-116' y='188.688'/>
-<use x='211.202' xlink:href='#g3-78' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 74.992)'>
-<use x='168.285' xlink:href='#g3-99' y='188.688'/>
-<use x='172.049' xlink:href='#g3-97' y='188.688'/>
-<use x='176.117' xlink:href='#g3-99' y='188.688'/>
-<use x='179.88' xlink:href='#g3-104' y='188.688'/>
-<use x='184.253' xlink:href='#g3-101' y='188.688'/>
-<use x='188.017' xlink:href='#g3-45' y='188.688'/>
-<use x='190.839' xlink:href='#g3-115' y='188.688'/>
-<use x='194.086' xlink:href='#g3-99' y='188.688'/>
-<use x='197.849' xlink:href='#g3-114' y='188.688'/>
-<use x='200.741' xlink:href='#g3-97' y='188.688'/>
-<use x='204.81' xlink:href='#g3-116' y='188.688'/>
-<use x='207.868' xlink:href='#g3-99' y='188.688'/>
-<use x='211.631' xlink:href='#g3-104' y='188.688'/>
-<use x='216.004' xlink:href='#g3-78' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 62.23)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-120' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 28.677)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-53' y='188.688'/>
-<use x='175.048' xlink:href='#g2-120' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -4.876)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-120' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -38.43)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-53' y='188.688'/>
-<use x='175.048' xlink:href='#g2-120' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.983)'>
-<use x='168.285' xlink:href='#g2-50' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-120' y='188.688'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -105.536)'>
-<use x='168.285' xlink:href='#g2-50' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-53' y='188.688'/>
-<use x='175.048' xlink:href='#g2-120' y='188.688'/>
-</g>
-<path clip-path='url(#clip8)' d='M135.949 182.176H487.961' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M142.742 249.281H145.981V182.176H142.742ZM201.41 249.281H204.649V182.176H201.41ZM260.078 249.281H263.317V182.176H260.078ZM318.75 249.281H321.988V182.176H318.75ZM377.418 249.281H380.656V182.176H377.418ZM436.086 249.281H439.324V182.176H436.086Z' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M142.742 249.281H145.981V182.176H142.742ZM201.41 249.281H204.649V182.176H201.41ZM260.078 249.281H263.317V182.176H260.078ZM318.75 249.281H321.988V182.176H318.75ZM377.418 249.281H380.656V182.176H377.418ZM436.086 249.281H439.324V182.176H436.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M144.359 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M142.367 182.176H146.351' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M144.359 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M142.367 182.176H146.351' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M203.031 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M201.035 182.176H205.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M203.031 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M201.035 182.176H205.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M261.699 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M259.707 182.176H263.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M261.699 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M259.707 182.176H263.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M320.367 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M318.375 182.176H322.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M320.367 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M318.375 182.176H322.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M379.035 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M377.043 182.176H381.027' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M379.035 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M377.043 182.176H381.027' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M437.707 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M435.711 182.176H439.699' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M437.707 182.176V182.176' fill='#ffffff'/>
-<path clip-path='url(#clip8)' d='M435.711 182.176H439.699' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M147.973 249.281H151.211V164.73H147.973ZM206.641 249.281H209.879V161.977H206.641ZM265.309 249.281H268.547V183.25H265.309ZM323.981 249.281H327.219V209.891H323.981ZM382.649 249.281H385.887V224.184H382.649ZM441.317 249.281H444.555V141.242H441.317Z' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M147.973 249.281H151.211V164.73H147.973ZM206.641 249.281H209.879V161.977H206.641ZM265.309 249.281H268.547V183.25H265.309ZM323.981 249.281H327.219V209.891H323.981ZM382.649 249.281H385.887V224.184H382.649ZM441.317 249.281H444.555V141.242H441.317Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M149.59 164.73V164.73' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M147.598 164.73H151.582' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M149.59 164.73V164.73' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M147.598 164.73H151.582' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M208.262 161.977V161.977' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M206.266 161.976H210.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M208.262 161.977V161.977' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M206.266 161.976H210.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M266.93 183.25V183.25' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M264.938 183.25H268.922' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M266.93 183.25V183.25' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M264.938 183.25H268.922' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M325.598 209.891V209.891' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M323.606 209.891H327.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M325.598 209.891V209.891' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M323.606 209.891H327.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M384.266 224.184V224.184' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M382.274 224.183H386.258' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M384.266 224.184V224.184' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M382.274 224.183H386.258' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M442.938 141.242V141.242' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M440.942 141.242H444.93' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M442.938 141.242V141.242' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M440.942 141.242H444.93' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M153.203 249.281H156.442V185.129H153.203ZM211.871 249.281H215.11V177.883H211.871ZM270.539 249.281H273.777V181.437H270.539ZM329.211 249.281H332.449V192.848H329.211ZM387.879 249.281H391.117V183.719H387.879ZM446.547 249.281H449.785V145H446.547Z' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M153.203 249.281H156.442V185.129H153.203ZM211.871 249.281H215.11V177.883H211.871ZM270.539 249.281H273.777V181.437H270.539ZM329.211 249.281H332.449V192.848H329.211ZM387.879 249.281H391.117V183.719H387.879ZM446.547 249.281H449.785V145H446.547Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M154.82 185.129V185.129' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M152.828 185.129H156.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M154.82 185.129V185.129' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M152.828 185.129H156.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M213.492 177.883V177.883' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M211.496 177.883H215.484' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M213.492 177.883V177.883' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M211.496 177.883H215.484' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M272.16 181.437V181.437' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M270.168 181.438H274.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M272.16 181.437V181.437' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M270.168 181.438H274.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M330.828 192.848V192.848' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M328.836 192.848H332.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M330.828 192.848V192.848' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M328.836 192.848H332.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M389.496 183.719V183.719' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M387.504 183.718H391.488' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M389.496 183.719V183.719' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M387.504 183.718H391.488' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M448.168 145V145' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M446.172 145H450.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M448.168 145V145' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M446.172 145H450.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M158.434 249.281H161.672V180.969H158.434ZM217.102 249.281H220.34V172.043H217.102ZM275.77 249.281H279.008V172.312H275.77ZM334.442 249.281H337.68V194.996H334.442ZM393.109 249.281H396.348V195.531H393.109ZM451.777 249.281H455.016V180.098H451.777Z' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M158.434 249.281H161.672V180.969H158.434ZM217.102 249.281H220.34V172.043H217.102ZM275.77 249.281H279.008V172.312H275.77ZM334.442 249.281H337.68V194.996H334.442ZM393.109 249.281H396.348V195.531H393.109ZM451.777 249.281H455.016V180.098H451.777Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M160.051 180.969V180.969' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M158.058 180.969H162.042' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M160.051 180.969V180.969' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M158.058 180.969H162.042' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M218.723 172.043V172.043' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M216.726 172.043H220.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M218.723 172.043V172.043' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M216.726 172.043H220.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M277.391 172.312V172.312' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M275.398 172.312H279.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M277.391 172.312V172.312' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M275.398 172.312H279.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M336.059 194.996V194.996' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M334.066 194.996H338.05' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M336.059 194.996V194.996' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M334.066 194.996H338.05' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M394.727 195.531V195.531' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M392.734 195.531H396.718' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M394.727 195.531V195.531' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M392.734 195.531H396.718' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M453.399 180.098V180.098' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M451.402 180.098H455.39' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M453.399 180.098V180.098' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M451.402 180.098H455.39' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M163.664 249.281H166.903V180.363H163.664ZM222.332 249.281H225.57V144.465H222.332ZM281 249.281H284.238V171.707H281ZM339.672 249.281H342.91V191.641H339.672ZM398.34 249.281H401.578V81.519H398.34ZM457.008 249.281H460.246V190.027H457.008Z' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M163.664 249.281H166.903V180.363H163.664ZM222.332 249.281H225.57V144.465H222.332ZM281 249.281H284.238V171.707H281ZM339.672 249.281H342.91V191.641H339.672ZM398.34 249.281H401.578V81.519H398.34ZM457.008 249.281H460.246V190.027H457.008Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M165.281 180.363V180.363' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M163.289 180.363H167.274' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M165.281 180.363V180.363' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M163.289 180.363H167.274' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M223.953 144.465V144.465' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M221.957 144.464H225.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M223.953 144.465V144.465' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M221.957 144.464H225.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M282.621 171.707V171.707' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M280.629 171.707H284.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M282.621 171.707V171.707' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M280.629 171.707H284.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M341.289 191.641V191.641' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M339.297 191.641H343.281' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M341.289 191.641V191.641' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M339.297 191.641H343.281' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M399.957 81.519V81.519' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M397.965 81.52H401.949' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M399.957 81.519V81.519' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M397.965 81.52H401.949' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M458.629 190.027V190.027' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M456.633 190.027H460.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M458.629 190.027V190.027' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M456.633 190.027H460.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M168.895 249.281H172.133V157.348H168.895ZM227.563 249.281H230.801V81.519H227.563ZM286.231 249.281H289.469V141.711H286.231ZM344.902 249.281H348.141V124.601H344.902ZM403.57 249.281H406.809V132.25H403.57ZM462.238 249.281H465.477V189.894H462.238Z' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M168.895 249.281H172.133V157.348H168.895ZM227.563 249.281H230.801V81.519H227.563ZM286.231 249.281H289.469V141.711H286.231ZM344.902 249.281H348.141V124.601H344.902ZM403.57 249.281H406.809V132.25H403.57ZM462.238 249.281H465.477V189.894H462.238Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M170.512 157.348V157.348' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M168.519 157.348H172.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M170.512 157.348V157.348' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M168.519 157.348H172.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M229.184 81.519V81.519' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M227.187 81.52H231.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M229.184 81.519V81.519' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M227.187 81.52H231.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M287.852 141.711V141.711' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M285.859 141.711H289.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M287.852 141.711V141.711' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M285.859 141.711H289.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M346.52 124.601V124.601' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M344.527 124.602H348.511' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M346.52 124.601V124.601' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M344.527 124.602H348.511' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M405.188 132.25V132.25' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M403.195 132.25H407.179' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M405.188 132.25V132.25' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M403.195 132.25H407.179' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M463.859 189.894V189.894' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M461.863 189.894H465.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M463.859 189.894V189.894' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M461.863 189.894H465.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M174.125 249.281H177.363V171.574H174.125ZM232.793 249.281H236.031V146.344H232.793ZM291.461 249.281H294.699V169.426H291.461ZM350.133 249.281H353.371V204.254H350.133ZM408.801 249.281H412.039V224.992H408.801ZM467.469 249.281H470.707V163.254H467.469Z' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M174.125 249.281H177.363V171.574H174.125ZM232.793 249.281H236.031V146.344H232.793ZM291.461 249.281H294.699V169.426H291.461ZM350.133 249.281H353.371V204.254H350.133ZM408.801 249.281H412.039V224.992H408.801ZM467.469 249.281H470.707V163.254H467.469Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M175.742 171.574V171.574' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M173.75 171.574H177.735' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M175.742 171.574V171.574' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M173.75 171.574H177.735' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M234.414 146.344V146.344' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M232.418 146.343H236.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M234.414 146.344V146.344' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M232.418 146.343H236.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M293.082 169.426V169.426' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M291.09 169.426H295.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M293.082 169.426V169.426' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M291.09 169.426H295.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M351.75 204.254V204.254' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M349.758 204.254H353.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M351.75 204.254V204.254' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M349.758 204.254H353.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M410.418 224.992V224.992' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M408.426 224.992H412.41' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M410.418 224.992V224.992' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M408.426 224.992H412.41' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M469.09 163.254V163.254' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M467.094 163.254H471.082' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M469.09 163.254V163.254' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M467.094 163.254H471.082' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M179.356 249.281H182.594V176.004H179.356ZM238.024 249.281H241.262V169.16H238.024ZM296.692 249.281H299.93V149.699H296.692ZM355.363 249.281H358.602V121.043H355.363ZM414.031 249.281H417.27V214.051H414.031ZM472.699 249.281H475.938V194.121H472.699Z' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M179.356 249.281H182.594V176.004H179.356ZM238.024 249.281H241.262V169.16H238.024ZM296.692 249.281H299.93V149.699H296.692ZM355.363 249.281H358.602V121.043H355.363ZM414.031 249.281H417.27V214.051H414.031ZM472.699 249.281H475.938V194.121H472.699Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M180.973 176.004V176.004' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M178.98 176.004H182.965' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M180.973 176.004V176.004' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M178.98 176.004H182.965' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M239.645 169.16V169.16' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M237.648 169.16H241.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M239.645 169.16V169.16' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M237.648 169.16H241.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M298.313 149.699V149.699' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M296.32 149.7H300.304' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M298.313 149.699V149.699' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M296.32 149.7H300.304' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M356.981 121.043V121.043' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M354.988 121.043H358.972' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M356.981 121.043V121.043' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M354.988 121.043H358.972' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M415.649 214.051V214.051' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M413.656 214.05H417.64' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M415.649 214.051V214.051' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M413.656 214.05H417.64' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M474.32 194.121V194.121' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M472.324 194.121H476.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M474.32 194.121V194.121' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M472.324 194.121H476.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M184.586 249.281H187.824V181.641H184.586ZM243.254 249.281H246.492V115.137H243.254ZM301.922 249.281H305.16V176.605H301.922ZM360.594 249.281H363.832V185.734H360.594ZM419.262 249.281H422.5V164.125H419.262ZM477.93 249.281H481.168V179.828H477.93Z' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M184.586 249.281H187.824V181.641H184.586ZM243.254 249.281H246.492V115.137H243.254ZM301.922 249.281H305.16V176.605H301.922ZM360.594 249.281H363.832V185.734H360.594ZM419.262 249.281H422.5V164.125H419.262ZM477.93 249.281H481.168V179.828H477.93Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M186.203 181.641V181.641' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M184.211 181.64H188.196' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M186.203 181.641V181.641' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M184.211 181.64H188.196' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M244.875 115.137V115.137' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M242.879 115.137H246.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M244.875 115.137V115.137' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M242.879 115.137H246.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M303.543 176.605V176.605' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M301.551 176.605H305.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M303.543 176.605V176.605' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M301.551 176.605H305.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M362.211 185.734V185.734' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M360.219 185.735H364.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M362.211 185.734V185.734' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M360.219 185.735H364.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M420.879 164.125V164.125' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M418.887 164.125H422.871' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M420.879 164.125V164.125' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M418.887 164.125H422.871' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M479.551 179.828V179.828' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M477.555 179.828H481.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M479.551 179.828V179.828' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M477.555 179.828H481.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M420.539 310.336H487.762V276.324H420.539Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 255.575 118.327)'>
-<use x='168.285' xlink:href='#g2-99' y='164.777'/>
-<use x='170.637' xlink:href='#g2-53' y='164.777'/>
-<use x='173.284' xlink:href='#g2-45' y='164.777'/>
-<use x='175.048' xlink:href='#g2-49' y='164.777'/>
-<use x='177.694' xlink:href='#g2-56' y='164.777'/>
-<use x='180.341' xlink:href='#g2-120' y='164.777'/>
-<use x='182.779' xlink:href='#g2-108' y='164.777'/>
-<use x='184.042' xlink:href='#g2-97' y='164.777'/>
-<use x='186.438' xlink:href='#g2-114' y='164.777'/>
-<use x='188.245' xlink:href='#g2-103' y='164.777'/>
-<use x='190.891' xlink:href='#g2-101' y='164.777'/>
-<use x='193.244' xlink:href='#g2-44' y='164.777'/>
-<use x='196.478' xlink:href='#g2-49' y='164.777'/>
-<use x='199.124' xlink:href='#g2-52' y='164.777'/>
-<use x='201.771' xlink:href='#g2-52' y='164.777'/>
-<use x='204.417' xlink:href='#g2-71' y='164.777'/>
-<use x='207.946' xlink:href='#g2-98' y='164.777'/>
-<use x='168.285' xlink:href='#g2-55' y='170.755'/>
-<use x='170.931' xlink:href='#g2-50' y='170.755'/>
-<use x='175.342' xlink:href='#g2-112' y='170.755'/>
-<use x='177.928' xlink:href='#g2-114' y='170.755'/>
-<use x='179.735' xlink:href='#g2-111' y='170.755'/>
-<use x='182.529' xlink:href='#g2-99' y='170.755'/>
-<use x='186.645' xlink:href='#g2-73' y='170.755'/>
-<use x='188.115' xlink:href='#g2-110' y='170.755'/>
-<use x='190.848' xlink:href='#g2-116' y='170.755'/>
-<use x='192.759' xlink:href='#g2-101' y='170.755'/>
-<use x='195.112' xlink:href='#g2-108' y='170.755'/>
-<use x='198.139' xlink:href='#g2-88' y='170.755'/>
-<use x='201.667' xlink:href='#g2-101' y='170.755'/>
-<use x='204.019' xlink:href='#g2-111' y='170.755'/>
-<use x='206.666' xlink:href='#g2-110' y='170.755'/>
-<use x='211.163' xlink:href='#g2-64' y='170.755'/>
-<use x='214.691' xlink:href='#g2-51' y='170.755'/>
-<use x='217.338' xlink:href='#g2-71' y='170.755'/>
-<use x='220.866' xlink:href='#g2-104' y='170.755'/>
-<use x='223.599' xlink:href='#g2-122' y='170.755'/>
-<use x='168.285' xlink:href='#g2-85' y='176.733'/>
-<use x='171.917' xlink:href='#g2-98' y='176.733'/>
-<use x='174.65' xlink:href='#g2-117' y='176.733'/>
-<use x='177.383' xlink:href='#g2-110' y='176.733'/>
-<use x='180.116' xlink:href='#g2-116' y='176.733'/>
-<use x='182.027' xlink:href='#g2-117' y='176.733'/>
-<use x='186.524' xlink:href='#g2-49' y='176.733'/>
-<use x='189.17' xlink:href='#g2-56' y='176.733'/>
-<use x='191.817' xlink:href='#g2-46' y='176.733'/>
-<use x='193.287' xlink:href='#g2-48' y='176.733'/>
-<use x='195.933' xlink:href='#g2-52' y='176.733'/>
-<use x='198.58' xlink:href='#g2-46' y='176.733'/>
-<use x='200.05' xlink:href='#g2-49' y='176.733'/>
-<use x='202.696' xlink:href='#g2-44' y='176.733'/>
-<use x='205.931' xlink:href='#g2-71' y='176.733'/>
-<use x='209.459' xlink:href='#g2-67' y='176.733'/>
-<use x='212.841' xlink:href='#g2-67' y='176.733'/>
-<use x='217.986' xlink:href='#g2-55' y='176.733'/>
-<use x='220.633' xlink:href='#g2-46' y='176.733'/>
-<use x='222.103' xlink:href='#g2-52' y='176.733'/>
-<use x='224.749' xlink:href='#g2-46' y='176.733'/>
-<use x='226.219' xlink:href='#g2-48' y='176.733'/>
-<use x='168.285' xlink:href='#g2-51' y='182.71'/>
-<use x='170.931' xlink:href='#g2-54' y='182.71'/>
-<use x='175.342' xlink:href='#g2-99' y='182.71'/>
-<use x='177.694' xlink:href='#g2-111' y='182.71'/>
-<use x='180.193' xlink:href='#g2-114' y='182.71'/>
-<use x='182.001' xlink:href='#g2-101' y='182.71'/>
-<use x='184.353' xlink:href='#g2-115' y='182.71'/>
-<use x='188.146' xlink:href='#g2-111' y='182.71'/>
-<use x='190.793' xlink:href='#g2-110' y='182.71'/>
-<use x='195.29' xlink:href='#g2-50' y='182.71'/>
-<use x='199.7' xlink:href='#g2-110' y='182.71'/>
-<use x='202.433' xlink:href='#g2-117' y='182.71'/>
-<use x='205.166' xlink:href='#g2-109' y='182.71'/>
-<use x='209.369' xlink:href='#g2-97' y='182.71'/>
-<use x='213.676' xlink:href='#g2-110' y='182.71'/>
-<use x='216.409' xlink:href='#g2-111' y='182.71'/>
-<use x='219.202' xlink:href='#g2-100' y='182.71'/>
-<use x='221.935' xlink:href='#g2-101' y='182.71'/>
-<use x='224.287' xlink:href='#g2-115' y='182.71'/>
-<use x='168.285' xlink:href='#g2-50' y='188.688'/>
-<use x='170.931' xlink:href='#g2-48' y='188.688'/>
-<use x='173.578' xlink:href='#g2-50' y='188.688'/>
-<use x='176.224' xlink:href='#g2-48' y='188.688'/>
-<use x='178.87' xlink:href='#g2-45' y='188.688'/>
-<use x='180.635' xlink:href='#g2-48' y='188.688'/>
-<use x='183.281' xlink:href='#g2-49' y='188.688'/>
-<use x='185.927' xlink:href='#g2-45' y='188.688'/>
-<use x='187.692' xlink:href='#g2-49' y='188.688'/>
-<use x='190.338' xlink:href='#g2-56' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -42.693 344.258)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 15.976 344.258)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 74.645 344.258)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 133.314 344.258)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 191.983 344.258)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 250.652 344.258)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -37.462 326.81)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-50' y='188.688'/>
-<use x='175.048' xlink:href='#g2-54' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 21.207 324.059)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-51' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 79.876 345.332)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-57' y='188.688'/>
-<use x='175.048' xlink:href='#g2-56' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 138.545 371.973)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-53' y='188.688'/>
-<use x='175.048' xlink:href='#g2-57' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 197.214 386.266)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-51' y='188.688'/>
-<use x='175.048' xlink:href='#g2-55' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 255.882 303.323)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-54' y='188.688'/>
-<use x='175.048' xlink:href='#g2-49' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -32.232 347.211)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-57' y='188.688'/>
-<use x='175.048' xlink:href='#g2-54' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 26.437 339.963)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-54' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 85.106 343.52)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-49' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 143.775 354.928)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-56' y='188.688'/>
-<use x='175.048' xlink:href='#g2-52' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 202.444 345.801)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-57' y='188.688'/>
-<use x='175.048' xlink:href='#g2-56' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 261.113 307.081)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-53' y='188.688'/>
-<use x='175.048' xlink:href='#g2-53' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -27.002 343.05)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-50' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 31.667 334.125)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-49' y='188.688'/>
-<use x='175.048' xlink:href='#g2-53' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 90.336 334.393)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-49' y='188.688'/>
-<use x='175.048' xlink:href='#g2-53' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 149.005 357.075)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-56' y='188.688'/>
-<use x='175.048' xlink:href='#g2-49' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 207.674 357.612)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-56' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 266.343 342.178)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-51' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -21.771 342.446)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-51' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 36.898 306.544)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-53' y='188.688'/>
-<use x='175.048' xlink:href='#g2-54' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 95.567 333.789)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-49' y='188.688'/>
-<use x='175.048' xlink:href='#g2-54' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 154.236 353.72)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-56' y='188.688'/>
-<use x='175.048' xlink:href='#g2-54' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 212.905 243.599)'>
-<use x='163.396' xlink:href='#g4-1' y='188.688'/>
-<use x='166.901' xlink:href='#g4-1' y='188.688'/>
-<use x='170.407' xlink:href='#g4-1' y='188.688'/>
-<use x='173.912' xlink:href='#g2-50' y='188.688'/>
-<use x='176.558' xlink:href='#g2-55' y='188.688'/>
-<use x='179.205' xlink:href='#g2-46' y='188.688'/>
-<use x='180.675' xlink:href='#g2-51' y='188.688'/>
-<use x='183.321' xlink:href='#g2-51' y='188.688'/>
-<use x='185.968' xlink:href='#g2-120' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 271.574 352.109)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-56' y='188.688'/>
-<use x='175.048' xlink:href='#g2-56' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -16.541 319.429)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-51' y='188.688'/>
-<use x='175.048' xlink:href='#g2-55' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 42.128 243.599)'>
-<use x='163.396' xlink:href='#g4-1' y='188.688'/>
-<use x='166.901' xlink:href='#g4-1' y='188.688'/>
-<use x='170.407' xlink:href='#g4-1' y='188.688'/>
-<use x='173.912' xlink:href='#g2-51' y='188.688'/>
-<use x='176.558' xlink:href='#g2-46' y='188.688'/>
-<use x='178.029' xlink:href='#g2-51' y='188.688'/>
-<use x='180.675' xlink:href='#g2-54' y='188.688'/>
-<use x='183.321' xlink:href='#g2-120' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 100.797 303.793)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-54' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 159.466 286.681)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-56' y='188.688'/>
-<use x='175.048' xlink:href='#g2-54' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 218.135 294.331)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-55' y='188.688'/>
-<use x='175.048' xlink:href='#g2-52' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 276.804 351.975)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-56' y='188.688'/>
-<use x='175.048' xlink:href='#g2-57' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -11.31 333.655)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-49' y='188.688'/>
-<use x='175.048' xlink:href='#g2-54' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 47.359 308.423)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-53' y='188.688'/>
-<use x='175.048' xlink:href='#g2-51' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 106.028 331.508)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-49' y='188.688'/>
-<use x='175.048' xlink:href='#g2-57' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 164.697 366.336)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-54' y='188.688'/>
-<use x='175.048' xlink:href='#g2-55' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 223.366 387.072)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-51' y='188.688'/>
-<use x='175.048' xlink:href='#g2-54' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 282.035 325.334)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-50' y='188.688'/>
-<use x='175.048' xlink:href='#g2-56' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -6.08 338.084)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-57' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 52.589 331.239)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-49' y='188.688'/>
-<use x='175.048' xlink:href='#g2-57' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 111.258 311.779)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-52' y='188.688'/>
-<use x='175.048' xlink:href='#g2-56' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 169.927 283.124)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-57' y='188.688'/>
-<use x='175.048' xlink:href='#g2-49' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 228.596 376.133)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-53' y='188.688'/>
-<use x='175.048' xlink:href='#g2-50' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 287.265 356.203)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-56' y='188.688'/>
-<use x='175.048' xlink:href='#g2-50' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -0.849 343.721)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-49' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 57.82 277.219)'>
-<use x='168.285' xlink:href='#g2-50' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-48' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 116.489 338.688)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-56' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 175.158 347.815)'>
-<use x='168.285' xlink:href='#g2-48' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-57' y='188.688'/>
-<use x='175.048' xlink:href='#g2-53' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 233.827 326.206)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-50' y='188.688'/>
-<use x='175.048' xlink:href='#g2-55' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 292.496 341.909)'>
-<use x='168.285' xlink:href='#g2-49' y='188.688'/>
-<use x='170.931' xlink:href='#g2-46' y='188.688'/>
-<use x='172.401' xlink:href='#g2-48' y='188.688'/>
-<use x='175.048' xlink:href='#g2-52' y='188.688'/>
-</g>
-<g transform='matrix(0 -1 1 0 -75.53 385.58)'>
-<use x='168.285' xlink:href='#g1-82' y='188.688'/>
-<use x='174.255' xlink:href='#g1-101' y='188.688'/>
-<use x='178.351' xlink:href='#g1-108' y='188.688'/>
-<use x='180.551' xlink:href='#g1-97' y='188.688'/>
-<use x='184.979' xlink:href='#g1-116' y='188.688'/>
-<use x='188.307' xlink:href='#g1-105' y='188.688'/>
-<use x='190.507' xlink:href='#g1-118' y='188.688'/>
-<use x='194.755' xlink:href='#g1-101' y='188.688'/>
-<use x='201.922' xlink:href='#g1-114' y='188.688'/>
-<use x='205.07' xlink:href='#g1-115' y='188.688'/>
-<use x='208.603' xlink:href='#g1-115' y='188.688'/>
-<use x='215.207' xlink:href='#g3-40' y='188.688'/>
-<use x='218.5' xlink:href='#g3-108' y='188.688'/>
-<use x='220.521' xlink:href='#g3-111' y='188.688'/>
-<use x='224.52' xlink:href='#g3-119' y='188.688'/>
-<use x='230.068' xlink:href='#g3-101' y='188.688'/>
-<use x='233.832' xlink:href='#g3-114' y='188.688'/>
-<use x='239.547' xlink:href='#g3-105' y='188.688'/>
-<use x='241.567' xlink:href='#g3-115' y='188.688'/>
-<use x='247.636' xlink:href='#g3-98' y='188.688'/>
-<use x='252.244' xlink:href='#g3-101' y='188.688'/>
-<use x='256.008' xlink:href='#g3-116' y='188.688'/>
-<use x='259.066' xlink:href='#g3-116' y='188.688'/>
-<use x='262.124' xlink:href='#g3-101' y='188.688'/>
-<use x='265.887' xlink:href='#g3-114' y='188.688'/>
-<use x='268.779' xlink:href='#g3-41' y='188.688'/>
-</g>
-<path d='M136.149 309.68H341.363V279.68H136.149Z' fill='#ffffff'/>
-<path d='M136.149 309.68H341.363V279.68H136.149Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path d='M139.336 290.168H142.324V282.199H139.336ZM145.313 290.168H148.301V284.191H145.313Z' fill='#ffffff'/>
-<path d='M139.336 290.168H142.324V282.199H139.336ZM145.313 290.168H148.301V284.191H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -40.354 114.479)'>
-<use x='195.372' xlink:href='#g3-120' y='175.681'/>
-<use x='199.274' xlink:href='#g3-109' y='175.681'/>
-<use x='205.999' xlink:href='#g3-105' y='175.681'/>
-<use x='208.019' xlink:href='#g3-58' y='175.681'/>
-<use x='210.371' xlink:href='#g0-54' y='175.681'/>
-<use x='214.076' xlink:href='#g0-57' y='175.681'/>
-</g>
-<path d='M184.145 290.168H187.133V282.199H184.145ZM190.121 290.168H193.109V284.191H190.121Z' fill='#f0e0f0'/>
-<path d='M184.145 290.168H187.133V282.199H184.145ZM190.121 290.168H193.109V284.191H190.121Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.441 114.036)'>
-<use x='239.382' xlink:href='#g3-116' y='175.681'/>
-<use x='242.44' xlink:href='#g3-99' y='175.681'/>
-<use x='246.204' xlink:href='#g3-58' y='175.681'/>
-<use x='248.556' xlink:href='#g0-54' y='175.681'/>
-<use x='252.261' xlink:href='#g0-54' y='175.681'/>
-</g>
-<path d='M227.356 290.168H230.344V282.199H227.356ZM233.332 290.168H236.32V284.191H233.332Z' fill='#e1c2e1'/>
-<path d='M227.356 290.168H230.344V282.199H227.356ZM233.332 290.168H236.32V284.191H233.332Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.04 114.479)'>
-<use x='281.863' xlink:href='#g3-106' y='175.681'/>
-<use x='284.119' xlink:href='#g3-101' y='175.681'/>
-<use x='287.882' xlink:href='#g3-58' y='175.681'/>
-<use x='290.235' xlink:href='#g0-54' y='175.681'/>
-<use x='293.94' xlink:href='#g0-54' y='175.681'/>
-</g>
-<path d='M269.106 290.168H272.094V282.199H269.106ZM275.086 290.168H278.074V284.191H275.086Z' fill='#d1a3d1'/>
-<path d='M269.106 290.168H272.094V282.199H269.106ZM275.086 290.168H278.074V284.191H275.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -39.932 114.515)'>
-<use x='321.287' xlink:href='#g3-116' y='175.681'/>
-<use x='324.345' xlink:href='#g3-98' y='175.681'/>
-<use x='328.717' xlink:href='#g3-98' y='175.681'/>
-<use x='333.09' xlink:href='#g3-58' y='175.681'/>
-<use x='335.442' xlink:href='#g0-54' y='175.681'/>
-<use x='339.147' xlink:href='#g0-53' y='175.681'/>
-</g>
-<path d='M306.203 290.168H309.191V282.199H306.203ZM312.18 290.168H315.168V284.191H312.18Z' fill='#c285c2'/>
-<path d='M306.203 290.168H309.191V282.199H306.203ZM312.18 290.168H315.168V284.191H312.18Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.662 114.036)'>
-<use x='356.019' xlink:href='#g3-114' y='175.681'/>
-<use x='358.911' xlink:href='#g3-112' y='175.681'/>
-<use x='363.284' xlink:href='#g3-58' y='175.681'/>
-<use x='365.636' xlink:href='#g0-52' y='175.681'/>
-<use x='369.341' xlink:href='#g0-52' y='175.681'/>
-</g>
-<path d='M139.336 303.176H142.324V295.207H139.336ZM145.313 303.176H148.301V297.199H145.313Z' fill='#b366b3'/>
-<path d='M139.336 303.176H142.324V295.207H139.336ZM145.313 303.176H148.301V297.199H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -43.882 114.515)'>
-<use x='195.372' xlink:href='#g3-104' y='188.688'/>
-<use x='199.744' xlink:href='#g3-111' y='188.688'/>
-<use x='203.978' xlink:href='#g3-97' y='188.688'/>
-<use x='207.811' xlink:href='#g3-114' y='188.688'/>
-<use x='210.703' xlink:href='#g3-100' y='188.688'/>
-<use x='215.076' xlink:href='#g3-58' y='188.688'/>
-<use x='217.428' xlink:href='#g0-51' y='188.688'/>
-<use x='221.133' xlink:href='#g0-54' y='188.688'/>
-</g>
-<path d='M184.145 303.176H187.133V295.207H184.145ZM190.121 303.176H193.109V297.199H190.121Z' fill='#a447a4'/>
-<path d='M184.145 303.176H187.133V295.207H184.145ZM190.121 303.176H193.109V297.199H190.121Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -43.084 114.515)'>
-<use x='239.382' xlink:href='#g3-109' y='188.688'/>
-<use x='246.107' xlink:href='#g3-101' y='188.688'/>
-<use x='249.871' xlink:href='#g3-115' y='188.688'/>
-<use x='253.117' xlink:href='#g3-104' y='188.688'/>
-<use x='257.489' xlink:href='#g3-58' y='188.688'/>
-<use x='259.842' xlink:href='#g0-54' y='188.688'/>
-<use x='263.547' xlink:href='#g0-49' y='188.688'/>
-</g>
-<path d='M227.356 303.176H230.344V295.207H227.356ZM233.332 303.176H236.32V297.199H233.332Z' fill='#942994'/>
-<path d='M227.356 303.176H230.344V295.207H227.356ZM233.332 303.176H236.32V297.199H233.332Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -42.353 114.515)'>
-<use x='281.863' xlink:href='#g3-103' y='188.688'/>
-<use x='286.097' xlink:href='#g3-108' y='188.688'/>
-<use x='288.118' xlink:href='#g3-105' y='188.688'/>
-<use x='290.138' xlink:href='#g3-98' y='188.688'/>
-<use x='294.746' xlink:href='#g3-99' y='188.688'/>
-<use x='298.509' xlink:href='#g3-58' y='188.688'/>
-<use x='300.862' xlink:href='#g0-54' y='188.688'/>
-<use x='304.567' xlink:href='#g0-52' y='188.688'/>
-</g>
-<path d='M269.106 303.176H272.094V295.207H269.106ZM275.086 303.176H278.074V297.199H275.086Z' fill='#850a85'/>
-<path d='M269.106 303.176H272.094V295.207H269.106ZM275.086 303.176H278.074V297.199H275.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -40.026 114.479)'>
-<use x='321.287' xlink:href='#g3-115' y='188.688'/>
-<use x='324.533' xlink:href='#g3-109' y='188.688'/>
-<use x='331.258' xlink:href='#g3-105' y='188.688'/>
-<use x='333.278' xlink:href='#g3-58' y='188.688'/>
-<use x='335.63' xlink:href='#g0-52' y='188.688'/>
-<use x='339.335' xlink:href='#g0-53' y='188.688'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-1.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-1.svg
deleted file mode 100644
index c296a04..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-1.svg
+++ /dev/null
@@ -1,769 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='164.687pt' version='1.1' viewBox='52.938 54.996 381.625 164.687' width='381.625pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip1'>
-<path d='M82.148 203.937H434.164V78.691H82.148Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-78' transform='scale(1.6)' xlink:href='#g1-78'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-102' transform='scale(1.6)' xlink:href='#g1-102'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M0.946 -1.898H1.514V-2.212H0.932V-2.785C0.932 -3.128 1.245 -3.178 1.41 -3.178C1.514 -3.178 1.649 -3.163 1.833 -3.093V-3.457C1.704 -3.487 1.549 -3.507 1.415 -3.507C0.902 -3.507 0.528 -3.138 0.528 -2.645V-2.212H0.144V-1.898H0.528V0H0.946V-1.898Z' id='g1-102'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g3-1'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M6.581 -2.663C6.581 -3.327 6.402 -4.08 5.317 -4.08C4.564 -4.08 4.142 -3.622 3.927 -3.344C3.865 -3.524 3.676 -4.08 2.762 -4.08C2.053 -4.08 1.623 -3.667 1.417 -3.398V-4.035H0.726V0H1.47V-2.188C1.47 -2.78 1.704 -3.497 2.385 -3.497C3.282 -3.497 3.282 -2.86 3.282 -2.6V0H4.026V-2.188C4.026 -2.78 4.259 -3.497 4.94 -3.497C5.837 -3.497 5.837 -2.86 5.837 -2.6V0H6.581V-2.663Z' id='g0-109'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page1'>
-<path d='M140.82 212.793V203.937M199.488 212.793V203.937M258.156 212.793V203.937M316.824 212.793V203.937M375.496 212.793V203.937M140.82 69.836V78.691M199.488 69.836V78.691M258.156 69.836V78.691M316.824 69.836V78.691M375.496 69.836V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M111.484 208.191V203.937M170.152 208.191V203.937M228.824 208.191V203.937M287.492 208.191V203.937M346.16 208.191V203.937M404.828 208.191V203.937M111.484 74.441V78.691M170.152 74.441V78.691M228.824 74.441V78.691M287.492 74.441V78.691M346.16 74.441V78.691M404.828 74.441V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937H86.402M82.148 172.625H86.402M82.148 141.316H86.402M82.148 110.004H86.402M82.148 78.691H86.402M434.164 203.937H429.91M434.164 172.625H429.91M434.164 141.316H429.91M434.164 110.004H429.91M434.164 78.691H429.91' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937V78.691H434.164V203.937H82.148Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -11.54 33.989)'>
-<use x='114.487' xlink:href='#g2-99' y='183.949'/>
-<use x='118.25' xlink:href='#g2-102' y='183.949'/>
-<use x='120.838' xlink:href='#g2-114' y='183.949'/>
-<use x='123.73' xlink:href='#g2-97' y='183.949'/>
-<use x='127.798' xlink:href='#g2-99' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 41.401 33.989)'>
-<use x='114.487' xlink:href='#g2-101' y='183.949'/>
-<use x='118.25' xlink:href='#g2-115' y='183.949'/>
-<use x='121.497' xlink:href='#g2-112' y='183.949'/>
-<use x='125.634' xlink:href='#g2-114' y='183.949'/>
-<use x='128.526' xlink:href='#g2-101' y='183.949'/>
-<use x='132.29' xlink:href='#g2-115' y='183.949'/>
-<use x='135.536' xlink:href='#g2-115' y='183.949'/>
-<use x='138.782' xlink:href='#g2-111' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 103.095 33.989)'>
-<use x='114.487' xlink:href='#g2-98' y='183.949'/>
-<use x='118.859' xlink:href='#g2-97' y='183.949'/>
-<use x='122.692' xlink:href='#g2-114' y='183.949'/>
-<use x='125.584' xlink:href='#g2-110' y='183.949'/>
-<use x='129.957' xlink:href='#g2-101' y='183.949'/>
-<use x='133.72' xlink:href='#g2-115' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 162.903 33.989)'>
-<use x='114.487' xlink:href='#g2-108' y='183.949'/>
-<use x='116.507' xlink:href='#g2-101' y='183.949'/>
-<use x='120.271' xlink:href='#g2-97' y='183.949'/>
-<use x='124.339' xlink:href='#g2-110' y='183.949'/>
-<use x='128.711' xlink:href='#g2-78' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 223.526 33.989)'>
-<use x='114.487' xlink:href='#g2-114' y='183.949'/>
-<use x='117.379' xlink:href='#g2-101' y='183.949'/>
-<use x='121.142' xlink:href='#g2-100' y='183.949'/>
-<use x='125.515' xlink:href='#g2-105' y='183.949'/>
-<use x='127.535' xlink:href='#g2-115' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 277.054 33.989)'>
-<use x='114.487' xlink:href='#g2-108' y='183.949'/>
-<use x='116.507' xlink:href='#g2-97' y='183.949'/>
-<use x='120.34' xlink:href='#g2-114' y='183.949'/>
-<use x='123.232' xlink:href='#g2-115' y='183.949'/>
-<use x='126.478' xlink:href='#g2-111' y='183.949'/>
-<use x='130.712' xlink:href='#g2-110' y='183.949'/>
-<use x='135.085' xlink:href='#g2-78' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 21.624)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -9.688)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -40.999)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -72.311)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -103.622)'>
-<use x='114.487' xlink:href='#g1-50' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<path clip-path='url(#clip1)' d='M82.148 141.316H434.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M91.559 203.937H94.797V141.316H91.559ZM150.227 203.937H153.465V141.316H150.227ZM208.899 203.937H212.133V141.316H208.899ZM267.567 203.937H270.805V141.316H267.567ZM326.234 203.937H329.473V141.316H326.234ZM384.902 203.937H388.141V141.316H384.902Z' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M91.559 203.937H94.797V141.316H91.559ZM150.227 203.937H153.465V141.316H150.227ZM208.899 203.937H212.133V141.316H208.899ZM267.567 203.937H270.805V141.316H267.567ZM326.234 203.937H329.473V141.316H326.234ZM384.902 203.937H388.141V141.316H384.902Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M93.18 141.316V141.191' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M93.18 141.316V141.191' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M91.184 141.191H95.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M93.18 141.316V141.441' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M93.18 141.316V141.441' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M95.172 141.442H91.187' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M151.848 141.316V141.316' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M149.855 141.316H153.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M151.848 141.316V141.316' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M149.855 141.316H153.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M210.516 141.316V141.004' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M210.516 141.316V141.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M208.523 141.004H212.507' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M210.516 141.316V141.629' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M210.516 141.316V141.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M212.508 141.629H208.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M269.184 141.316V141.066' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M269.184 141.316V141.066' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M267.191 141.067H271.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M269.184 141.316V141.566' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M269.184 141.316V141.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M271.179 141.567H267.191' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M327.856 141.316V140.625' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M327.856 141.316V140.625' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M325.859 140.625H329.847' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M327.856 141.316V142.004' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M327.856 141.316V142.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M329.847 142.004H325.863' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M386.524 141.316V141.004' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M386.524 141.316V141.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M384.531 141.004H388.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M386.524 141.316V141.629' fill='#e0e0f0'/>
-<path clip-path='url(#clip1)' d='M386.524 141.316V141.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M388.515 141.629H384.531' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M96.789 203.937H100.027V138.937H96.789ZM155.457 203.937H158.695V139.312H155.457ZM214.129 203.937H217.363V141.004H214.129ZM272.797 203.937H276.035V136.179H272.797ZM331.465 203.937H334.703V136.617H331.465ZM390.133 203.937H393.371V78.691H390.133Z' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M96.789 203.937H100.027V138.937H96.789ZM155.457 203.937H158.695V139.312H155.457ZM214.129 203.937H217.363V141.004H214.129ZM272.797 203.937H276.035V136.179H272.797ZM331.465 203.937H334.703V136.617H331.465ZM390.133 203.937H393.371V78.691H390.133Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M98.41 138.937V138.683' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M98.41 138.937V138.683' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M96.414 138.683H100.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M98.41 138.937V139.187' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M98.41 138.937V139.187' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M100.402 139.187H96.418' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M157.078 139.312V139.312' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M155.086 139.312H159.071' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M157.078 139.312V139.312' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M155.086 139.312H159.071' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M215.746 141.004V140.625' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M215.746 141.004V140.625' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M213.754 140.625H217.739' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M215.746 141.004V141.379' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M215.746 141.004V141.379' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M217.739 141.379H213.754' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M274.414 136.179V135.992' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M274.414 136.179V135.992' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M272.422 135.992H276.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M274.414 136.179V136.367' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M274.414 136.179V136.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M276.41 136.367H272.422' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M333.086 136.617V136.429' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M333.086 136.617V136.429' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M331.09 136.43H335.078' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M333.086 136.617V136.804' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M333.086 136.617V136.804' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M335.078 136.804H331.094' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M391.754 78.691V78.691' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M389.762 78.691H393.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M391.754 78.691V78.691' fill='#c2c2e1'/>
-<path clip-path='url(#clip1)' d='M389.762 78.691H393.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M102.02 203.937H105.258V138.433H102.02ZM160.688 203.937H163.926V136.742H160.688ZM219.359 203.937H222.594V141.004H219.359ZM278.027 203.937H281.266V137.933H278.027ZM336.695 203.937H339.934V132.234H336.695ZM395.363 203.937H398.602V78.691H395.363Z' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M102.02 203.937H105.258V138.433H102.02ZM160.688 203.937H163.926V136.742H160.688ZM219.359 203.937H222.594V141.004H219.359ZM278.027 203.937H281.266V137.933H278.027ZM336.695 203.937H339.934V132.234H336.695ZM395.363 203.937H398.602V78.691H395.363Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M103.641 138.433V138.121' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M103.641 138.433V138.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M101.644 138.122H105.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M103.641 138.433V138.746' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M103.641 138.433V138.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M105.633 138.746H101.648' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M162.309 136.742V135.867' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M162.309 136.742V135.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M160.316 135.867H164.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M162.309 136.742V137.621' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M162.309 136.742V137.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M164.301 137.622H160.316' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M220.977 141.004V140.562' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M220.977 141.004V140.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M218.984 140.563H222.969' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M220.977 141.004V141.441' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M220.977 141.004V141.441' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M222.969 141.442H218.984' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M279.645 137.933V137.496' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M279.645 137.933V137.496' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M277.652 137.496H281.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M279.645 137.933V138.371' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M279.645 137.933V138.371' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M281.64 138.371H277.652' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M338.317 132.234V131.859' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M338.317 132.234V131.859' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M336.32 131.859H340.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M338.317 132.234V132.609' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M338.317 132.234V132.609' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M340.308 132.61H336.324' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M396.984 78.691V78.691' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M394.992 78.691H398.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M396.984 78.691V78.691' fill='#a3a3d1'/>
-<path clip-path='url(#clip1)' d='M394.992 78.691H398.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M107.25 203.937H110.488V130.48H107.25ZM165.918 203.937H169.156V133.238H165.918ZM224.59 203.937H227.824V141.254H224.59ZM283.258 203.937H286.496V137.308H283.258ZM341.926 203.937H345.164V135.742H341.926ZM400.594 203.937H403.832V78.691H400.594Z' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M107.25 203.937H110.488V130.48H107.25ZM165.918 203.937H169.156V133.238H165.918ZM224.59 203.937H227.824V141.254H224.59ZM283.258 203.937H286.496V137.308H283.258ZM341.926 203.937H345.164V135.742H341.926ZM400.594 203.937H403.832V78.691H400.594Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M108.871 130.48V130.168' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M108.871 130.48V130.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M106.875 130.168H110.86' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M108.871 130.48V130.793' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M108.871 130.48V130.793' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M110.864 130.793H106.879' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M167.539 133.238V133.238' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M165.547 133.238H169.532' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M167.539 133.238V133.238' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M165.547 133.238H169.532' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M226.207 141.254V140.75' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M226.207 141.254V140.75' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M224.215 140.75H228.2' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M226.207 141.254V141.754' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M226.207 141.254V141.754' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M228.2 141.754H224.215' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M284.875 137.308V136.933' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M284.875 137.308V136.933' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M282.883 136.934H286.868' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M284.875 137.308V137.683' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M284.875 137.308V137.683' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M286.868 137.683H282.883' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M343.547 135.742V135.617' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M343.547 135.742V135.617' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M341.551 135.618H345.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M343.547 135.742V135.867' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M343.547 135.742V135.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M345.539 135.867H341.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M402.215 78.691V78.691' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M400.223 78.691H404.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M402.215 78.691V78.691' fill='#8585c2'/>
-<path clip-path='url(#clip1)' d='M400.223 78.691H404.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M112.481 203.937H115.719V137.871H112.481ZM171.149 203.937H174.387V133.238H171.149ZM229.82 203.937H233.055V141.254H229.82ZM288.488 203.937H291.727V132.797H288.488ZM347.156 203.937H350.395V136.554H347.156ZM405.824 203.937H409.063V103.742H405.824Z' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M112.481 203.937H115.719V137.871H112.481ZM171.149 203.937H174.387V133.238H171.149ZM229.82 203.937H233.055V141.254H229.82ZM288.488 203.937H291.727V132.797H288.488ZM347.156 203.937H350.395V136.554H347.156ZM405.824 203.937H409.063V103.742H405.824Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M114.098 137.871V137.683' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M114.098 137.871V137.683' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M112.105 137.683H116.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M114.098 137.871V138.058' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M114.098 137.871V138.058' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M116.094 138.059H112.109' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M172.77 133.238V133.238' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M170.777 133.238H174.762' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M172.77 133.238V133.238' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M170.777 133.238H174.762' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M231.438 141.254V141.129' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M231.438 141.254V141.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M229.445 141.128H233.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M231.438 141.254V141.379' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M231.438 141.254V141.379' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M233.43 141.379H229.445' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M290.106 132.797V132.547' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M290.106 132.797V132.547' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M288.113 132.547H292.098' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M290.106 132.797V133.051' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M290.106 132.797V133.051' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M292.098 133.051H288.113' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M348.777 136.554V134.992' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M348.777 136.554V134.992' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M346.781 134.992H350.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M348.777 136.554V138.121' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M348.777 136.554V138.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M350.769 138.122H346.785' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M407.445 103.742V102.363' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M407.445 103.742V102.363' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M405.453 102.364H409.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M407.445 103.742V105.121' fill='#6666b3'/>
-<path clip-path='url(#clip1)' d='M407.445 103.742V105.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M409.437 105.121H405.453' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M117.711 203.937H120.949V135.867H117.711ZM176.379 203.937H179.617V134.238H176.379ZM235.051 203.937H238.285V140.941H235.051ZM293.719 203.937H296.957V132.734H293.719ZM352.387 203.937H355.625V116.203H352.387ZM411.055 203.937H414.293V84.39H411.055Z' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M117.711 203.937H120.949V135.867H117.711ZM176.379 203.937H179.617V134.238H176.379ZM235.051 203.937H238.285V140.941H235.051ZM293.719 203.937H296.957V132.734H293.719ZM352.387 203.937H355.625V116.203H352.387ZM411.055 203.937H414.293V84.39H411.055Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M119.328 135.867V135.554' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M119.328 135.867V135.554' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M117.336 135.555H121.321' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M119.328 135.867V136.179' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M119.328 135.867V136.179' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M121.325 136.179H117.34' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M178 134.238V133.238' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M178 134.238V133.238' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M176.008 133.238H179.993' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M178 134.238V135.242' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M178 134.238V135.242' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M179.993 135.242H176.008' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M236.668 140.941V140.687' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M236.668 140.941V140.687' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M234.676 140.687H238.661' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M236.668 140.941V141.191' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M236.668 140.941V141.191' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M238.66 141.191H234.675' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M295.336 132.734V132.609' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M295.336 132.734V132.609' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M293.344 132.61H297.329' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M295.336 132.734V132.859' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M295.336 132.734V132.859' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M297.328 132.859H293.343' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M354.008 116.203V115.39' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M354.008 116.203V115.39' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M352.012 115.39H356' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M354.008 116.203V117.015' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M354.008 116.203V117.015' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M355.999 117.016H352.015' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M412.676 84.39V83.89' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M412.676 84.39V83.89' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M410.684 83.891H414.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M412.676 84.39V84.89' fill='#4747a4'/>
-<path clip-path='url(#clip1)' d='M412.676 84.39V84.89' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M414.667 84.891H410.683' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M122.941 203.937H126.18V138.183H122.941ZM181.609 203.937H184.848V133.238H181.609ZM240.281 203.937H243.516V140.312H240.281ZM298.949 203.937H302.188V132.422H298.949ZM357.617 203.937H360.856V135.179H357.617ZM416.285 203.937H419.524V102.675H416.285Z' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M122.941 203.937H126.18V138.183H122.941ZM181.609 203.937H184.848V133.238H181.609ZM240.281 203.937H243.516V140.312H240.281ZM298.949 203.937H302.188V132.422H298.949ZM357.617 203.937H360.856V135.179H357.617ZM416.285 203.937H419.524V102.675H416.285Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M124.559 138.183V137.996' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M124.559 138.183V137.996' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M122.566 137.996H126.551' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M124.559 138.183V138.371' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M124.559 138.183V138.371' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M126.555 138.371H122.57' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M183.231 133.238V133.238' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M181.238 133.238H185.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M183.231 133.238V133.238' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M181.238 133.238H185.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M241.899 140.312V138.871' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M241.899 140.312V138.871' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M239.906 138.871H243.891' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M241.899 140.312V141.754' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M241.899 140.312V141.754' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M243.891 141.754H239.906' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M300.567 132.422V132.109' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M300.567 132.422V132.109' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M298.574 132.11H302.559' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M300.567 132.422V132.734' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M300.567 132.422V132.734' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M302.559 132.734H298.574' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M359.238 135.179V134.801' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M359.238 135.179V134.801' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M357.242 134.8H361.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M359.238 135.179V135.554' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M359.238 135.179V135.554' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M361.23 135.555H357.246' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M417.906 102.675V102.55' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M417.906 102.675V102.55' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M415.914 102.551H419.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M417.906 102.675V102.8' fill='#292994'/>
-<path clip-path='url(#clip1)' d='M417.906 102.675V102.8' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M419.898 102.801H415.914' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M128.172 203.937H131.41V123.969H128.172ZM186.84 203.937H190.078V127.851H186.84ZM245.512 203.937H248.746V141.504H245.512ZM304.18 203.937H307.418V137.746H304.18ZM362.848 203.937H366.086V104.492H362.848ZM421.516 203.937H424.754V78.691H421.516Z' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M128.172 203.937H131.41V123.969H128.172ZM186.84 203.937H190.078V127.851H186.84ZM245.512 203.937H248.746V141.504H245.512ZM304.18 203.937H307.418V137.746H304.18ZM362.848 203.937H366.086V104.492H362.848ZM421.516 203.937H424.754V78.691H421.516Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M129.789 123.969V123.781' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M129.789 123.969V123.781' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M127.797 123.781H131.782' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M129.789 123.969V124.156' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M129.789 123.969V124.156' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M131.785 124.157H127.8' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M188.461 127.851V126.91' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M188.461 127.851V126.91' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M186.469 126.91H190.454' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M188.461 127.851V128.789' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M188.461 127.851V128.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M190.453 128.789H186.468' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M247.129 141.504V141.254' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M247.129 141.504V141.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M245.137 141.254H249.122' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M247.129 141.504V141.754' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M247.129 141.504V141.754' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M249.121 141.754H245.136' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M305.797 137.746V137.558' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M305.797 137.746V137.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M303.804 137.559H307.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M305.797 137.746V137.933' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M305.797 137.746V137.933' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M307.789 137.934H303.804' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M364.469 104.492V103.742' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M364.469 104.492V103.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M362.473 103.742H366.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M364.469 104.492V105.246' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M364.469 104.492V105.246' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M366.46 105.246H362.476' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M423.137 78.691V78.691' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M421.144 78.691H425.128' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip1)' d='M423.137 78.691V78.691' fill='#0a0a85'/>
-<path clip-path='url(#clip1)' d='M421.144 78.691H425.128' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(0 -1 1 0 -89.137 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -30.468 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 28.201 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 86.87 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 145.539 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 204.208 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -83.906 247.398)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -25.237 247.774)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 33.432 249.464)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.101 244.642)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 150.77 245.081)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-55' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 209.439 187.155)'>
-<use x='109.598' xlink:href='#g3-1' y='183.949'/>
-<use x='113.103' xlink:href='#g3-1' y='183.949'/>
-<use x='116.608' xlink:href='#g3-1' y='183.949'/>
-<use x='120.114' xlink:href='#g1-50' y='183.949'/>
-<use x='122.76' xlink:href='#g1-46' y='183.949'/>
-<use x='124.23' xlink:href='#g1-56' y='183.949'/>
-<use x='126.877' xlink:href='#g1-52' y='183.949'/>
-<use x='129.523' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.676 246.897)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -20.007 245.206)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-55' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 38.662 249.464)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 97.331 246.396)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 156 240.697)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 214.669 187.155)'>
-<use x='109.598' xlink:href='#g3-1' y='183.949'/>
-<use x='113.103' xlink:href='#g3-1' y='183.949'/>
-<use x='116.608' xlink:href='#g3-1' y='183.949'/>
-<use x='120.114' xlink:href='#g1-51' y='183.949'/>
-<use x='122.76' xlink:href='#g1-46' y='183.949'/>
-<use x='124.23' xlink:href='#g1-49' y='183.949'/>
-<use x='126.877' xlink:href='#g1-52' y='183.949'/>
-<use x='129.523' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -73.445 238.944)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-55' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -14.776 241.699)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 43.893 249.715)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 102.562 245.77)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 161.231 244.204)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 219.9 187.155)'>
-<use x='109.598' xlink:href='#g3-1' y='183.949'/>
-<use x='113.103' xlink:href='#g3-1' y='183.949'/>
-<use x='116.608' xlink:href='#g3-1' y='183.949'/>
-<use x='120.114' xlink:href='#g1-50' y='183.949'/>
-<use x='122.76' xlink:href='#g1-46' y='183.949'/>
-<use x='124.23' xlink:href='#g1-48' y='183.949'/>
-<use x='126.877' xlink:href='#g1-55' y='183.949'/>
-<use x='129.523' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -68.215 246.333)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -9.546 241.699)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.123 249.715)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 107.792 241.261)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 166.461 245.018)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.13 212.204)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-54' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -62.984 244.329)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -4.315 242.701)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 54.354 249.402)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.023 241.198)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 171.692 224.666)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-52' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 230.361 192.853)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-57' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -57.754 246.646)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 0.915 241.699)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 59.584 248.776)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.253 240.885)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 176.922 243.64)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 235.591 211.139)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-54' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -52.524 232.431)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 6.145 236.314)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 64.814 249.965)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 123.483 246.208)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 182.152 212.955)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 240.821 187.155)'>
-<use x='109.598' xlink:href='#g3-1' y='183.949'/>
-<use x='113.103' xlink:href='#g3-1' y='183.949'/>
-<use x='116.608' xlink:href='#g3-1' y='183.949'/>
-<use x='120.114' xlink:href='#g1-50' y='183.949'/>
-<use x='122.76' xlink:href='#g1-46' y='183.949'/>
-<use x='124.23' xlink:href='#g1-49' y='183.949'/>
-<use x='126.877' xlink:href='#g1-49' y='183.949'/>
-<use x='129.523' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -124.589 311.062)'>
-<use x='114.487' xlink:href='#g0-82' y='183.949'/>
-<use x='120.457' xlink:href='#g0-101' y='183.949'/>
-<use x='124.553' xlink:href='#g0-108' y='183.949'/>
-<use x='126.753' xlink:href='#g0-97' y='183.949'/>
-<use x='131.181' xlink:href='#g0-116' y='183.949'/>
-<use x='134.509' xlink:href='#g0-105' y='183.949'/>
-<use x='136.709' xlink:href='#g0-118' y='183.949'/>
-<use x='140.957' xlink:href='#g0-101' y='183.949'/>
-<use x='148.124' xlink:href='#g0-116' y='183.949'/>
-<use x='151.452' xlink:href='#g0-105' y='183.949'/>
-<use x='153.652' xlink:href='#g0-109' y='183.949'/>
-<use x='160.972' xlink:href='#g0-101' y='183.949'/>
-<use x='168.139' xlink:href='#g2-40' y='183.949'/>
-<use x='171.432' xlink:href='#g2-108' y='183.949'/>
-<use x='173.453' xlink:href='#g2-111' y='183.949'/>
-<use x='177.452' xlink:href='#g2-119' y='183.949'/>
-<use x='183' xlink:href='#g2-101' y='183.949'/>
-<use x='186.764' xlink:href='#g2-114' y='183.949'/>
-<use x='192.479' xlink:href='#g2-105' y='183.949'/>
-<use x='194.499' xlink:href='#g2-115' y='183.949'/>
-<use x='200.568' xlink:href='#g2-98' y='183.949'/>
-<use x='205.176' xlink:href='#g2-101' y='183.949'/>
-<use x='208.94' xlink:href='#g2-116' y='183.949'/>
-<use x='211.998' xlink:href='#g2-116' y='183.949'/>
-<use x='215.056' xlink:href='#g2-101' y='183.949'/>
-<use x='218.819' xlink:href='#g2-114' y='183.949'/>
-<use x='221.711' xlink:href='#g2-41' y='183.949'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-a.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-a.svg
deleted file mode 100644
index b8a2f20..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-a.svg
+++ /dev/null
@@ -1,868 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='165.084pt' version='1.1' viewBox='52.938 54.996 381.624 165.084' width='381.624pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip5'>
-<path d='M82.148 203.937H434.164V78.691H82.148Z'/>
-</clipPath>
-<use id='g3-40' transform='scale(1.143)' xlink:href='#g0-40'/>
-<use id='g3-41' transform='scale(1.143)' xlink:href='#g0-41'/>
-<use id='g3-78' transform='scale(1.143)' xlink:href='#g0-78'/>
-<use id='g3-97' transform='scale(1.143)' xlink:href='#g0-97'/>
-<use id='g3-98' transform='scale(1.143)' xlink:href='#g0-98'/>
-<use id='g3-99' transform='scale(1.143)' xlink:href='#g0-99'/>
-<use id='g3-100' transform='scale(1.143)' xlink:href='#g0-100'/>
-<use id='g3-101' transform='scale(1.143)' xlink:href='#g0-101'/>
-<use id='g3-102' transform='scale(1.143)' xlink:href='#g0-102'/>
-<use id='g3-105' transform='scale(1.143)' xlink:href='#g0-105'/>
-<use id='g3-108' transform='scale(1.143)' xlink:href='#g0-108'/>
-<use id='g3-109' transform='scale(1.143)' xlink:href='#g0-109'/>
-<use id='g3-110' transform='scale(1.143)' xlink:href='#g0-110'/>
-<use id='g3-111' transform='scale(1.143)' xlink:href='#g0-111'/>
-<use id='g3-112' transform='scale(1.143)' xlink:href='#g0-112'/>
-<use id='g3-114' transform='scale(1.143)' xlink:href='#g0-114'/>
-<use id='g3-115' transform='scale(1.143)' xlink:href='#g0-115'/>
-<use id='g3-116' transform='scale(1.143)' xlink:href='#g0-116'/>
-<use id='g3-119' transform='scale(1.143)' xlink:href='#g0-119'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g1-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g1-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g1-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g1-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g1-108'/>
-<path d='M6.581 -2.663C6.581 -3.327 6.402 -4.08 5.317 -4.08C4.564 -4.08 4.142 -3.622 3.927 -3.344C3.865 -3.524 3.676 -4.08 2.762 -4.08C2.053 -4.08 1.623 -3.667 1.417 -3.398V-4.035H0.726V0H1.47V-2.188C1.47 -2.78 1.704 -3.497 2.385 -3.497C3.282 -3.497 3.282 -2.86 3.282 -2.6V0H4.026V-2.188C4.026 -2.78 4.259 -3.497 4.94 -3.497C5.837 -3.497 5.837 -2.86 5.837 -2.6V0H6.581V-2.663Z' id='g1-109'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g1-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g1-118'/>
-<use id='g2-46' transform='scale(0.714)' xlink:href='#g0-46'/>
-<use id='g2-48' transform='scale(0.714)' xlink:href='#g0-48'/>
-<use id='g2-49' transform='scale(0.714)' xlink:href='#g0-49'/>
-<use id='g2-50' transform='scale(0.714)' xlink:href='#g0-50'/>
-<use id='g2-51' transform='scale(0.714)' xlink:href='#g0-51'/>
-<use id='g2-52' transform='scale(0.714)' xlink:href='#g0-52'/>
-<use id='g2-53' transform='scale(0.714)' xlink:href='#g0-53'/>
-<use id='g2-54' transform='scale(0.714)' xlink:href='#g0-54'/>
-<use id='g2-55' transform='scale(0.714)' xlink:href='#g0-55'/>
-<use id='g2-56' transform='scale(0.714)' xlink:href='#g0-56'/>
-<use id='g2-57' transform='scale(0.714)' xlink:href='#g0-57'/>
-<use id='g2-120' transform='scale(0.714)' xlink:href='#g0-120'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g4-1'/>
-<path d='M2.127 -5.23C2.008 -5.23 1.995 -5.23 1.911 -5.154C1.032 -4.387 0.586 -3.145 0.586 -1.743C0.586 -0.425 0.983 0.844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 0.063C1.276 -0.481 1.193 -1.053 1.193 -1.743C1.193 -4.156 2.322 -5.112 2.462 -5.23H2.127Z' id='g0-40'/>
-<path d='M0.746 1.743C0.865 1.743 0.879 1.743 0.962 1.667C1.841 0.9 2.287 -0.342 2.287 -1.743C2.287 -3.062 1.89 -4.331 0.969 -5.14C0.879 -5.23 0.865 -5.23 0.746 -5.23H0.411C0.432 -5.216 1.109 -4.638 1.43 -3.55C1.597 -3.006 1.681 -2.434 1.681 -1.743C1.681 0.669 0.551 1.625 0.411 1.743H0.746Z' id='g0-41'/>
-<path d='M1.339 -0.628H0.711V0H1.339V-0.628Z' id='g0-46'/>
-<path d='M3.403 -2.267C3.403 -2.601 3.403 -3.417 3.075 -3.989C2.72 -4.617 2.183 -4.721 1.848 -4.721C1.534 -4.721 0.99 -4.624 0.642 -4.024C0.307 -3.466 0.293 -2.706 0.293 -2.267C0.293 -1.75 0.321 -1.116 0.614 -0.586C0.921 -0.021 1.437 0.146 1.848 0.146C2.545 0.146 2.929 -0.258 3.138 -0.697C3.382 -1.193 3.403 -1.834 3.403 -2.267ZM1.848 -0.314C1.555 -0.314 1.22 -0.481 1.046 -0.983C0.907 -1.409 0.9 -1.848 0.9 -2.357C0.9 -2.999 0.9 -4.261 1.848 -4.261S2.797 -2.999 2.797 -2.357C2.797 -1.897 2.797 -1.374 2.629 -0.928C2.434 -0.425 2.078 -0.314 1.848 -0.314Z' id='g0-48'/>
-<path d='M2.239 -4.721H2.085C1.632 -4.303 1.06 -4.275 0.642 -4.261V-3.822C0.914 -3.829 1.262 -3.843 1.611 -3.982V-0.439H0.683V0H3.166V-0.439H2.239V-4.721Z' id='g0-49'/>
-<path d='M1.974 -0.537C1.89 -0.537 1.806 -0.53 1.723 -0.53H0.928L2.008 -1.485C2.134 -1.597 2.476 -1.855 2.608 -1.967C2.915 -2.246 3.327 -2.608 3.327 -3.215C3.327 -4.003 2.741 -4.721 1.743 -4.721C1.004 -4.721 0.544 -4.324 0.307 -3.612L0.635 -3.201C0.795 -3.787 1.039 -4.24 1.646 -4.24C2.232 -4.24 2.678 -3.829 2.678 -3.201C2.678 -2.622 2.336 -2.294 1.918 -1.897C1.778 -1.757 1.402 -1.444 1.255 -1.304C1.053 -1.123 0.572 -0.656 0.37 -0.481V0H3.327V-0.537H1.974Z' id='g0-50'/>
-<path d='M0.697 -3.578C0.983 -4.135 1.485 -4.289 1.82 -4.289C2.232 -4.289 2.538 -4.052 2.538 -3.654C2.538 -3.285 2.287 -2.831 1.757 -2.741C1.723 -2.734 1.695 -2.734 1.234 -2.699V-2.239H1.778C2.441 -2.239 2.685 -1.716 2.685 -1.276C2.685 -0.732 2.35 -0.314 1.806 -0.314C1.311 -0.314 0.746 -0.551 0.398 -0.997L0.307 -0.544C0.711 -0.091 1.276 0.146 1.82 0.146C2.734 0.146 3.389 -0.537 3.389 -1.269C3.389 -1.841 2.929 -2.301 2.378 -2.462C2.908 -2.734 3.18 -3.201 3.18 -3.654C3.18 -4.247 2.573 -4.721 1.827 -4.721C1.213 -4.721 0.704 -4.4 0.411 -3.982L0.697 -3.578Z' id='g0-51'/>
-<path d='M2.762 -1.165H3.487V-1.625H2.762V-4.575H2.071L0.209 -1.625V-1.165H2.162V0H2.762V-1.165ZM0.802 -1.625C1.011 -1.953 2.211 -3.815 2.211 -4.233V-1.625H0.802Z' id='g0-52'/>
-<path d='M1.144 -4.094H3.075V-4.575H0.586V-1.967H1.095C1.262 -2.343 1.59 -2.511 1.904 -2.511C2.19 -2.511 2.622 -2.315 2.622 -1.43C2.622 -0.516 2.043 -0.314 1.688 -0.314C1.227 -0.314 0.781 -0.558 0.544 -0.955L0.279 -0.537C0.621 -0.112 1.137 0.146 1.688 0.146C2.608 0.146 3.327 -0.565 3.327 -1.416C3.327 -2.28 2.685 -2.971 1.918 -2.971C1.618 -2.971 1.353 -2.866 1.144 -2.692V-4.094Z' id='g0-53'/>
-<path d='M3.062 -4.582C2.685 -4.721 2.42 -4.721 2.287 -4.721C1.227 -4.721 0.307 -3.724 0.307 -2.253C0.307 -0.363 1.158 0.146 1.862 0.146C2.427 0.146 2.72 -0.119 2.936 -0.342C3.382 -0.816 3.389 -1.311 3.389 -1.555C3.389 -2.469 2.894 -3.229 2.218 -3.229C1.534 -3.229 1.165 -2.873 0.962 -2.671C1.053 -3.626 1.541 -4.289 2.294 -4.289C2.434 -4.289 2.713 -4.275 3.062 -4.142V-4.582ZM0.969 -1.534C0.969 -1.576 0.969 -1.681 0.976 -1.716C0.976 -2.19 1.276 -2.769 1.897 -2.769C2.748 -2.769 2.748 -1.792 2.748 -1.555C2.748 -1.29 2.748 -0.997 2.559 -0.704C2.392 -0.453 2.183 -0.314 1.862 -0.314C1.123 -0.314 1.004 -1.227 0.969 -1.534Z' id='g0-54'/>
-<path d='M1.723 -4.038C1.806 -4.038 1.89 -4.045 1.974 -4.045H2.852C1.792 -3.006 1.116 -1.548 1.116 0.07H1.771C1.771 -1.967 2.762 -3.431 3.389 -4.087V-4.575H0.307V-4.038H1.723Z' id='g0-55'/>
-<path d='M2.385 -2.469C2.845 -2.615 3.285 -2.985 3.285 -3.501C3.285 -4.135 2.678 -4.721 1.848 -4.721S0.411 -4.135 0.411 -3.501C0.411 -2.978 0.865 -2.608 1.311 -2.469C0.697 -2.28 0.307 -1.806 0.307 -1.269C0.307 -0.523 0.969 0.146 1.848 0.146S3.389 -0.523 3.389 -1.269C3.389 -1.806 2.992 -2.28 2.385 -2.469ZM1.848 -2.699C1.353 -2.699 0.948 -2.985 0.948 -3.494C0.948 -3.94 1.262 -4.289 1.848 -4.289C2.427 -4.289 2.748 -3.94 2.748 -3.494C2.748 -2.999 2.357 -2.699 1.848 -2.699ZM1.848 -0.314C1.367 -0.314 0.941 -0.621 0.941 -1.276C0.941 -1.904 1.346 -2.239 1.848 -2.239S2.755 -1.897 2.755 -1.276C2.755 -0.621 2.322 -0.314 1.848 -0.314Z' id='g0-56'/>
-<path d='M0.537 -0.174C0.879 0.077 1.193 0.146 1.52 0.146C2.497 0.146 3.389 -0.837 3.389 -2.336C3.389 -4.24 2.545 -4.721 1.876 -4.721C1.255 -4.721 0.969 -4.428 0.767 -4.226C0.321 -3.773 0.307 -3.292 0.307 -3.02C0.307 -2.12 0.795 -1.346 1.478 -1.346C2.267 -1.346 2.699 -1.869 2.734 -1.911C2.636 -0.802 2.092 -0.314 1.52 -0.314C1.158 -0.314 0.934 -0.446 0.774 -0.579L0.537 -0.174ZM2.713 -3.027C2.72 -2.985 2.72 -2.915 2.72 -2.873C2.72 -2.357 2.406 -1.806 1.799 -1.806C1.534 -1.806 1.325 -1.883 1.144 -2.169C0.962 -2.441 0.948 -2.706 0.948 -3.02C0.948 -3.292 0.948 -3.605 1.165 -3.912C1.311 -4.122 1.52 -4.289 1.869 -4.289C2.545 -4.289 2.692 -3.473 2.713 -3.027Z' id='g0-57'/>
-<path d='M1.646 -4.84H0.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-0.551H3.933L1.646 -4.84Z' id='g0-78'/>
-<path d='M2.971 -2.008C2.971 -2.72 2.427 -3.201 1.736 -3.201C1.297 -3.201 0.962 -3.11 0.572 -2.901L0.614 -2.392C0.844 -2.545 1.186 -2.755 1.736 -2.755C2.043 -2.755 2.364 -2.525 2.364 -2.001V-1.723C1.332 -1.688 0.314 -1.471 0.314 -0.823C0.314 -0.474 0.551 0.07 1.165 0.07C1.465 0.07 2.015 0.007 2.385 -0.265V0H2.971V-2.008ZM2.364 -0.99C2.364 -0.851 2.364 -0.669 2.12 -0.523C1.897 -0.398 1.625 -0.391 1.548 -0.391C1.165 -0.391 0.872 -0.565 0.872 -0.83C0.872 -1.276 2.05 -1.318 2.364 -1.332V-0.99Z' id='g0-97'/>
-<path d='M1.179 -4.84H0.593V0H1.2V-0.328C1.353 -0.195 1.688 0.07 2.197 0.07C2.957 0.07 3.571 -0.642 3.571 -1.555C3.571 -2.399 3.089 -3.166 2.392 -3.166C1.953 -3.166 1.527 -3.027 1.179 -2.769V-4.84ZM1.2 -2.197C1.2 -2.308 1.2 -2.392 1.444 -2.552C1.548 -2.615 1.736 -2.706 1.974 -2.706C2.441 -2.706 2.964 -2.392 2.964 -1.555C2.964 -0.704 2.385 -0.391 1.897 -0.391C1.639 -0.391 1.395 -0.509 1.2 -0.823V-2.197Z' id='g0-98'/>
-<path d='M3.034 -0.76C2.685 -0.537 2.308 -0.411 1.876 -0.411C1.234 -0.411 0.858 -0.928 0.858 -1.555C0.858 -2.092 1.137 -2.72 1.897 -2.72C2.371 -2.72 2.594 -2.622 2.95 -2.399L3.041 -2.901C2.622 -3.11 2.441 -3.201 1.897 -3.201C0.851 -3.201 0.251 -2.357 0.251 -1.548C0.251 -0.697 0.921 0.07 1.869 0.07C2.357 0.07 2.776 -0.077 3.075 -0.251L3.034 -0.76Z' id='g0-99'/>
-<path d='M3.229 -4.84H2.643V-2.797C2.197 -3.124 1.743 -3.166 1.541 -3.166C0.809 -3.166 0.251 -2.434 0.251 -1.548S0.802 0.07 1.52 0.07C1.953 0.07 2.357 -0.126 2.622 -0.363V0H3.229V-4.84ZM2.622 -0.865C2.448 -0.579 2.183 -0.391 1.848 -0.391C1.36 -0.391 0.858 -0.732 0.858 -1.541C0.858 -2.413 1.451 -2.706 1.925 -2.706C2.204 -2.706 2.441 -2.587 2.622 -2.35V-0.865Z' id='g0-100'/>
-<path d='M2.999 -0.76C2.608 -0.481 2.169 -0.391 1.869 -0.391C1.262 -0.391 0.802 -0.886 0.781 -1.527H3.068C3.068 -1.848 3.034 -2.315 2.762 -2.713C2.511 -3.068 2.092 -3.201 1.75 -3.201C0.9 -3.201 0.244 -2.455 0.244 -1.569C0.244 -0.676 0.941 0.07 1.862 0.07C2.267 0.07 2.685 -0.049 3.041 -0.265L2.999 -0.76ZM0.83 -1.946C0.99 -2.504 1.402 -2.741 1.75 -2.741C2.057 -2.741 2.511 -2.594 2.643 -1.946H0.83Z' id='g0-101'/>
-<path d='M1.325 -2.657H2.12V-3.096H1.304V-3.898C1.304 -4.38 1.743 -4.449 1.974 -4.449C2.12 -4.449 2.308 -4.428 2.566 -4.331V-4.84C2.385 -4.882 2.169 -4.91 1.981 -4.91C1.262 -4.91 0.739 -4.394 0.739 -3.703V-3.096H0.202V-2.657H0.739V0H1.325V-2.657Z' id='g0-102'/>
-<path d='M1.227 -4.784H0.523V-4.08H1.227V-4.784ZM1.172 -3.096H0.586V0H1.172V-3.096Z' id='g0-105'/>
-<path d='M1.172 -4.84H0.586V0H1.172V-4.84Z' id='g0-108'/>
-<path d='M5.3 -2.064C5.3 -2.608 5.14 -3.166 4.282 -3.166C3.696 -3.166 3.333 -2.824 3.166 -2.601C3.096 -2.79 2.922 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-1.695C3.243 -2.155 3.438 -2.706 3.975 -2.706C4.693 -2.706 4.693 -2.218 4.693 -2.015V0H5.3V-2.064Z' id='g0-109'/>
-<path d='M3.243 -2.064C3.243 -2.608 3.082 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-2.064Z' id='g0-110'/>
-<path d='M3.487 -1.527C3.487 -2.448 2.755 -3.201 1.848 -3.201S0.209 -2.441 0.209 -1.527C0.209 -0.642 0.948 0.07 1.848 0.07C2.755 0.07 3.487 -0.642 3.487 -1.527ZM1.848 -0.411C1.297 -0.411 0.816 -0.816 0.816 -1.604S1.332 -2.741 1.848 -2.741C2.371 -2.741 2.88 -2.378 2.88 -1.604C2.88 -0.809 2.385 -0.411 1.848 -0.411Z' id='g0-111'/>
-<path d='M1.2 -0.328C1.569 0.007 1.967 0.07 2.204 0.07C2.943 0.07 3.571 -0.635 3.571 -1.555C3.571 -2.392 3.11 -3.166 2.42 -3.166C2.106 -3.166 1.583 -3.075 1.179 -2.762V-3.096H0.593V1.353H1.2V-0.328ZM1.2 -2.315C1.36 -2.511 1.632 -2.685 1.967 -2.685C2.525 -2.685 2.964 -2.169 2.964 -1.555C2.964 -0.865 2.441 -0.391 1.897 -0.391C1.792 -0.391 1.618 -0.404 1.437 -0.551C1.227 -0.711 1.2 -0.816 1.2 -0.948V-2.315Z' id='g0-112'/>
-<path d='M1.179 -1.485C1.179 -2.239 1.806 -2.643 2.42 -2.65V-3.166C1.834 -3.159 1.409 -2.873 1.13 -2.504V-3.145H0.593V0H1.179V-1.485Z' id='g0-114'/>
-<path d='M2.545 -2.985C2.071 -3.18 1.723 -3.201 1.471 -3.201C1.297 -3.201 0.244 -3.201 0.244 -2.273C0.244 -1.946 0.425 -1.764 0.516 -1.681C0.76 -1.437 1.053 -1.381 1.423 -1.311C1.75 -1.248 2.127 -1.179 2.127 -0.844C2.127 -0.404 1.548 -0.404 1.451 -0.404C1.004 -0.404 0.586 -0.565 0.307 -0.76L0.209 -0.237C0.446 -0.119 0.872 0.07 1.451 0.07C1.764 0.07 2.071 0.021 2.329 -0.167C2.587 -0.363 2.671 -0.669 2.671 -0.907C2.671 -1.032 2.657 -1.304 2.364 -1.569C2.106 -1.799 1.855 -1.848 1.52 -1.911C1.109 -1.988 0.788 -2.05 0.788 -2.357C0.788 -2.755 1.297 -2.755 1.402 -2.755C1.799 -2.755 2.106 -2.671 2.455 -2.49L2.545 -2.985Z' id='g0-115'/>
-<path d='M1.311 -2.657H2.343V-3.096H1.311V-3.982H0.774V-3.096H0.139V-2.657H0.753V-0.893C0.753 -0.425 0.872 0.07 1.374 0.07S2.26 -0.091 2.469 -0.188L2.35 -0.635C2.12 -0.467 1.876 -0.411 1.681 -0.411C1.388 -0.411 1.311 -0.697 1.311 -1.018V-2.657Z' id='g0-116'/>
-<path d='M4.951 -3.096H4.407C4.345 -2.901 3.954 -1.723 3.738 -0.997C3.682 -0.795 3.612 -0.572 3.592 -0.411H3.585C3.543 -0.697 3.299 -1.451 3.285 -1.499L2.769 -3.096H2.239C2.036 -2.497 1.513 -0.934 1.458 -0.425H1.451C1.395 -0.921 0.879 -2.462 0.767 -2.797C0.711 -2.964 0.711 -2.978 0.676 -3.096H0.105L1.123 0H1.709C1.716 -0.028 1.904 -0.579 2.148 -1.353C2.253 -1.695 2.462 -2.364 2.497 -2.671L2.504 -2.678C2.518 -2.532 2.559 -2.378 2.608 -2.204S2.706 -1.841 2.755 -1.681L3.292 0H3.933L4.951 -3.096Z' id='g0-119'/>
-<path d='M1.932 -1.597L3.285 -3.096H2.671L1.681 -1.953L0.669 -3.096H0.042L1.437 -1.597L0 0H0.621L1.681 -1.311L2.783 0H3.41L1.932 -1.597Z' id='g0-120'/>
-</defs>
-<g id='page5'>
-<path d='M140.82 212.793V203.937M199.488 212.793V203.937M258.156 212.793V203.937M316.824 212.793V203.937M375.496 212.793V203.937M140.82 69.836V78.691M199.488 69.836V78.691M258.156 69.836V78.691M316.824 69.836V78.691M375.496 69.836V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M111.484 208.191V203.937M170.152 208.191V203.937M228.824 208.191V203.937M287.492 208.191V203.937M346.16 208.191V203.937M404.828 208.191V203.937M111.484 74.441V78.691M170.152 74.441V78.691M228.824 74.441V78.691M287.492 74.441V78.691M346.16 74.441V78.691M404.828 74.441V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937H86.402M82.148 172.625H86.402M82.148 141.316H86.402M82.148 110.004H86.402M82.148 78.691H86.402M434.164 203.937H429.91M434.164 172.625H429.91M434.164 141.316H429.91M434.164 110.004H429.91M434.164 78.691H429.91' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937V78.691H434.164V203.937H82.148Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -11.54 34.954)'>
-<use x='114.487' xlink:href='#g3-99' y='183.381'/>
-<use x='118.25' xlink:href='#g3-102' y='183.381'/>
-<use x='120.838' xlink:href='#g3-114' y='183.381'/>
-<use x='123.73' xlink:href='#g3-97' y='183.381'/>
-<use x='127.798' xlink:href='#g3-99' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 45.565 34.954)'>
-<use x='114.487' xlink:href='#g3-108' y='183.381'/>
-<use x='116.507' xlink:href='#g3-101' y='183.381'/>
-<use x='120.271' xlink:href='#g3-97' y='183.381'/>
-<use x='124.339' xlink:href='#g3-110' y='183.381'/>
-<use x='128.711' xlink:href='#g3-78' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 106.188 34.954)'>
-<use x='114.487' xlink:href='#g3-114' y='183.381'/>
-<use x='117.379' xlink:href='#g3-101' y='183.381'/>
-<use x='121.142' xlink:href='#g3-100' y='183.381'/>
-<use x='125.515' xlink:href='#g3-105' y='183.381'/>
-<use x='127.535' xlink:href='#g3-115' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 159.716 34.954)'>
-<use x='114.487' xlink:href='#g3-108' y='183.381'/>
-<use x='116.507' xlink:href='#g3-97' y='183.381'/>
-<use x='120.34' xlink:href='#g3-114' y='183.381'/>
-<use x='123.232' xlink:href='#g3-115' y='183.381'/>
-<use x='126.478' xlink:href='#g3-111' y='183.381'/>
-<use x='130.712' xlink:href='#g3-110' y='183.381'/>
-<use x='135.085' xlink:href='#g3-78' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 215.596 34.954)'>
-<use x='114.487' xlink:href='#g3-109' y='183.381'/>
-<use x='121.211' xlink:href='#g3-115' y='183.381'/>
-<use x='124.458' xlink:href='#g3-116' y='183.381'/>
-<use x='127.516' xlink:href='#g3-114' y='183.381'/>
-<use x='130.408' xlink:href='#g3-101' y='183.381'/>
-<use x='134.171' xlink:href='#g3-115' y='183.381'/>
-<use x='137.418' xlink:href='#g3-115' y='183.381'/>
-<use x='140.664' xlink:href='#g3-78' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 277.158 34.954)'>
-<use x='114.487' xlink:href='#g3-114' y='183.381'/>
-<use x='117.379' xlink:href='#g3-112' y='183.381'/>
-<use x='121.751' xlink:href='#g3-116' y='183.381'/>
-<use x='124.809' xlink:href='#g3-101' y='183.381'/>
-<use x='128.573' xlink:href='#g3-115' y='183.381'/>
-<use x='131.819' xlink:href='#g3-116' y='183.381'/>
-<use x='134.877' xlink:href='#g3-78' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 22.192)'>
-<use x='114.487' xlink:href='#g2-48' y='183.381'/>
-<use x='117.133' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -9.12)'>
-<use x='114.487' xlink:href='#g2-48' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-53' y='183.381'/>
-<use x='121.25' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -40.431)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.743)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-53' y='183.381'/>
-<use x='121.25' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -103.054)'>
-<use x='114.487' xlink:href='#g2-50' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-120' y='183.381'/>
-</g>
-<path clip-path='url(#clip5)' d='M82.148 141.316H434.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M88.945 203.937H92.18V141.316H88.945ZM147.613 203.937H150.852V141.316H147.613ZM206.281 203.937H209.52V141.316H206.281ZM264.949 203.937H268.188V141.316H264.949ZM323.621 203.937H326.859V141.316H323.621ZM382.289 203.937H385.527V141.316H382.289Z' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M88.945 203.937H92.18V141.316H88.945ZM147.613 203.937H150.852V141.316H147.613ZM206.281 203.937H209.52V141.316H206.281ZM264.949 203.937H268.188V141.316H264.949ZM323.621 203.937H326.859V141.316H323.621ZM382.289 203.937H385.527V141.316H382.289Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M90.563 141.316V141.129' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M90.563 141.316V141.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M88.57 141.129H92.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M90.563 141.316V141.504' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M90.563 141.316V141.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M92.555 141.504H88.57' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M149.231 141.316V140.937' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M149.231 141.316V140.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M147.238 140.937H151.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M149.231 141.316V141.691' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M149.231 141.316V141.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M151.223 141.692H147.238' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M207.902 141.316V139.562' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M207.902 141.316V139.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M205.906 139.563H209.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M207.902 141.316V143.07' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M207.902 141.316V143.07' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M209.895 143.071H205.91' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M266.57 141.316V140.25' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M266.57 141.316V140.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M264.578 140.25H268.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M266.57 141.316V142.379' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M266.57 141.316V142.379' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M268.562 142.379H264.578' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M325.238 141.316V139.312' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M325.238 141.316V139.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M323.246 139.312H327.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M325.238 141.316V143.32' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M325.238 141.316V143.32' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M327.231 143.32H323.246' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M383.906 141.316V139.875' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M383.906 141.316V139.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M381.914 139.875H385.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M383.906 141.316V142.754' fill='#993333'/>
-<path clip-path='url(#clip5)' d='M383.906 141.316V142.754' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M385.902 142.753H381.914' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M94.176 203.937H97.41V140.875H94.176ZM152.844 203.937H156.082V135.617H152.844ZM211.512 203.937H214.75V136.805H211.512ZM270.18 203.937H273.418V78.691H270.18ZM328.852 203.937H332.09V139.625H328.852ZM387.52 203.937H390.758V105.746H387.52Z' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M94.176 203.937H97.41V140.875H94.176ZM152.844 203.937H156.082V135.617H152.844ZM211.512 203.937H214.75V136.805H211.512ZM270.18 203.937H273.418V78.691H270.18ZM328.852 203.937H332.09V139.625H328.852ZM387.52 203.937H390.758V105.746H387.52Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M95.793 140.875V140.625' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M95.793 140.875V140.625' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M93.801 140.625H97.785' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M95.793 140.875V141.129' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M95.793 140.875V141.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M97.785 141.129H93.801' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M154.461 135.617V135.242' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M154.461 135.617V135.242' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M152.469 135.242H156.454' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M154.461 135.617V135.992' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M154.461 135.617V135.992' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M156.453 135.992H152.468' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M213.133 136.805V135.68' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M213.133 136.805V135.68' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M211.137 135.68H215.125' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M213.133 136.805V137.934' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M213.133 136.805V137.934' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M215.125 137.934H211.14' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M271.801 78.691V78.691' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M269.809 78.691H273.793' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M271.801 78.691V78.691' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M269.809 78.691H273.793' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M330.469 139.625V139.312' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M330.469 139.625V139.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M328.477 139.312H332.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M330.469 139.625V139.937' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M330.469 139.625V139.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M332.461 139.937H328.476' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M389.137 105.746V99.609' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M389.137 105.746V99.609' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M387.145 99.609H391.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M389.137 105.746V111.883' fill='#8080bf'/>
-<path clip-path='url(#clip5)' d='M389.137 105.746V111.883' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M391.132 111.883H387.144' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M99.406 203.937H102.641V139.437H99.406ZM158.074 203.937H161.313V140.437H158.074ZM216.742 203.937H219.981V132.922H216.742ZM275.41 203.937H278.649V78.691H275.41ZM334.082 203.937H337.32V106.996H334.082ZM392.75 203.937H395.988V78.691H392.75Z' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M99.406 203.937H102.641V139.437H99.406ZM158.074 203.937H161.313V140.437H158.074ZM216.742 203.937H219.981V132.922H216.742ZM275.41 203.937H278.649V78.691H275.41ZM334.082 203.937H337.32V106.996H334.082ZM392.75 203.937H395.988V78.691H392.75Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M101.024 139.437V139.25' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M101.024 139.437V139.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M99.031 139.25H103.016' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M101.024 139.437V139.625' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M101.024 139.437V139.625' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M103.016 139.625H99.031' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M159.691 140.437V140.062' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M159.691 140.437V140.062' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M157.699 140.063H161.684' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M159.691 140.437V140.812' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M159.691 140.437V140.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M161.684 140.812H157.699' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M218.363 132.922V131.547' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M218.363 132.922V131.547' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M216.367 131.547H220.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M218.363 132.922V134.301' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M218.363 132.922V134.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M220.356 134.3H216.371' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M277.031 78.691V78.691' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M275.039 78.691H279.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M277.031 78.691V78.691' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M275.039 78.691H279.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M335.699 106.996V105.621' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M335.699 106.996V105.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M333.707 105.621H337.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M335.699 106.996V108.375' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M335.699 106.996V108.375' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M337.692 108.375H333.707' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M394.367 78.691V78.691' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M392.375 78.691H396.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M394.367 78.691V78.691' fill='#ffb733'/>
-<path clip-path='url(#clip5)' d='M392.375 78.691H396.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M104.637 203.937H107.871V124.344H104.637ZM163.305 203.937H166.543V135.742H163.305ZM221.973 203.937H225.211V105.996H221.973ZM280.641 203.937H283.879V98.168H280.641ZM339.313 203.937H342.551V122.715H339.313ZM397.981 203.937H401.219V120.336H397.981Z' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M104.637 203.937H107.871V124.344H104.637ZM163.305 203.937H166.543V135.742H163.305ZM221.973 203.937H225.211V105.996H221.973ZM280.641 203.937H283.879V98.168H280.641ZM339.313 203.937H342.551V122.715H339.313ZM397.981 203.937H401.219V120.336H397.981Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M106.254 124.344V124.031' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M106.254 124.344V124.031' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M104.261 124.031H108.246' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M106.254 124.344V124.656' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M106.254 124.344V124.656' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M108.246 124.656H104.261' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M164.922 135.742V135.555' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M164.922 135.742V135.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M162.929 135.555H166.914' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M164.922 135.742V135.93' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M164.922 135.742V135.93' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M166.914 135.93H162.929' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M223.594 105.996V104.805' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M223.594 105.996V104.805' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M221.597 104.805H225.585' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M223.594 105.996V107.187' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M223.594 105.996V107.187' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M225.586 107.188H221.601' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M282.262 98.168V96.289' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M282.262 98.168V96.289' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M280.269 96.289H284.253' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M282.262 98.168V100.047' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M282.262 98.168V100.047' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M284.254 100.047H280.269' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M340.93 122.715V121.527' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M340.93 122.715V121.527' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M338.937 121.527H342.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M340.93 122.715V123.906' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M340.93 122.715V123.906' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M342.922 123.906H338.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M399.598 120.336V114.137' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M399.598 120.336V114.137' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M397.605 114.137H401.589' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M399.598 120.336V126.535' fill='#bf80bf'/>
-<path clip-path='url(#clip5)' d='M399.598 120.336V126.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M401.593 126.535H397.605' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M109.867 203.937H113.102V140.687H109.867ZM168.535 203.937H171.774V141.316H168.535ZM227.203 203.937H230.442V140.625H227.203ZM285.871 203.937H289.109V136.555H285.871ZM344.543 203.937H347.781V115.453H344.543ZM403.211 203.937H406.449V135.242H403.211Z' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M109.867 203.937H113.102V140.687H109.867ZM168.535 203.937H171.774V141.316H168.535ZM227.203 203.937H230.442V140.625H227.203ZM285.871 203.937H289.109V136.555H285.871ZM344.543 203.937H347.781V115.453H344.543ZM403.211 203.937H406.449V135.242H403.211Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M111.484 140.687V140.562' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M111.484 140.687V140.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M109.492 140.563H113.477' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M111.484 140.687V140.812' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M111.484 140.687V140.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M113.477 140.812H109.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M170.152 141.316V140.937' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M170.152 141.316V140.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M168.16 140.937H172.145' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M170.152 141.316V141.691' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M170.152 141.316V141.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M172.145 141.692H168.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M228.824 140.625V139.25' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M228.824 140.625V139.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M226.828 139.25H230.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M228.824 140.625V142.004' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M228.824 140.625V142.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M230.817 142.004H226.832' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M287.492 136.555V134.801' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M287.492 136.555V134.801' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M285.5 134.8H289.484' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M287.492 136.555V138.309' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M287.492 136.555V138.309' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M289.485 138.308H285.5' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M346.16 115.453V114.074' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M346.16 115.453V114.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M344.168 114.074H348.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M346.16 115.453V116.828' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M346.16 115.453V116.828' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M348.153 116.829H344.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M404.828 135.242V128.539' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M404.828 135.242V128.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M402.836 128.539H406.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M404.828 135.242V141.941' fill='#dfbf9f'/>
-<path clip-path='url(#clip5)' d='M404.828 135.242V141.941' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M406.824 141.941H402.836' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M115.098 203.937H118.332V136.055H115.098ZM173.766 203.937H177.004V128.539H173.766ZM232.434 203.937H235.672V116.016H232.434ZM291.102 203.937H294.34V78.691H291.102ZM349.774 203.937H353.012V78.691H349.774ZM408.442 203.937H411.68V78.691H408.442Z' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M115.098 203.937H118.332V136.055H115.098ZM173.766 203.937H177.004V128.539H173.766ZM232.434 203.937H235.672V116.016H232.434ZM291.102 203.937H294.34V78.691H291.102ZM349.774 203.937H353.012V78.691H349.774ZM408.442 203.937H411.68V78.691H408.442Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M116.715 136.055V135.93' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M116.715 136.055V135.93' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M114.722 135.93H118.707' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M116.715 136.055V136.18' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M116.715 136.055V136.18' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M118.707 136.18H114.722' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M175.383 128.539V126.723' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M175.383 128.539V126.723' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M173.39 126.723H177.375' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M175.383 128.539V130.355' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M175.383 128.539V130.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M177.375 130.355H173.39' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M234.055 116.016V114.449' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M234.055 116.016V114.449' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M232.058 114.449H236.046' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M234.055 116.016V117.582' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M234.055 116.016V117.582' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M236.047 117.582H232.062' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M292.723 78.691V78.691' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M290.73 78.691H294.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M292.723 78.691V78.691' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M290.73 78.691H294.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M351.391 78.691V78.691' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M349.398 78.691H353.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M351.391 78.691V78.691' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M349.398 78.691H353.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M410.059 78.691V78.691' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M408.066 78.691H412.05' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M410.059 78.691V78.691' fill='#80bf80'/>
-<path clip-path='url(#clip5)' d='M408.066 78.691H412.05' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M120.328 203.937H123.563V137.621H120.328ZM178.996 203.937H182.234V197.676H178.996ZM237.664 203.937H240.902V136.43H237.664ZM296.332 203.937H299.57V116.953H296.332ZM355.004 203.937H358.238V197.676H355.004ZM413.672 203.937H416.91V78.691H413.672Z' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M120.328 203.937H123.563V137.621H120.328ZM178.996 203.937H182.234V197.676H178.996ZM237.664 203.937H240.902V136.43H237.664ZM296.332 203.937H299.57V116.953H296.332ZM355.004 203.937H358.238V197.676H355.004ZM413.672 203.937H416.91V78.691H413.672Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M121.945 137.621V137.371' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M121.945 137.621V137.371' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M119.953 137.371H123.938' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M121.945 137.621V137.871' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M121.945 137.621V137.871' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M123.938 137.871H119.953' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M180.613 197.676V197.676' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M178.621 197.676H182.606' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M180.613 197.676V197.676' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M178.621 197.676H182.606' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M239.285 136.43V134.988' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M239.285 136.43V134.988' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M237.289 134.988H241.274' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M239.285 136.43V137.871' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M239.285 136.43V137.871' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M241.278 137.871H237.293' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M297.953 116.953V115.391' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M297.953 116.953V115.391' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M295.961 115.39H299.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M297.953 116.953V118.519' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M297.953 116.953V118.519' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M299.946 118.519H295.961' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M356.621 197.676V197.676' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M354.629 197.676H358.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M356.621 197.676V197.676' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M354.629 197.676H358.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M415.289 78.691V78.691' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M413.297 78.691H417.281' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M415.289 78.691V78.691' fill='#bfbf80'/>
-<path clip-path='url(#clip5)' d='M413.297 78.691H417.281' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M125.559 203.937H128.793V138.121H125.559ZM184.227 203.937H187.465V132.047H184.227ZM242.895 203.937H246.133V134.426H242.895ZM301.563 203.937H304.801V78.691H301.563ZM360.234 203.937H363.469V78.691H360.234ZM418.902 203.937H422.141V109.254H418.902Z' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M125.559 203.937H128.793V138.121H125.559ZM184.227 203.937H187.465V132.047H184.227ZM242.895 203.937H246.133V134.426H242.895ZM301.563 203.937H304.801V78.691H301.563ZM360.234 203.937H363.469V78.691H360.234ZM418.902 203.937H422.141V109.254H418.902Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M127.176 138.121V137.934' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M127.176 138.121V137.934' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M125.183 137.934H129.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M127.176 138.121V138.309' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M127.176 138.121V138.309' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M129.168 138.308H125.183' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M185.844 132.047V131.672' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M185.844 132.047V131.672' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M183.851 131.672H187.836' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M185.844 132.047V132.422' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M185.844 132.047V132.422' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M187.836 132.422H183.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M244.516 134.426V133.488' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M244.516 134.426V133.488' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M242.519 133.488H246.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M244.516 134.426V135.367' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M244.516 134.426V135.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M246.508 135.367H242.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M303.184 78.691V78.691' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M301.191 78.691H305.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M303.184 78.691V78.691' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M301.191 78.691H305.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M361.852 78.691V78.691' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M359.859 78.691H363.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M361.852 78.691V78.691' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M359.859 78.691H363.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M420.52 109.254V107.25' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M420.52 109.254V107.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M418.527 107.25H422.511' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M420.52 109.254V111.258' fill='#339999'/>
-<path clip-path='url(#clip5)' d='M420.52 109.254V111.258' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M422.512 111.258H418.527' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M130.789 203.937H134.024V139.187H130.789ZM189.457 203.937H192.695V139.312H189.457ZM248.125 203.937H251.363V140.062H248.125ZM306.793 203.937H310.031V126.035H306.793ZM365.465 203.937H368.699V103.176H365.465ZM424.133 203.937H427.371V113.762H424.133Z' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M130.789 203.937H134.024V139.187H130.789ZM189.457 203.937H192.695V139.312H189.457ZM248.125 203.937H251.363V140.062H248.125ZM306.793 203.937H310.031V126.035H306.793ZM365.465 203.937H368.699V103.176H365.465ZM424.133 203.937H427.371V113.762H424.133Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M132.406 139.187V138.934' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M132.406 139.187V138.934' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M130.414 138.933H134.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M132.406 139.187V139.437' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M132.406 139.187V139.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M134.399 139.437H130.414' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M191.074 139.312V139.062' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M191.074 139.312V139.062' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M189.082 139.063H193.067' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M191.074 139.312V139.562' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M191.074 139.312V139.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M193.067 139.563H189.082' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M249.746 140.062V138.871' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M249.746 140.062V138.871' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M247.75 138.871H251.735' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M249.746 140.062V141.254' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M249.746 140.062V141.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M251.739 141.254H247.754' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M308.414 126.035V125.031' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M308.414 126.035V125.031' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M306.422 125.031H310.407' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M308.414 126.035V127.035' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M308.414 126.035V127.035' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M310.407 127.035H306.422' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M367.082 103.176V101.613' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M367.082 103.176V101.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M365.09 101.613H369.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M367.082 103.176V104.742' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M367.082 103.176V104.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M369.075 104.742H365.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M425.75 113.762V105.184' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M425.75 113.762V105.184' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M423.758 105.184H427.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M425.75 113.762V122.34' fill='#bf8080'/>
-<path clip-path='url(#clip5)' d='M425.75 113.762V122.34' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M427.743 122.34H423.758' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(0 -1 1 0 -91.184 249.777)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -32.515 249.777)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 26.154 249.777)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 84.823 249.777)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 143.492 249.777)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 202.161 249.777)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -85.954 249.339)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-49' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -27.284 244.079)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-57' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 31.385 245.269)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-55' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 90.054 187.154)'>
-<use x='109.598' xlink:href='#g4-1' y='183.381'/>
-<use x='113.103' xlink:href='#g4-1' y='183.381'/>
-<use x='116.608' xlink:href='#g4-1' y='183.381'/>
-<use x='120.114' xlink:href='#g2-52' y='183.381'/>
-<use x='122.76' xlink:href='#g2-46' y='183.381'/>
-<use x='124.23' xlink:href='#g2-57' y='183.381'/>
-<use x='126.877' xlink:href='#g2-52' y='183.381'/>
-<use x='129.523' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 148.723 248.087)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-51' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 207.392 214.208)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-53' y='183.381'/>
-<use x='121.25' xlink:href='#g2-55' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -80.723 247.899)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-51' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -22.054 248.901)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-49' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 36.615 241.386)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-49' y='183.381'/>
-<use x='121.25' xlink:href='#g2-51' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 95.284 187.154)'>
-<use x='109.598' xlink:href='#g4-1' y='183.381'/>
-<use x='113.103' xlink:href='#g4-1' y='183.381'/>
-<use x='116.608' xlink:href='#g4-1' y='183.381'/>
-<use x='120.114' xlink:href='#g2-53' y='183.381'/>
-<use x='122.76' xlink:href='#g2-46' y='183.381'/>
-<use x='124.23' xlink:href='#g2-50' y='183.381'/>
-<use x='126.877' xlink:href='#g2-50' y='183.381'/>
-<use x='129.523' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 153.953 215.46)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-53' y='183.381'/>
-<use x='121.25' xlink:href='#g2-53' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 212.622 187.154)'>
-<use x='109.598' xlink:href='#g4-1' y='183.381'/>
-<use x='113.103' xlink:href='#g4-1' y='183.381'/>
-<use x='116.608' xlink:href='#g4-1' y='183.381'/>
-<use x='120.114' xlink:href='#g2-51' y='183.381'/>
-<use x='122.76' xlink:href='#g2-46' y='183.381'/>
-<use x='124.23' xlink:href='#g2-55' y='183.381'/>
-<use x='126.877' xlink:href='#g2-56' y='183.381'/>
-<use x='129.523' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -75.493 232.807)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-50' y='183.381'/>
-<use x='121.25' xlink:href='#g2-55' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -16.824 244.204)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-57' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 41.845 214.458)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-53' y='183.381'/>
-<use x='121.25' xlink:href='#g2-54' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 100.514 206.63)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-54' y='183.381'/>
-<use x='121.25' xlink:href='#g2-57' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 159.183 231.178)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-51' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 217.852 228.799)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-51' y='183.381'/>
-<use x='121.25' xlink:href='#g2-52' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -70.262 249.151)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-49' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -11.593 249.777)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 47.076 249.089)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-49' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 105.745 245.018)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-56' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 164.414 223.914)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-52' y='183.381'/>
-<use x='121.25' xlink:href='#g2-49' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 223.083 243.703)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-49' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -65.032 244.517)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-56' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -6.363 237.002)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-50' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 52.306 224.478)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-52' y='183.381'/>
-<use x='121.25' xlink:href='#g2-48' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 110.975 187.154)'>
-<use x='109.598' xlink:href='#g4-1' y='183.381'/>
-<use x='113.103' xlink:href='#g4-1' y='183.381'/>
-<use x='116.608' xlink:href='#g4-1' y='183.381'/>
-<use x='120.114' xlink:href='#g2-51' y='183.381'/>
-<use x='122.76' xlink:href='#g2-46' y='183.381'/>
-<use x='124.23' xlink:href='#g2-48' y='183.381'/>
-<use x='126.877' xlink:href='#g2-50' y='183.381'/>
-<use x='129.523' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 169.644 187.154)'>
-<use x='109.598' xlink:href='#g4-1' y='183.381'/>
-<use x='113.103' xlink:href='#g4-1' y='183.381'/>
-<use x='116.608' xlink:href='#g4-1' y='183.381'/>
-<use x='120.114' xlink:href='#g2-50' y='183.381'/>
-<use x='122.76' xlink:href='#g2-46' y='183.381'/>
-<use x='124.23' xlink:href='#g2-51' y='183.381'/>
-<use x='126.877' xlink:href='#g2-49' y='183.381'/>
-<use x='129.523' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 228.313 187.154)'>
-<use x='109.598' xlink:href='#g4-1' y='183.381'/>
-<use x='113.103' xlink:href='#g4-1' y='183.381'/>
-<use x='116.608' xlink:href='#g4-1' y='183.381'/>
-<use x='120.114' xlink:href='#g2-52' y='183.381'/>
-<use x='122.76' xlink:href='#g2-46' y='183.381'/>
-<use x='124.23' xlink:href='#g2-54' y='183.381'/>
-<use x='126.877' xlink:href='#g2-51' y='183.381'/>
-<use x='129.523' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -59.801 246.083)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-54' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -1.66 306.138)'>
-<use x='114.487' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 57.537 244.893)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-56' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 116.206 225.417)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-51' y='183.381'/>
-<use x='121.25' xlink:href='#g2-57' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 174.347 306.138)'>
-<use x='114.487' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 233.544 187.154)'>
-<use x='109.598' xlink:href='#g4-1' y='183.381'/>
-<use x='113.103' xlink:href='#g4-1' y='183.381'/>
-<use x='116.608' xlink:href='#g4-1' y='183.381'/>
-<use x='120.114' xlink:href='#g2-51' y='183.381'/>
-<use x='122.76' xlink:href='#g2-46' y='183.381'/>
-<use x='124.23' xlink:href='#g2-56' y='183.381'/>
-<use x='126.877' xlink:href='#g2-53' y='183.381'/>
-<use x='129.523' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -54.571 246.584)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-53' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 4.098 240.509)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-49' y='183.381'/>
-<use x='121.25' xlink:href='#g2-53' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 62.767 242.889)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-49' y='183.381'/>
-<use x='121.25' xlink:href='#g2-49' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 121.436 187.154)'>
-<use x='109.598' xlink:href='#g4-1' y='183.381'/>
-<use x='113.103' xlink:href='#g4-1' y='183.381'/>
-<use x='116.608' xlink:href='#g4-1' y='183.381'/>
-<use x='120.114' xlink:href='#g2-51' y='183.381'/>
-<use x='122.76' xlink:href='#g2-46' y='183.381'/>
-<use x='124.23' xlink:href='#g2-50' y='183.381'/>
-<use x='126.877' xlink:href='#g2-50' y='183.381'/>
-<use x='129.523' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 180.105 187.154)'>
-<use x='109.598' xlink:href='#g4-1' y='183.381'/>
-<use x='113.103' xlink:href='#g4-1' y='183.381'/>
-<use x='116.608' xlink:href='#g4-1' y='183.381'/>
-<use x='120.114' xlink:href='#g2-50' y='183.381'/>
-<use x='122.76' xlink:href='#g2-46' y='183.381'/>
-<use x='124.23' xlink:href='#g2-56' y='183.381'/>
-<use x='126.877' xlink:href='#g2-56' y='183.381'/>
-<use x='129.523' xlink:href='#g2-120' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 238.774 217.714)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-53' y='183.381'/>
-<use x='121.25' xlink:href='#g2-49' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -49.34 247.648)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-51' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 9.329 247.773)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-51' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 67.998 248.525)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-48' y='183.381'/>
-<use x='121.25' xlink:href='#g2-50' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 126.667 234.497)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-50' y='183.381'/>
-<use x='121.25' xlink:href='#g2-52' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 185.336 211.64)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-54' y='183.381'/>
-<use x='121.25' xlink:href='#g2-49' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 244.005 222.223)'>
-<use x='114.487' xlink:href='#g2-49' y='183.381'/>
-<use x='117.133' xlink:href='#g2-46' y='183.381'/>
-<use x='118.603' xlink:href='#g2-52' y='183.381'/>
-<use x='121.25' xlink:href='#g2-52' y='183.381'/>
-</g>
-<g transform='matrix(0 -1 1 0 -124.021 311.062)'>
-<use x='114.487' xlink:href='#g1-82' y='183.381'/>
-<use x='120.457' xlink:href='#g1-101' y='183.381'/>
-<use x='124.553' xlink:href='#g1-108' y='183.381'/>
-<use x='126.753' xlink:href='#g1-97' y='183.381'/>
-<use x='131.181' xlink:href='#g1-116' y='183.381'/>
-<use x='134.509' xlink:href='#g1-105' y='183.381'/>
-<use x='136.709' xlink:href='#g1-118' y='183.381'/>
-<use x='140.957' xlink:href='#g1-101' y='183.381'/>
-<use x='148.124' xlink:href='#g1-116' y='183.381'/>
-<use x='151.452' xlink:href='#g1-105' y='183.381'/>
-<use x='153.652' xlink:href='#g1-109' y='183.381'/>
-<use x='160.972' xlink:href='#g1-101' y='183.381'/>
-<use x='168.139' xlink:href='#g3-40' y='183.381'/>
-<use x='171.432' xlink:href='#g3-108' y='183.381'/>
-<use x='173.453' xlink:href='#g3-111' y='183.381'/>
-<use x='177.452' xlink:href='#g3-119' y='183.381'/>
-<use x='183' xlink:href='#g3-101' y='183.381'/>
-<use x='186.764' xlink:href='#g3-114' y='183.381'/>
-<use x='192.479' xlink:href='#g3-105' y='183.381'/>
-<use x='194.499' xlink:href='#g3-115' y='183.381'/>
-<use x='200.568' xlink:href='#g3-98' y='183.381'/>
-<use x='205.176' xlink:href='#g3-101' y='183.381'/>
-<use x='208.94' xlink:href='#g3-116' y='183.381'/>
-<use x='211.998' xlink:href='#g3-116' y='183.381'/>
-<use x='215.056' xlink:href='#g3-101' y='183.381'/>
-<use x='218.819' xlink:href='#g3-114' y='183.381'/>
-<use x='221.711' xlink:href='#g3-41' y='183.381'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-b.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-b.svg
deleted file mode 100644
index 4a7e21e..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-b.svg
+++ /dev/null
@@ -1,1157 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='258.383pt' version='1.1' viewBox='106.736 54.996 381.623 258.383' width='381.623pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip6'>
-<path d='M135.949 251.93H487.961V84.164H135.949Z'/>
-</clipPath>
-<use id='g3-40' transform='scale(1.143)' xlink:href='#g0-40'/>
-<use id='g3-41' transform='scale(1.143)' xlink:href='#g0-41'/>
-<use id='g3-45' transform='scale(1.143)' xlink:href='#g0-45'/>
-<use id='g3-49' transform='scale(1.143)' xlink:href='#g0-49'/>
-<use id='g3-54' transform='scale(1.143)' xlink:href='#g0-54'/>
-<use id='g3-56' transform='scale(1.143)' xlink:href='#g0-56'/>
-<use id='g3-58' transform='scale(1.143)' xlink:href='#g0-58'/>
-<use id='g3-78' transform='scale(1.143)' xlink:href='#g0-78'/>
-<use id='g3-97' transform='scale(1.143)' xlink:href='#g0-97'/>
-<use id='g3-98' transform='scale(1.143)' xlink:href='#g0-98'/>
-<use id='g3-99' transform='scale(1.143)' xlink:href='#g0-99'/>
-<use id='g3-100' transform='scale(1.143)' xlink:href='#g0-100'/>
-<use id='g3-101' transform='scale(1.143)' xlink:href='#g0-101'/>
-<use id='g3-103' transform='scale(1.143)' xlink:href='#g0-103'/>
-<use id='g3-104' transform='scale(1.143)' xlink:href='#g0-104'/>
-<use id='g3-105' transform='scale(1.143)' xlink:href='#g0-105'/>
-<use id='g3-106' transform='scale(1.143)' xlink:href='#g0-106'/>
-<use id='g3-108' transform='scale(1.143)' xlink:href='#g0-108'/>
-<use id='g3-109' transform='scale(1.143)' xlink:href='#g0-109'/>
-<use id='g3-110' transform='scale(1.143)' xlink:href='#g0-110'/>
-<use id='g3-111' transform='scale(1.143)' xlink:href='#g0-111'/>
-<use id='g3-112' transform='scale(1.143)' xlink:href='#g0-112'/>
-<use id='g3-114' transform='scale(1.143)' xlink:href='#g0-114'/>
-<use id='g3-115' transform='scale(1.143)' xlink:href='#g0-115'/>
-<use id='g3-116' transform='scale(1.143)' xlink:href='#g0-116'/>
-<use id='g3-119' transform='scale(1.143)' xlink:href='#g0-119'/>
-<use id='g3-120' transform='scale(1.143)' xlink:href='#g0-120'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g1-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g1-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g1-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g1-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g1-108'/>
-<path d='M6.581 -2.663C6.581 -3.327 6.402 -4.08 5.317 -4.08C4.564 -4.08 4.142 -3.622 3.927 -3.344C3.865 -3.524 3.676 -4.08 2.762 -4.08C2.053 -4.08 1.623 -3.667 1.417 -3.398V-4.035H0.726V0H1.47V-2.188C1.47 -2.78 1.704 -3.497 2.385 -3.497C3.282 -3.497 3.282 -2.86 3.282 -2.6V0H4.026V-2.188C4.026 -2.78 4.259 -3.497 4.94 -3.497C5.837 -3.497 5.837 -2.86 5.837 -2.6V0H6.581V-2.663Z' id='g1-109'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g1-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g1-118'/>
-<use id='g2-44' transform='scale(0.714)' xlink:href='#g0-44'/>
-<use id='g2-45' transform='scale(0.714)' xlink:href='#g0-45'/>
-<use id='g2-46' transform='scale(0.714)' xlink:href='#g0-46'/>
-<use id='g2-48' transform='scale(0.714)' xlink:href='#g0-48'/>
-<use id='g2-49' transform='scale(0.714)' xlink:href='#g0-49'/>
-<use id='g2-50' transform='scale(0.714)' xlink:href='#g0-50'/>
-<use id='g2-51' transform='scale(0.714)' xlink:href='#g0-51'/>
-<use id='g2-52' transform='scale(0.714)' xlink:href='#g0-52'/>
-<use id='g2-53' transform='scale(0.714)' xlink:href='#g0-53'/>
-<use id='g2-54' transform='scale(0.714)' xlink:href='#g0-54'/>
-<use id='g2-55' transform='scale(0.714)' xlink:href='#g0-55'/>
-<use id='g2-56' transform='scale(0.714)' xlink:href='#g0-56'/>
-<use id='g2-57' transform='scale(0.714)' xlink:href='#g0-57'/>
-<use id='g2-64' transform='scale(0.714)' xlink:href='#g0-64'/>
-<use id='g2-65' transform='scale(0.714)' xlink:href='#g0-65'/>
-<use id='g2-67' transform='scale(0.714)' xlink:href='#g0-67'/>
-<use id='g2-68' transform='scale(0.714)' xlink:href='#g0-68'/>
-<use id='g2-71' transform='scale(0.714)' xlink:href='#g0-71'/>
-<use id='g2-77' transform='scale(0.714)' xlink:href='#g0-77'/>
-<use id='g2-85' transform='scale(0.714)' xlink:href='#g0-85'/>
-<use id='g2-97' transform='scale(0.714)' xlink:href='#g0-97'/>
-<use id='g2-98' transform='scale(0.714)' xlink:href='#g0-98'/>
-<use id='g2-99' transform='scale(0.714)' xlink:href='#g0-99'/>
-<use id='g2-100' transform='scale(0.714)' xlink:href='#g0-100'/>
-<use id='g2-101' transform='scale(0.714)' xlink:href='#g0-101'/>
-<use id='g2-103' transform='scale(0.714)' xlink:href='#g0-103'/>
-<use id='g2-104' transform='scale(0.714)' xlink:href='#g0-104'/>
-<use id='g2-108' transform='scale(0.714)' xlink:href='#g0-108'/>
-<use id='g2-109' transform='scale(0.714)' xlink:href='#g0-109'/>
-<use id='g2-110' transform='scale(0.714)' xlink:href='#g0-110'/>
-<use id='g2-111' transform='scale(0.714)' xlink:href='#g0-111'/>
-<use id='g2-112' transform='scale(0.714)' xlink:href='#g0-112'/>
-<use id='g2-114' transform='scale(0.714)' xlink:href='#g0-114'/>
-<use id='g2-115' transform='scale(0.714)' xlink:href='#g0-115'/>
-<use id='g2-116' transform='scale(0.714)' xlink:href='#g0-116'/>
-<use id='g2-117' transform='scale(0.714)' xlink:href='#g0-117'/>
-<use id='g2-120' transform='scale(0.714)' xlink:href='#g0-120'/>
-<use id='g2-122' transform='scale(0.714)' xlink:href='#g0-122'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g4-1'/>
-<path d='M2.127 -5.23C2.008 -5.23 1.995 -5.23 1.911 -5.154C1.032 -4.387 0.586 -3.145 0.586 -1.743C0.586 -0.425 0.983 0.844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 0.063C1.276 -0.481 1.193 -1.053 1.193 -1.743C1.193 -4.156 2.322 -5.112 2.462 -5.23H2.127Z' id='g0-40'/>
-<path d='M0.746 1.743C0.865 1.743 0.879 1.743 0.962 1.667C1.841 0.9 2.287 -0.342 2.287 -1.743C2.287 -3.062 1.89 -4.331 0.969 -5.14C0.879 -5.23 0.865 -5.23 0.746 -5.23H0.411C0.432 -5.216 1.109 -4.638 1.43 -3.55C1.597 -3.006 1.681 -2.434 1.681 -1.743C1.681 0.669 0.551 1.625 0.411 1.743H0.746Z' id='g0-41'/>
-<path d='M1.339 -0.007V-0.628H0.711V0H0.907L0.704 0.893H1.018L1.339 -0.007Z' id='g0-44'/>
-<path d='M2.05 -1.332V-1.771H0.084V-1.332H2.05Z' id='g0-45'/>
-<path d='M1.339 -0.628H0.711V0H1.339V-0.628Z' id='g0-46'/>
-<path d='M3.403 -2.267C3.403 -2.601 3.403 -3.417 3.075 -3.989C2.72 -4.617 2.183 -4.721 1.848 -4.721C1.534 -4.721 0.99 -4.624 0.642 -4.024C0.307 -3.466 0.293 -2.706 0.293 -2.267C0.293 -1.75 0.321 -1.116 0.614 -0.586C0.921 -0.021 1.437 0.146 1.848 0.146C2.545 0.146 2.929 -0.258 3.138 -0.697C3.382 -1.193 3.403 -1.834 3.403 -2.267ZM1.848 -0.314C1.555 -0.314 1.22 -0.481 1.046 -0.983C0.907 -1.409 0.9 -1.848 0.9 -2.357C0.9 -2.999 0.9 -4.261 1.848 -4.261S2.797 -2.999 2.797 -2.357C2.797 -1.897 2.797 -1.374 2.629 -0.928C2.434 -0.425 2.078 -0.314 1.848 -0.314Z' id='g0-48'/>
-<path d='M2.239 -4.721H2.085C1.632 -4.303 1.06 -4.275 0.642 -4.261V-3.822C0.914 -3.829 1.262 -3.843 1.611 -3.982V-0.439H0.683V0H3.166V-0.439H2.239V-4.721Z' id='g0-49'/>
-<path d='M1.974 -0.537C1.89 -0.537 1.806 -0.53 1.723 -0.53H0.928L2.008 -1.485C2.134 -1.597 2.476 -1.855 2.608 -1.967C2.915 -2.246 3.327 -2.608 3.327 -3.215C3.327 -4.003 2.741 -4.721 1.743 -4.721C1.004 -4.721 0.544 -4.324 0.307 -3.612L0.635 -3.201C0.795 -3.787 1.039 -4.24 1.646 -4.24C2.232 -4.24 2.678 -3.829 2.678 -3.201C2.678 -2.622 2.336 -2.294 1.918 -1.897C1.778 -1.757 1.402 -1.444 1.255 -1.304C1.053 -1.123 0.572 -0.656 0.37 -0.481V0H3.327V-0.537H1.974Z' id='g0-50'/>
-<path d='M0.697 -3.578C0.983 -4.135 1.485 -4.289 1.82 -4.289C2.232 -4.289 2.538 -4.052 2.538 -3.654C2.538 -3.285 2.287 -2.831 1.757 -2.741C1.723 -2.734 1.695 -2.734 1.234 -2.699V-2.239H1.778C2.441 -2.239 2.685 -1.716 2.685 -1.276C2.685 -0.732 2.35 -0.314 1.806 -0.314C1.311 -0.314 0.746 -0.551 0.398 -0.997L0.307 -0.544C0.711 -0.091 1.276 0.146 1.82 0.146C2.734 0.146 3.389 -0.537 3.389 -1.269C3.389 -1.841 2.929 -2.301 2.378 -2.462C2.908 -2.734 3.18 -3.201 3.18 -3.654C3.18 -4.247 2.573 -4.721 1.827 -4.721C1.213 -4.721 0.704 -4.4 0.411 -3.982L0.697 -3.578Z' id='g0-51'/>
-<path d='M2.762 -1.165H3.487V-1.625H2.762V-4.575H2.071L0.209 -1.625V-1.165H2.162V0H2.762V-1.165ZM0.802 -1.625C1.011 -1.953 2.211 -3.815 2.211 -4.233V-1.625H0.802Z' id='g0-52'/>
-<path d='M1.144 -4.094H3.075V-4.575H0.586V-1.967H1.095C1.262 -2.343 1.59 -2.511 1.904 -2.511C2.19 -2.511 2.622 -2.315 2.622 -1.43C2.622 -0.516 2.043 -0.314 1.688 -0.314C1.227 -0.314 0.781 -0.558 0.544 -0.955L0.279 -0.537C0.621 -0.112 1.137 0.146 1.688 0.146C2.608 0.146 3.327 -0.565 3.327 -1.416C3.327 -2.28 2.685 -2.971 1.918 -2.971C1.618 -2.971 1.353 -2.866 1.144 -2.692V-4.094Z' id='g0-53'/>
-<path d='M3.062 -4.582C2.685 -4.721 2.42 -4.721 2.287 -4.721C1.227 -4.721 0.307 -3.724 0.307 -2.253C0.307 -0.363 1.158 0.146 1.862 0.146C2.427 0.146 2.72 -0.119 2.936 -0.342C3.382 -0.816 3.389 -1.311 3.389 -1.555C3.389 -2.469 2.894 -3.229 2.218 -3.229C1.534 -3.229 1.165 -2.873 0.962 -2.671C1.053 -3.626 1.541 -4.289 2.294 -4.289C2.434 -4.289 2.713 -4.275 3.062 -4.142V-4.582ZM0.969 -1.534C0.969 -1.576 0.969 -1.681 0.976 -1.716C0.976 -2.19 1.276 -2.769 1.897 -2.769C2.748 -2.769 2.748 -1.792 2.748 -1.555C2.748 -1.29 2.748 -0.997 2.559 -0.704C2.392 -0.453 2.183 -0.314 1.862 -0.314C1.123 -0.314 1.004 -1.227 0.969 -1.534Z' id='g0-54'/>
-<path d='M1.723 -4.038C1.806 -4.038 1.89 -4.045 1.974 -4.045H2.852C1.792 -3.006 1.116 -1.548 1.116 0.07H1.771C1.771 -1.967 2.762 -3.431 3.389 -4.087V-4.575H0.307V-4.038H1.723Z' id='g0-55'/>
-<path d='M2.385 -2.469C2.845 -2.615 3.285 -2.985 3.285 -3.501C3.285 -4.135 2.678 -4.721 1.848 -4.721S0.411 -4.135 0.411 -3.501C0.411 -2.978 0.865 -2.608 1.311 -2.469C0.697 -2.28 0.307 -1.806 0.307 -1.269C0.307 -0.523 0.969 0.146 1.848 0.146S3.389 -0.523 3.389 -1.269C3.389 -1.806 2.992 -2.28 2.385 -2.469ZM1.848 -2.699C1.353 -2.699 0.948 -2.985 0.948 -3.494C0.948 -3.94 1.262 -4.289 1.848 -4.289C2.427 -4.289 2.748 -3.94 2.748 -3.494C2.748 -2.999 2.357 -2.699 1.848 -2.699ZM1.848 -0.314C1.367 -0.314 0.941 -0.621 0.941 -1.276C0.941 -1.904 1.346 -2.239 1.848 -2.239S2.755 -1.897 2.755 -1.276C2.755 -0.621 2.322 -0.314 1.848 -0.314Z' id='g0-56'/>
-<path d='M0.537 -0.174C0.879 0.077 1.193 0.146 1.52 0.146C2.497 0.146 3.389 -0.837 3.389 -2.336C3.389 -4.24 2.545 -4.721 1.876 -4.721C1.255 -4.721 0.969 -4.428 0.767 -4.226C0.321 -3.773 0.307 -3.292 0.307 -3.02C0.307 -2.12 0.795 -1.346 1.478 -1.346C2.267 -1.346 2.699 -1.869 2.734 -1.911C2.636 -0.802 2.092 -0.314 1.52 -0.314C1.158 -0.314 0.934 -0.446 0.774 -0.579L0.537 -0.174ZM2.713 -3.027C2.72 -2.985 2.72 -2.915 2.72 -2.873C2.72 -2.357 2.406 -1.806 1.799 -1.806C1.534 -1.806 1.325 -1.883 1.144 -2.169C0.962 -2.441 0.948 -2.706 0.948 -3.02C0.948 -3.292 0.948 -3.605 1.165 -3.912C1.311 -4.122 1.52 -4.289 1.869 -4.289C2.545 -4.289 2.692 -3.473 2.713 -3.027Z' id='g0-57'/>
-<path d='M1.339 -3.096H0.711V-2.469H1.339V-3.096ZM0.711 -0.628V0H1.339V-0.628H0.711Z' id='g0-58'/>
-<path d='M4.142 -0.614C4.038 -0.614 4.024 -0.614 3.968 -0.586C3.626 -0.467 3.271 -0.391 2.901 -0.391C1.778 -0.391 0.976 -1.339 0.976 -2.42C0.976 -3.592 1.883 -4.449 2.859 -4.449C3.055 -4.449 3.515 -4.4 3.745 -3.843C3.55 -3.954 3.333 -4.003 3.152 -4.003C2.406 -4.003 1.778 -3.306 1.778 -2.42C1.778 -1.513 2.427 -0.837 3.145 -0.837C3.689 -0.837 4.519 -1.276 4.519 -2.518C4.519 -3.222 4.47 -4.91 2.866 -4.91C1.541 -4.91 0.411 -3.815 0.411 -2.42C0.411 -1.039 1.527 0.07 2.873 0.07C3.515 0.07 4.115 -0.195 4.519 -0.614H4.142ZM3.152 -1.297C2.72 -1.297 2.343 -1.778 2.343 -2.42C2.343 -3.082 2.734 -3.543 3.145 -3.543C3.578 -3.543 3.954 -3.062 3.954 -2.42C3.954 -1.757 3.564 -1.297 3.152 -1.297Z' id='g0-64'/>
-<path d='M2.803 -4.84H2.127L0.209 0H0.781L1.325 -1.381H3.445L3.989 0H4.721L2.803 -4.84ZM2.392 -4.31L3.271 -1.792H1.499L2.392 -4.31Z' id='g0-65'/>
-<path d='M4.317 -0.851C3.829 -0.551 3.605 -0.418 2.908 -0.418C1.827 -0.418 1.172 -1.43 1.172 -2.434C1.172 -3.466 1.89 -4.435 2.908 -4.435C3.368 -4.435 3.843 -4.289 4.163 -4.045L4.275 -4.679C3.787 -4.861 3.396 -4.917 2.887 -4.917C1.506 -4.917 0.474 -3.773 0.474 -2.427C0.474 -0.99 1.569 0.07 2.929 0.07C3.612 0.07 3.898 -0.07 4.359 -0.321L4.317 -0.851Z' id='g0-67'/>
-<path d='M0.683 -4.84V0H2.664C3.919 0 4.931 -1.06 4.931 -2.378C4.931 -3.745 3.912 -4.84 2.664 -4.84H0.683ZM1.367 -0.411V-4.428H2.476C3.431 -4.428 4.247 -3.668 4.247 -2.385C4.247 -1.088 3.396 -0.411 2.476 -0.411H1.367Z' id='g0-68'/>
-<path d='M4.442 -2.085H2.88V-1.625H3.829V-0.558C3.522 -0.481 3.222 -0.418 2.908 -0.418C1.834 -0.418 1.172 -1.43 1.172 -2.427C1.172 -3.382 1.82 -4.435 2.873 -4.435C3.515 -4.435 3.919 -4.24 4.268 -3.947L4.38 -4.582C3.898 -4.812 3.473 -4.924 2.943 -4.924C1.534 -4.924 0.474 -3.822 0.474 -2.427C0.474 -1.067 1.527 0.07 2.901 0.07C3.403 0.07 3.996 -0.042 4.442 -0.272V-2.085Z' id='g0-71'/>
-<path d='M3.884 -2.42C3.801 -2.211 3.299 -0.983 3.229 -0.69H3.222C3.173 -0.893 2.852 -1.695 2.783 -1.876L1.583 -4.84H0.732V0H1.318V-4.282H1.325C1.381 -4.038 1.743 -3.117 1.778 -3.041L2.943 -0.146H3.494L4.533 -2.713C4.533 -2.72 5.014 -3.905 5.133 -4.289H5.14V0H5.726V-4.84H4.868L3.884 -2.42Z' id='g0-77'/>
-<path d='M1.646 -4.84H0.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-0.551H3.933L1.646 -4.84Z' id='g0-78'/>
-<path d='M4.4 -4.84H3.794V-1.625C3.794 -0.69 3.166 -0.265 2.566 -0.265S1.381 -0.697 1.381 -1.618V-4.84H0.676V-1.632C0.676 -0.607 1.555 0.146 2.559 0.146C3.557 0.146 4.4 -0.614 4.4 -1.632V-4.84Z' id='g0-85'/>
-<path d='M2.971 -2.008C2.971 -2.72 2.427 -3.201 1.736 -3.201C1.297 -3.201 0.962 -3.11 0.572 -2.901L0.614 -2.392C0.844 -2.545 1.186 -2.755 1.736 -2.755C2.043 -2.755 2.364 -2.525 2.364 -2.001V-1.723C1.332 -1.688 0.314 -1.471 0.314 -0.823C0.314 -0.474 0.551 0.07 1.165 0.07C1.465 0.07 2.015 0.007 2.385 -0.265V0H2.971V-2.008ZM2.364 -0.99C2.364 -0.851 2.364 -0.669 2.12 -0.523C1.897 -0.398 1.625 -0.391 1.548 -0.391C1.165 -0.391 0.872 -0.565 0.872 -0.83C0.872 -1.276 2.05 -1.318 2.364 -1.332V-0.99Z' id='g0-97'/>
-<path d='M1.179 -4.84H0.593V0H1.2V-0.328C1.353 -0.195 1.688 0.07 2.197 0.07C2.957 0.07 3.571 -0.642 3.571 -1.555C3.571 -2.399 3.089 -3.166 2.392 -3.166C1.953 -3.166 1.527 -3.027 1.179 -2.769V-4.84ZM1.2 -2.197C1.2 -2.308 1.2 -2.392 1.444 -2.552C1.548 -2.615 1.736 -2.706 1.974 -2.706C2.441 -2.706 2.964 -2.392 2.964 -1.555C2.964 -0.704 2.385 -0.391 1.897 -0.391C1.639 -0.391 1.395 -0.509 1.2 -0.823V-2.197Z' id='g0-98'/>
-<path d='M3.034 -0.76C2.685 -0.537 2.308 -0.411 1.876 -0.411C1.234 -0.411 0.858 -0.928 0.858 -1.555C0.858 -2.092 1.137 -2.72 1.897 -2.72C2.371 -2.72 2.594 -2.622 2.95 -2.399L3.041 -2.901C2.622 -3.11 2.441 -3.201 1.897 -3.201C0.851 -3.201 0.251 -2.357 0.251 -1.548C0.251 -0.697 0.921 0.07 1.869 0.07C2.357 0.07 2.776 -0.077 3.075 -0.251L3.034 -0.76Z' id='g0-99'/>
-<path d='M3.229 -4.84H2.643V-2.797C2.197 -3.124 1.743 -3.166 1.541 -3.166C0.809 -3.166 0.251 -2.434 0.251 -1.548S0.802 0.07 1.52 0.07C1.953 0.07 2.357 -0.126 2.622 -0.363V0H3.229V-4.84ZM2.622 -0.865C2.448 -0.579 2.183 -0.391 1.848 -0.391C1.36 -0.391 0.858 -0.732 0.858 -1.541C0.858 -2.413 1.451 -2.706 1.925 -2.706C2.204 -2.706 2.441 -2.587 2.622 -2.35V-0.865Z' id='g0-100'/>
-<path d='M2.999 -0.76C2.608 -0.481 2.169 -0.391 1.869 -0.391C1.262 -0.391 0.802 -0.886 0.781 -1.527H3.068C3.068 -1.848 3.034 -2.315 2.762 -2.713C2.511 -3.068 2.092 -3.201 1.75 -3.201C0.9 -3.201 0.244 -2.455 0.244 -1.569C0.244 -0.676 0.941 0.07 1.862 0.07C2.267 0.07 2.685 -0.049 3.041 -0.265L2.999 -0.76ZM0.83 -1.946C0.99 -2.504 1.402 -2.741 1.75 -2.741C2.057 -2.741 2.511 -2.594 2.643 -1.946H0.83Z' id='g0-101'/>
-<path d='M3.508 -3.166C3.354 -3.166 2.887 -3.159 2.357 -2.957L2.343 -2.95C2.092 -3.117 1.848 -3.166 1.646 -3.166C0.962 -3.166 0.453 -2.629 0.453 -2.029C0.453 -1.785 0.537 -1.534 0.697 -1.339C0.6 -1.22 0.495 -1.025 0.495 -0.76C0.495 -0.488 0.607 -0.314 0.669 -0.23C0.286 -0.007 0.209 0.314 0.209 0.481C0.209 1.011 0.941 1.43 1.848 1.43C2.762 1.43 3.487 1.011 3.487 0.481C3.487 -0.502 2.267 -0.502 1.967 -0.502H1.318C1.206 -0.502 0.907 -0.502 0.907 -0.865C0.907 -1.004 0.955 -1.074 0.962 -1.088C1.206 -0.934 1.451 -0.886 1.639 -0.886C2.322 -0.886 2.831 -1.423 2.831 -2.022C2.831 -2.246 2.769 -2.448 2.643 -2.636C2.615 -2.678 2.615 -2.685 2.615 -2.692C2.615 -2.72 3.034 -2.72 3.068 -2.72C3.075 -2.72 3.34 -2.72 3.592 -2.692L3.508 -3.166ZM1.646 -1.318C1.269 -1.318 0.99 -1.555 0.99 -2.022C0.99 -2.566 1.339 -2.734 1.639 -2.734C2.015 -2.734 2.294 -2.497 2.294 -2.029C2.294 -1.485 1.946 -1.318 1.646 -1.318ZM1.974 0.042C2.134 0.042 2.957 0.042 2.957 0.488C2.957 0.788 2.434 0.997 1.848 0.997S0.739 0.788 0.739 0.488C0.739 0.453 0.739 0.042 1.304 0.042H1.974Z' id='g0-103'/>
-<path d='M3.243 -2.064C3.243 -2.608 3.082 -3.166 2.225 -3.166C1.625 -3.166 1.304 -2.817 1.165 -2.671V-4.84H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-2.064Z' id='g0-104'/>
-<path d='M1.227 -4.784H0.523V-4.08H1.227V-4.784ZM1.172 -3.096H0.586V0H1.172V-3.096Z' id='g0-105'/>
-<path d='M1.381 -4.784H0.676V-4.08H1.381V-4.784ZM-0.453 1.186C-0.133 1.36 0.181 1.423 0.446 1.423C0.928 1.423 1.381 1.053 1.381 0.411V-3.096H0.795V0.46C0.795 0.586 0.795 0.697 0.649 0.816C0.488 0.934 0.293 0.934 0.23 0.934C-0.063 0.934 -0.244 0.802 -0.328 0.725L-0.453 1.186Z' id='g0-106'/>
-<path d='M1.172 -4.84H0.586V0H1.172V-4.84Z' id='g0-108'/>
-<path d='M5.3 -2.064C5.3 -2.608 5.14 -3.166 4.282 -3.166C3.696 -3.166 3.333 -2.824 3.166 -2.601C3.096 -2.79 2.922 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-1.695C3.243 -2.155 3.438 -2.706 3.975 -2.706C4.693 -2.706 4.693 -2.218 4.693 -2.015V0H5.3V-2.064Z' id='g0-109'/>
-<path d='M3.243 -2.064C3.243 -2.608 3.082 -3.166 2.225 -3.166C1.827 -3.166 1.444 -3.006 1.137 -2.636V-3.145H0.579V0H1.186V-1.695C1.186 -2.155 1.381 -2.706 1.918 -2.706C2.636 -2.706 2.636 -2.218 2.636 -2.015V0H3.243V-2.064Z' id='g0-110'/>
-<path d='M3.487 -1.527C3.487 -2.448 2.755 -3.201 1.848 -3.201S0.209 -2.441 0.209 -1.527C0.209 -0.642 0.948 0.07 1.848 0.07C2.755 0.07 3.487 -0.642 3.487 -1.527ZM1.848 -0.411C1.297 -0.411 0.816 -0.816 0.816 -1.604S1.332 -2.741 1.848 -2.741C2.371 -2.741 2.88 -2.378 2.88 -1.604C2.88 -0.809 2.385 -0.411 1.848 -0.411Z' id='g0-111'/>
-<path d='M1.2 -0.328C1.569 0.007 1.967 0.07 2.204 0.07C2.943 0.07 3.571 -0.635 3.571 -1.555C3.571 -2.392 3.11 -3.166 2.42 -3.166C2.106 -3.166 1.583 -3.075 1.179 -2.762V-3.096H0.593V1.353H1.2V-0.328ZM1.2 -2.315C1.36 -2.511 1.632 -2.685 1.967 -2.685C2.525 -2.685 2.964 -2.169 2.964 -1.555C2.964 -0.865 2.441 -0.391 1.897 -0.391C1.792 -0.391 1.618 -0.404 1.437 -0.551C1.227 -0.711 1.2 -0.816 1.2 -0.948V-2.315Z' id='g0-112'/>
-<path d='M1.179 -1.485C1.179 -2.239 1.806 -2.643 2.42 -2.65V-3.166C1.834 -3.159 1.409 -2.873 1.13 -2.504V-3.145H0.593V0H1.179V-1.485Z' id='g0-114'/>
-<path d='M2.545 -2.985C2.071 -3.18 1.723 -3.201 1.471 -3.201C1.297 -3.201 0.244 -3.201 0.244 -2.273C0.244 -1.946 0.425 -1.764 0.516 -1.681C0.76 -1.437 1.053 -1.381 1.423 -1.311C1.75 -1.248 2.127 -1.179 2.127 -0.844C2.127 -0.404 1.548 -0.404 1.451 -0.404C1.004 -0.404 0.586 -0.565 0.307 -0.76L0.209 -0.237C0.446 -0.119 0.872 0.07 1.451 0.07C1.764 0.07 2.071 0.021 2.329 -0.167C2.587 -0.363 2.671 -0.669 2.671 -0.907C2.671 -1.032 2.657 -1.304 2.364 -1.569C2.106 -1.799 1.855 -1.848 1.52 -1.911C1.109 -1.988 0.788 -2.05 0.788 -2.357C0.788 -2.755 1.297 -2.755 1.402 -2.755C1.799 -2.755 2.106 -2.671 2.455 -2.49L2.545 -2.985Z' id='g0-115'/>
-<path d='M1.311 -2.657H2.343V-3.096H1.311V-3.982H0.774V-3.096H0.139V-2.657H0.753V-0.893C0.753 -0.425 0.872 0.07 1.374 0.07S2.26 -0.091 2.469 -0.188L2.35 -0.635C2.12 -0.467 1.876 -0.411 1.681 -0.411C1.388 -0.411 1.311 -0.697 1.311 -1.018V-2.657Z' id='g0-116'/>
-<path d='M3.243 -3.096H2.636V-1.074C2.636 -0.516 2.162 -0.342 1.757 -0.342C1.241 -0.342 1.186 -0.481 1.186 -0.802V-3.096H0.579V-0.76C0.579 -0.139 0.851 0.07 1.339 0.07C1.625 0.07 2.239 0.014 2.657 -0.321V0H3.243V-3.096Z' id='g0-117'/>
-<path d='M4.951 -3.096H4.407C4.345 -2.901 3.954 -1.723 3.738 -0.997C3.682 -0.795 3.612 -0.572 3.592 -0.411H3.585C3.543 -0.697 3.299 -1.451 3.285 -1.499L2.769 -3.096H2.239C2.036 -2.497 1.513 -0.934 1.458 -0.425H1.451C1.395 -0.921 0.879 -2.462 0.767 -2.797C0.711 -2.964 0.711 -2.978 0.676 -3.096H0.105L1.123 0H1.709C1.716 -0.028 1.904 -0.579 2.148 -1.353C2.253 -1.695 2.462 -2.364 2.497 -2.671L2.504 -2.678C2.518 -2.532 2.559 -2.378 2.608 -2.204S2.706 -1.841 2.755 -1.681L3.292 0H3.933L4.951 -3.096Z' id='g0-119'/>
-<path d='M1.932 -1.597L3.285 -3.096H2.671L1.681 -1.953L0.669 -3.096H0.042L1.437 -1.597L0 0H0.621L1.681 -1.311L2.783 0H3.41L1.932 -1.597Z' id='g0-120'/>
-<path d='M2.957 -2.803V-3.096H0.307V-2.65H1.332C1.416 -2.65 1.499 -2.657 1.583 -2.657H2.127L0.209 -0.307V0H2.978V-0.467H1.897C1.813 -0.467 1.73 -0.46 1.646 -0.46H1.039L2.957 -2.803Z' id='g0-122'/>
-</defs>
-<g id='page6'>
-<path d='M194.617 260.785V251.93M253.285 260.785V251.93M311.953 260.785V251.93M370.625 260.785V251.93M429.293 260.785V251.93M194.617 75.308V84.164M253.285 75.308V84.164M311.953 75.308V84.164M370.625 75.308V84.164M429.293 75.308V84.164' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M165.281 256.18V251.93M223.953 256.18V251.93M282.621 256.18V251.93M341.289 256.18V251.93M399.957 256.18V251.93M458.629 256.18V251.93M165.281 79.91V84.164M223.953 79.91V84.164M282.621 79.91V84.164M341.289 79.91V84.164M399.957 79.91V84.164M458.629 79.91V84.164' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 251.93H140.199M135.949 218.375H140.199M135.949 184.824H140.199M135.949 151.269H140.199M135.949 117.719H140.199M135.949 84.164H140.199M487.961 251.93H483.711M487.961 218.375H483.711M487.961 184.824H483.711M487.961 151.269H483.711M487.961 117.719H483.711M487.961 84.164H483.711' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 251.93V84.164H487.961V251.93H135.949Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -21.265 74.992)'>
-<use x='168.285' xlink:href='#g3-97' y='191.334'/>
-<use x='172.353' xlink:href='#g3-108' y='191.334'/>
-<use x='174.373' xlink:href='#g3-108' y='191.334'/>
-<use x='176.393' xlink:href='#g3-111' y='191.334'/>
-<use x='180.863' xlink:href='#g3-99' y='191.334'/>
-<use x='184.627' xlink:href='#g3-45' y='191.334'/>
-<use x='187.449' xlink:href='#g3-116' y='191.334'/>
-<use x='190.507' xlink:href='#g3-101' y='191.334'/>
-<use x='194.271' xlink:href='#g3-115' y='191.334'/>
-<use x='197.517' xlink:href='#g3-116' y='191.334'/>
-<use x='200.575' xlink:href='#g3-49' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 74.992)'>
-<use x='168.285' xlink:href='#g3-97' y='191.334'/>
-<use x='172.353' xlink:href='#g3-108' y='191.334'/>
-<use x='174.373' xlink:href='#g3-108' y='191.334'/>
-<use x='176.393' xlink:href='#g3-111' y='191.334'/>
-<use x='180.863' xlink:href='#g3-99' y='191.334'/>
-<use x='184.627' xlink:href='#g3-45' y='191.334'/>
-<use x='187.449' xlink:href='#g3-116' y='191.334'/>
-<use x='190.507' xlink:href='#g3-101' y='191.334'/>
-<use x='194.271' xlink:href='#g3-115' y='191.334'/>
-<use x='197.517' xlink:href='#g3-116' y='191.334'/>
-<use x='200.575' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 74.992)'>
-<use x='168.285' xlink:href='#g3-115' y='191.334'/>
-<use x='171.531' xlink:href='#g3-104' y='191.334'/>
-<use x='175.904' xlink:href='#g3-54' y='191.334'/>
-<use x='180.138' xlink:href='#g3-98' y='191.334'/>
-<use x='184.746' xlink:href='#g3-101' y='191.334'/>
-<use x='188.509' xlink:href='#g3-110' y='191.334'/>
-<use x='192.882' xlink:href='#g3-99' y='191.334'/>
-<use x='196.646' xlink:href='#g3-104' y='191.334'/>
-<use x='201.018' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 74.992)'>
-<use x='168.285' xlink:href='#g3-115' y='191.334'/>
-<use x='171.531' xlink:href='#g3-104' y='191.334'/>
-<use x='175.904' xlink:href='#g3-56' y='191.334'/>
-<use x='180.138' xlink:href='#g3-98' y='191.334'/>
-<use x='184.746' xlink:href='#g3-101' y='191.334'/>
-<use x='188.509' xlink:href='#g3-110' y='191.334'/>
-<use x='192.882' xlink:href='#g3-99' y='191.334'/>
-<use x='196.646' xlink:href='#g3-104' y='191.334'/>
-<use x='201.018' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 74.992)'>
-<use x='168.285' xlink:href='#g3-120' y='191.334'/>
-<use x='172.187' xlink:href='#g3-109' y='191.334'/>
-<use x='178.912' xlink:href='#g3-97' y='191.334'/>
-<use x='182.98' xlink:href='#g3-108' y='191.334'/>
-<use x='185' xlink:href='#g3-108' y='191.334'/>
-<use x='187.02' xlink:href='#g3-111' y='191.334'/>
-<use x='191.49' xlink:href='#g3-99' y='191.334'/>
-<use x='195.254' xlink:href='#g3-45' y='191.334'/>
-<use x='198.076' xlink:href='#g3-116' y='191.334'/>
-<use x='201.134' xlink:href='#g3-101' y='191.334'/>
-<use x='204.898' xlink:href='#g3-115' y='191.334'/>
-<use x='208.144' xlink:href='#g3-116' y='191.334'/>
-<use x='211.202' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 74.992)'>
-<use x='168.285' xlink:href='#g3-99' y='191.334'/>
-<use x='172.049' xlink:href='#g3-97' y='191.334'/>
-<use x='176.117' xlink:href='#g3-99' y='191.334'/>
-<use x='179.88' xlink:href='#g3-104' y='191.334'/>
-<use x='184.253' xlink:href='#g3-101' y='191.334'/>
-<use x='188.017' xlink:href='#g3-45' y='191.334'/>
-<use x='190.839' xlink:href='#g3-115' y='191.334'/>
-<use x='194.086' xlink:href='#g3-99' y='191.334'/>
-<use x='197.849' xlink:href='#g3-114' y='191.334'/>
-<use x='200.741' xlink:href='#g3-97' y='191.334'/>
-<use x='204.81' xlink:href='#g3-116' y='191.334'/>
-<use x='207.868' xlink:href='#g3-99' y='191.334'/>
-<use x='211.631' xlink:href='#g3-104' y='191.334'/>
-<use x='216.004' xlink:href='#g3-78' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 62.23)'>
-<use x='168.285' xlink:href='#g2-48' y='191.334'/>
-<use x='170.931' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 28.677)'>
-<use x='168.285' xlink:href='#g2-48' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-53' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -4.876)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -38.43)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-53' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.983)'>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -105.536)'>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-53' y='191.334'/>
-<use x='175.048' xlink:href='#g2-120' y='191.334'/>
-</g>
-<path clip-path='url(#clip6)' d='M135.949 184.824H487.961' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M142.742 251.93H145.981V184.824H142.742ZM201.41 251.93H204.649V184.824H201.41ZM260.078 251.93H263.317V184.824H260.078ZM318.75 251.93H321.988V184.824H318.75ZM377.418 251.93H380.656V184.824H377.418ZM436.086 251.93H439.324V184.824H436.086Z' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M142.742 251.93H145.981V184.824H142.742ZM201.41 251.93H204.649V184.824H201.41ZM260.078 251.93H263.317V184.824H260.078ZM318.75 251.93H321.988V184.824H318.75ZM377.418 251.93H380.656V184.824H377.418ZM436.086 251.93H439.324V184.824H436.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M144.359 184.824V184.488' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M144.359 184.824V184.488' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M142.367 184.489H146.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M144.359 184.824V185.16' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M144.359 184.824V185.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M146.352 185.161H142.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M203.031 184.824V184.488' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M203.031 184.824V184.488' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M201.039 184.489H205.023' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M203.031 184.824V185.16' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M203.031 184.824V185.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M205.023 185.161H201.035' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M261.699 184.824V182.742' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M261.699 184.824V182.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M259.707 182.742H263.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M261.699 184.824V186.902' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M261.699 184.824V186.902' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M263.691 186.902H259.707' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M320.367 184.824V183.012' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M320.367 184.824V183.012' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M318.375 183.012H322.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M320.367 184.824V186.637' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M320.367 184.824V186.637' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M322.359 186.637H318.375' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M379.035 184.824V184.352' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M379.035 184.824V184.352' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M377.043 184.351H381.031' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M379.035 184.824V185.293' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M379.035 184.824V185.293' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M381.027 185.293H377.043' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M437.707 184.824V183.949' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M437.707 184.824V183.949' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M435.715 183.95H439.699' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M437.707 184.824V185.695' fill='#993333'/>
-<path clip-path='url(#clip6)' d='M437.707 184.824V185.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M439.699 185.695H435.711' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M147.973 251.93H151.211V184.285H147.973ZM206.641 251.93H209.879V179.926H206.641ZM265.309 251.93H268.547V98.523H265.309ZM323.981 251.93H327.219V84.164H323.981ZM382.649 251.93H385.887V84.164H382.649ZM441.317 251.93H444.555V84.164H441.317Z' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M147.973 251.93H151.211V184.285H147.973ZM206.641 251.93H209.879V179.926H206.641ZM265.309 251.93H268.547V98.523H265.309ZM323.981 251.93H327.219V84.164H323.981ZM382.649 251.93H385.887V84.164H382.649ZM441.317 251.93H444.555V84.164H441.317Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M149.59 184.285V183.949' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M149.59 184.285V183.949' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M147.598 183.95H151.586' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M149.59 184.285V184.621' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M149.59 184.285V184.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M151.582 184.621H147.597' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M208.262 179.926V179.523' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M208.262 179.926V179.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M206.27 179.524H210.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M208.262 179.926V180.328' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M208.262 179.926V180.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M210.253 180.328H206.265' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M266.93 98.523V94.902' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M266.93 98.523V94.902' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M264.938 94.902H268.922' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M266.93 98.523V102.148' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M266.93 98.523V102.148' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M268.921 102.148H264.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M325.598 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M323.606 84.164H327.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M325.598 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M323.606 84.164H327.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M384.266 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M382.274 84.164H386.262' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M384.266 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M382.274 84.164H386.262' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M442.938 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M440.946 84.164H444.93' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M442.938 84.164V84.164' fill='#8080bf'/>
-<path clip-path='url(#clip6)' d='M440.946 84.164H444.93' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M153.203 251.93H156.442V178.715H153.203ZM211.871 251.93H215.11V178.047H211.871ZM270.539 251.93H273.777V85.773H270.539ZM329.211 251.93H332.449V88.996H329.211ZM387.879 251.93H391.117V84.164H387.879ZM446.547 251.93H449.785V84.164H446.547Z' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M153.203 251.93H156.442V178.715H153.203ZM211.871 251.93H215.11V178.047H211.871ZM270.539 251.93H273.777V85.773H270.539ZM329.211 251.93H332.449V88.996H329.211ZM387.879 251.93H391.117V84.164H387.879ZM446.547 251.93H449.785V84.164H446.547Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M154.82 178.715V178.047' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M154.82 178.715V178.047' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M152.828 178.047H156.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M154.82 178.715V179.387' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M154.82 178.715V179.387' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M156.813 179.386H152.828' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M213.492 178.047V177.574' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M213.492 178.047V177.574' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M211.5 177.575H215.484' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M213.492 178.047V178.516' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M213.492 178.047V178.516' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M215.484 178.516H211.496' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M272.16 85.773V83.558' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M272.16 85.773V83.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M270.168 83.559H274.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M272.16 85.773V87.988' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M272.16 85.773V87.988' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M274.152 87.988H270.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M330.828 88.996V86.715' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M330.828 88.996V86.715' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M328.836 86.715H332.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M330.828 88.996V91.277' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M330.828 88.996V91.277' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M332.82 91.277H328.836' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M389.496 84.164V84.164' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M387.504 84.164H391.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M389.496 84.164V84.164' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M387.504 84.164H391.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M448.168 84.164V84.164' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M446.176 84.164H450.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M448.168 84.164V84.164' fill='#ffb733'/>
-<path clip-path='url(#clip6)' d='M446.176 84.164H450.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M158.434 251.93H161.672V155.164H158.434ZM217.102 251.93H220.34V156.305H217.102ZM275.77 251.93H279.008V84.164H275.77ZM334.442 251.93H337.68V84.164H334.442ZM393.109 251.93H396.348V131.609H393.109ZM451.777 251.93H455.016V183.949H451.777Z' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M158.434 251.93H161.672V155.164H158.434ZM217.102 251.93H220.34V156.305H217.102ZM275.77 251.93H279.008V84.164H275.77ZM334.442 251.93H337.68V84.164H334.442ZM393.109 251.93H396.348V131.609H393.109ZM451.777 251.93H455.016V183.949H451.777Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M160.051 155.164V154.758' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M160.051 155.164V154.758' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M158.058 154.758H162.046' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M160.051 155.164V155.566' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M160.051 155.164V155.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M162.043 155.567H158.058' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M218.723 156.305V156.102' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M218.723 156.305V156.102' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M216.73 156.102H220.714' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M218.723 156.305V156.504' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M218.723 156.305V156.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M220.714 156.504H216.726' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M277.391 84.164V84.164' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M275.398 84.164H279.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M277.391 84.164V84.164' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M275.398 84.164H279.382' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M336.059 84.164V84.164' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M334.066 84.164H338.05' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M336.059 84.164V84.164' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M334.066 84.164H338.05' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M394.727 131.609V131.406' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M394.727 131.609V131.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M392.734 131.407H396.722' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M394.727 131.609V131.808' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M394.727 131.609V131.808' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M396.718 131.808H392.734' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M453.399 183.949V182.809' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M453.399 183.949V182.809' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M451.406 182.809H455.39' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M453.399 183.949V185.09' fill='#bf80bf'/>
-<path clip-path='url(#clip6)' d='M453.399 183.949V185.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M455.39 185.089H451.402' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M163.664 251.93H166.903V180.664H163.664ZM222.332 251.93H225.57V183.078H222.332ZM281 251.93H284.238V174.355H281ZM339.672 251.93H342.91V183.144H339.672ZM398.34 251.93H401.578V198.914H398.34ZM457.008 251.93H460.246V184.555H457.008Z' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M163.664 251.93H166.903V180.664H163.664ZM222.332 251.93H225.57V183.078H222.332ZM281 251.93H284.238V174.355H281ZM339.672 251.93H342.91V183.144H339.672ZM398.34 251.93H401.578V198.914H398.34ZM457.008 251.93H460.246V184.555H457.008Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M165.281 180.664V180.461' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M165.281 180.664V180.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M163.289 180.461H167.277' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M165.281 180.664V180.863' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M165.281 180.664V180.863' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M167.274 180.864H163.289' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M223.953 183.078V182.809' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M223.953 183.078V182.809' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M221.961 182.809H225.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M223.953 183.078V183.348' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M223.953 183.078V183.348' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M225.945 183.348H221.957' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M282.621 174.355V174.355' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M280.629 174.355H284.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M282.621 174.355V174.355' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M280.629 174.355H284.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M341.289 183.144V182.473' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M341.289 183.144V182.473' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M339.297 182.472H343.281' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M341.289 183.144V183.816' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M341.289 183.144V183.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M343.281 183.816H339.297' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M399.957 198.914V197.977' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M399.957 198.914V197.977' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M397.965 197.977H401.953' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M399.957 198.914V199.855' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M399.957 198.914V199.855' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M401.949 199.856H397.965' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M458.629 184.555V184.555' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M456.637 184.555H460.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M458.629 184.555V184.555' fill='#dfbf9f'/>
-<path clip-path='url(#clip6)' d='M456.637 184.555H460.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M168.895 251.93H172.133V173.684H168.895ZM227.563 251.93H230.801V84.164H227.563ZM286.231 251.93H289.469V84.164H286.231ZM344.902 251.93H348.141V84.164H344.902ZM403.57 251.93H406.809V84.164H403.57ZM462.238 251.93H465.477V84.164H462.238Z' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M168.895 251.93H172.133V173.684H168.895ZM227.563 251.93H230.801V84.164H227.563ZM286.231 251.93H289.469V84.164H286.231ZM344.902 251.93H348.141V84.164H344.902ZM403.57 251.93H406.809V84.164H403.57ZM462.238 251.93H465.477V84.164H462.238Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M170.512 173.684V173.348' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M170.512 173.684V173.348' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M168.519 173.348H172.507' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M170.512 173.684V174.019' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M170.512 173.684V174.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M172.504 174.02H168.519' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M229.184 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M227.191 84.164H231.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M229.184 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M227.191 84.164H231.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M287.852 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M285.859 84.164H289.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M287.852 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M285.859 84.164H289.843' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M346.52 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M344.527 84.164H348.511' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M346.52 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M344.527 84.164H348.511' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M405.188 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M403.195 84.164H407.183' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M405.188 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M403.195 84.164H407.183' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M463.859 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M461.867 84.164H465.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M463.859 84.164V84.164' fill='#80bf80'/>
-<path clip-path='url(#clip6)' d='M461.867 84.164H465.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M174.125 251.93H177.363V147.109H174.125ZM232.793 251.93H236.031V139.93H232.793ZM291.461 251.93H294.699V84.164H291.461ZM350.133 251.93H353.371V245.219H350.133ZM408.801 251.93H412.039V245.219H408.801ZM467.469 251.93H470.707V183.144H467.469Z' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M174.125 251.93H177.363V147.109H174.125ZM232.793 251.93H236.031V139.93H232.793ZM291.461 251.93H294.699V84.164H291.461ZM350.133 251.93H353.371V245.219H350.133ZM408.801 251.93H412.039V245.219H408.801ZM467.469 251.93H470.707V183.144H467.469Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M175.742 147.109V144.289' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M175.742 147.109V144.289' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M173.75 144.289H177.738' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M175.742 147.109V149.93' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M175.742 147.109V149.93' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M177.735 149.93H173.75' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M234.414 139.93V130.937' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M234.414 139.93V130.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M232.422 130.938H236.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M234.414 139.93V148.922' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M234.414 139.93V148.922' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M236.403 148.922H232.418' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M293.082 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M291.09 84.164H295.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M293.082 84.164V84.164' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M291.09 84.164H295.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M351.75 245.219V245.219' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M349.758 245.219H353.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M351.75 245.219V245.219' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M349.758 245.219H353.742' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M410.418 245.219V245.219' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M408.426 245.219H412.414' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M410.418 245.219V245.219' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M408.426 245.219H412.414' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M469.09 183.144V181.734' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M469.09 183.144V181.734' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M467.098 181.734H471.082' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M469.09 183.144V184.555' fill='#bfbf80'/>
-<path clip-path='url(#clip6)' d='M469.09 183.144V184.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M471.082 184.555H467.094' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M179.356 251.93H182.594V169.254H179.356ZM238.024 251.93H241.262V169.387H238.024ZM296.692 251.93H299.93V84.164H296.692ZM355.363 251.93H358.602V84.164H355.363ZM414.031 251.93H417.27V84.164H414.031ZM472.699 251.93H475.938V84.164H472.699Z' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M179.356 251.93H182.594V169.254H179.356ZM238.024 251.93H241.262V169.387H238.024ZM296.692 251.93H299.93V84.164H296.692ZM355.363 251.93H358.602V84.164H355.363ZM414.031 251.93H417.27V84.164H414.031ZM472.699 251.93H475.938V84.164H472.699Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M180.973 169.254V168.719' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M180.973 169.254V168.719' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M178.98 168.719H182.968' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M180.973 169.254V169.793' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M180.973 169.254V169.793' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M182.965 169.793H178.98' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M239.645 169.387V169.187' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M239.645 169.387V169.187' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M237.652 169.187H241.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M239.645 169.387V169.59' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M239.645 169.387V169.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M241.633 169.59H237.648' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M298.313 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M296.32 84.164H300.304' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M298.313 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M296.32 84.164H300.304' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M356.981 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M354.988 84.164H358.972' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M356.981 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M354.988 84.164H358.972' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M415.649 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M413.656 84.164H417.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M415.649 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M413.656 84.164H417.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M474.32 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M472.328 84.164H476.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M474.32 84.164V84.164' fill='#339999'/>
-<path clip-path='url(#clip6)' d='M472.328 84.164H476.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M184.586 251.93H187.824V180.328H184.586ZM243.254 251.93H246.492V179.59H243.254ZM301.922 251.93H305.16V84.164H301.922ZM360.594 251.93H363.832V107.516H360.594ZM419.262 251.93H422.5V175.43H419.262ZM477.93 251.93H481.168V182.406H477.93Z' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M184.586 251.93H187.824V180.328H184.586ZM243.254 251.93H246.492V179.59H243.254ZM301.922 251.93H305.16V84.164H301.922ZM360.594 251.93H363.832V107.516H360.594ZM419.262 251.93H422.5V175.43H419.262ZM477.93 251.93H481.168V182.406H477.93Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M186.203 180.328V179.992' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M186.203 180.328V179.992' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M184.211 179.992H188.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M186.203 180.328V180.664' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M186.203 180.328V180.664' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M188.196 180.664H184.211' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M244.875 179.59V179.187' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M244.875 179.59V179.187' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M242.883 179.187H246.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M244.875 179.59V179.992' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M244.875 179.59V179.992' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M246.864 179.992H242.879' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M303.543 84.164V84.164' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M301.551 84.164H305.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M303.543 84.164V84.164' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M301.551 84.164H305.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M362.211 107.516V104.094' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M362.211 107.516V104.094' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M360.219 104.093H364.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M362.211 107.516V110.937' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M362.211 107.516V110.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M364.203 110.937H360.219' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M420.879 175.43V175.16' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M420.879 175.43V175.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M418.887 175.16H422.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M420.879 175.43V175.695' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M420.879 175.43V175.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M422.871 175.696H418.887' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M479.551 182.406V181.199' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M479.551 182.406V181.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M477.559 181.199H481.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M479.551 182.406V183.613' fill='#bf8080'/>
-<path clip-path='url(#clip6)' d='M479.551 182.406V183.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M481.543 183.613H477.555' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M420.539 312.98H487.762V278.973H420.539Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 255.575 118.327)'>
-<use x='168.285' xlink:href='#g2-114' y='167.424'/>
-<use x='170.092' xlink:href='#g2-53' y='167.424'/>
-<use x='172.739' xlink:href='#g2-97' y='167.424'/>
-<use x='175.281' xlink:href='#g2-45' y='167.424'/>
-<use x='177.046' xlink:href='#g2-49' y='167.424'/>
-<use x='179.692' xlink:href='#g2-50' y='167.424'/>
-<use x='182.338' xlink:href='#g2-120' y='167.424'/>
-<use x='184.777' xlink:href='#g2-108' y='167.424'/>
-<use x='186.04' xlink:href='#g2-97' y='167.424'/>
-<use x='188.435' xlink:href='#g2-114' y='167.424'/>
-<use x='190.243' xlink:href='#g2-103' y='167.424'/>
-<use x='192.889' xlink:href='#g2-101' y='167.424'/>
-<use x='195.241' xlink:href='#g2-44' y='167.424'/>
-<use x='198.476' xlink:href='#g2-51' y='167.424'/>
-<use x='201.122' xlink:href='#g2-56' y='167.424'/>
-<use x='203.769' xlink:href='#g2-52' y='167.424'/>
-<use x='206.415' xlink:href='#g2-71' y='167.424'/>
-<use x='209.943' xlink:href='#g2-98' y='167.424'/>
-<use x='168.285' xlink:href='#g2-52' y='173.401'/>
-<use x='170.931' xlink:href='#g2-56' y='173.401'/>
-<use x='175.342' xlink:href='#g2-112' y='173.401'/>
-<use x='177.928' xlink:href='#g2-114' y='173.401'/>
-<use x='179.735' xlink:href='#g2-111' y='173.401'/>
-<use x='182.529' xlink:href='#g2-99' y='173.401'/>
-<use x='186.645' xlink:href='#g2-65' y='173.401'/>
-<use x='190.174' xlink:href='#g2-77' y='173.401'/>
-<use x='194.792' xlink:href='#g2-68' y='173.401'/>
-<use x='200.378' xlink:href='#g2-64' y='173.401'/>
-<use x='203.907' xlink:href='#g2-50' y='173.401'/>
-<use x='206.553' xlink:href='#g2-46' y='173.401'/>
-<use x='208.024' xlink:href='#g2-53' y='173.401'/>
-<use x='210.67' xlink:href='#g2-71' y='173.401'/>
-<use x='214.198' xlink:href='#g2-104' y='173.401'/>
-<use x='216.931' xlink:href='#g2-122' y='173.401'/>
-<use x='168.285' xlink:href='#g2-85' y='179.379'/>
-<use x='171.917' xlink:href='#g2-98' y='179.379'/>
-<use x='174.65' xlink:href='#g2-117' y='179.379'/>
-<use x='177.383' xlink:href='#g2-110' y='179.379'/>
-<use x='180.116' xlink:href='#g2-116' y='179.379'/>
-<use x='182.027' xlink:href='#g2-117' y='179.379'/>
-<use x='186.524' xlink:href='#g2-49' y='179.379'/>
-<use x='189.17' xlink:href='#g2-56' y='179.379'/>
-<use x='191.817' xlink:href='#g2-46' y='179.379'/>
-<use x='193.287' xlink:href='#g2-48' y='179.379'/>
-<use x='195.933' xlink:href='#g2-52' y='179.379'/>
-<use x='198.58' xlink:href='#g2-46' y='179.379'/>
-<use x='200.05' xlink:href='#g2-49' y='179.379'/>
-<use x='202.696' xlink:href='#g2-44' y='179.379'/>
-<use x='205.931' xlink:href='#g2-71' y='179.379'/>
-<use x='209.459' xlink:href='#g2-67' y='179.379'/>
-<use x='212.841' xlink:href='#g2-67' y='179.379'/>
-<use x='217.986' xlink:href='#g2-55' y='179.379'/>
-<use x='220.633' xlink:href='#g2-46' y='179.379'/>
-<use x='222.103' xlink:href='#g2-52' y='179.379'/>
-<use x='224.749' xlink:href='#g2-46' y='179.379'/>
-<use x='226.219' xlink:href='#g2-48' y='179.379'/>
-<use x='168.285' xlink:href='#g2-50' y='185.357'/>
-<use x='170.931' xlink:href='#g2-52' y='185.357'/>
-<use x='175.342' xlink:href='#g2-99' y='185.357'/>
-<use x='177.694' xlink:href='#g2-111' y='185.357'/>
-<use x='180.193' xlink:href='#g2-114' y='185.357'/>
-<use x='182.001' xlink:href='#g2-101' y='185.357'/>
-<use x='184.353' xlink:href='#g2-115' y='185.357'/>
-<use x='188.146' xlink:href='#g2-111' y='185.357'/>
-<use x='190.793' xlink:href='#g2-110' y='185.357'/>
-<use x='195.29' xlink:href='#g2-51' y='185.357'/>
-<use x='199.7' xlink:href='#g2-110' y='185.357'/>
-<use x='202.433' xlink:href='#g2-117' y='185.357'/>
-<use x='205.166' xlink:href='#g2-109' y='185.357'/>
-<use x='209.369' xlink:href='#g2-97' y='185.357'/>
-<use x='213.676' xlink:href='#g2-110' y='185.357'/>
-<use x='216.409' xlink:href='#g2-111' y='185.357'/>
-<use x='219.202' xlink:href='#g2-100' y='185.357'/>
-<use x='221.935' xlink:href='#g2-101' y='185.357'/>
-<use x='224.287' xlink:href='#g2-115' y='185.357'/>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-48' y='191.334'/>
-<use x='173.578' xlink:href='#g2-50' y='191.334'/>
-<use x='176.224' xlink:href='#g2-48' y='191.334'/>
-<use x='178.87' xlink:href='#g2-45' y='191.334'/>
-<use x='180.635' xlink:href='#g2-48' y='191.334'/>
-<use x='183.281' xlink:href='#g2-49' y='191.334'/>
-<use x='185.927' xlink:href='#g2-45' y='191.334'/>
-<use x='187.692' xlink:href='#g2-49' y='191.334'/>
-<use x='190.338' xlink:href='#g2-54' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -45.339 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 13.33 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 71.999 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 130.668 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 189.337 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 248.006 346.904)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -40.108 346.367)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-49' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 18.561 342.005)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-55' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 77.23 260.606)'>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-50' y='191.334'/>
-<use x='175.048' xlink:href='#g2-57' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 135.899 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-53' y='191.334'/>
-<use x='176.558' xlink:href='#g2-54' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-54' y='191.334'/>
-<use x='183.321' xlink:href='#g2-52' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 194.568 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-49' y='191.334'/>
-<use x='176.558' xlink:href='#g2-55' y='191.334'/>
-<use x='179.205' xlink:href='#g2-50' y='191.334'/>
-<use x='181.851' xlink:href='#g2-46' y='191.334'/>
-<use x='183.321' xlink:href='#g2-48' y='191.334'/>
-<use x='185.968' xlink:href='#g2-51' y='191.334'/>
-<use x='188.614' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 253.236 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-49' y='191.334'/>
-<use x='176.558' xlink:href='#g2-55' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-50' y='191.334'/>
-<use x='183.321' xlink:href='#g2-57' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -34.878 340.797)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-57' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 23.791 340.126)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 82.46 247.855)'>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-52' y='191.334'/>
-<use x='175.048' xlink:href='#g2-56' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 141.129 251.077)'>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-52' y='191.334'/>
-<use x='175.048' xlink:href='#g2-51' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 199.798 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-52' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-55' y='191.334'/>
-<use x='180.675' xlink:href='#g2-55' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 258.467 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-49' y='191.334'/>
-<use x='176.558' xlink:href='#g2-55' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-49' y='191.334'/>
-<use x='183.321' xlink:href='#g2-48' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -29.648 317.243)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-52' y='191.334'/>
-<use x='175.048' xlink:href='#g2-52' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 29.021 318.384)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-52' y='191.334'/>
-<use x='175.048' xlink:href='#g2-50' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 87.69 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-52' y='191.334'/>
-<use x='180.675' xlink:href='#g2-56' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 146.359 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-57' y='191.334'/>
-<use x='180.675' xlink:href='#g2-51' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 205.028 293.689)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-55' y='191.334'/>
-<use x='175.048' xlink:href='#g2-57' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 263.697 346.032)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-49' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -24.417 342.743)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-54' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 34.252 345.159)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-51' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.921 336.435)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-54' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 151.59 345.226)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-50' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 210.259 360.996)'>
-<use x='168.285' xlink:href='#g2-48' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-55' y='191.334'/>
-<use x='175.048' xlink:href='#g2-57' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 268.928 346.636)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-48' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -19.187 335.764)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-55' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 39.482 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-53' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-51' y='191.334'/>
-<use x='180.675' xlink:href='#g2-53' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 98.151 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-49' y='191.334'/>
-<use x='176.558' xlink:href='#g2-51' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-57' y='191.334'/>
-<use x='183.321' xlink:href='#g2-50' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 156.82 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-53' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-54' y='191.334'/>
-<use x='180.675' xlink:href='#g2-48' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 215.489 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-55' y='191.334'/>
-<use x='176.558' xlink:href='#g2-49' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-54' y='191.334'/>
-<use x='183.321' xlink:href='#g2-57' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 274.158 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-53' y='191.334'/>
-<use x='180.675' xlink:href='#g2-54' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -13.956 309.19)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-53' y='191.334'/>
-<use x='175.048' xlink:href='#g2-54' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 44.713 302.01)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-54' y='191.334'/>
-<use x='175.048' xlink:href='#g2-55' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 103.382 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-49' y='191.334'/>
-<use x='176.558' xlink:href='#g2-51' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-51' y='191.334'/>
-<use x='183.321' xlink:href='#g2-55' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 161.523 407.299)'>
-<use x='168.285' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 220.192 407.299)'>
-<use x='168.285' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 279.389 345.226)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-51' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -8.726 331.335)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-50' y='191.334'/>
-<use x='175.048' xlink:href='#g2-51' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.943 331.47)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-50' y='191.334'/>
-<use x='175.048' xlink:href='#g2-51' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 108.612 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-49' y='191.334'/>
-<use x='176.558' xlink:href='#g2-55' y='191.334'/>
-<use x='179.205' xlink:href='#g2-46' y='191.334'/>
-<use x='180.675' xlink:href='#g2-55' y='191.334'/>
-<use x='183.321' xlink:href='#g2-52' y='191.334'/>
-<use x='185.968' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 167.281 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-52' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-57' y='191.334'/>
-<use x='180.675' xlink:href='#g2-57' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.95 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-53' y='191.334'/>
-<use x='180.675' xlink:href='#g2-53' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 284.619 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-53' y='191.334'/>
-<use x='180.675' xlink:href='#g2-57' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -3.495 342.408)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-55' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 55.174 341.67)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-56' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.843 246.245)'>
-<use x='163.396' xlink:href='#g4-1' y='191.334'/>
-<use x='166.901' xlink:href='#g4-1' y='191.334'/>
-<use x='170.407' xlink:href='#g4-1' y='191.334'/>
-<use x='173.912' xlink:href='#g2-51' y='191.334'/>
-<use x='176.558' xlink:href='#g2-46' y='191.334'/>
-<use x='178.029' xlink:href='#g2-50' y='191.334'/>
-<use x='180.675' xlink:href='#g2-48' y='191.334'/>
-<use x='183.321' xlink:href='#g2-120' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 172.512 269.598)'>
-<use x='168.285' xlink:href='#g2-50' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-53' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 231.181 337.509)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-49' y='191.334'/>
-<use x='175.048' xlink:href='#g2-52' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 289.85 344.488)'>
-<use x='168.285' xlink:href='#g2-49' y='191.334'/>
-<use x='170.931' xlink:href='#g2-46' y='191.334'/>
-<use x='172.401' xlink:href='#g2-48' y='191.334'/>
-<use x='175.048' xlink:href='#g2-52' y='191.334'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.176 391.591)'>
-<use x='168.285' xlink:href='#g1-82' y='191.334'/>
-<use x='174.255' xlink:href='#g1-101' y='191.334'/>
-<use x='178.351' xlink:href='#g1-108' y='191.334'/>
-<use x='180.551' xlink:href='#g1-97' y='191.334'/>
-<use x='184.979' xlink:href='#g1-116' y='191.334'/>
-<use x='188.307' xlink:href='#g1-105' y='191.334'/>
-<use x='190.507' xlink:href='#g1-118' y='191.334'/>
-<use x='194.755' xlink:href='#g1-101' y='191.334'/>
-<use x='201.922' xlink:href='#g1-116' y='191.334'/>
-<use x='205.25' xlink:href='#g1-105' y='191.334'/>
-<use x='207.45' xlink:href='#g1-109' y='191.334'/>
-<use x='214.77' xlink:href='#g1-101' y='191.334'/>
-<use x='221.937' xlink:href='#g3-40' y='191.334'/>
-<use x='225.231' xlink:href='#g3-108' y='191.334'/>
-<use x='227.251' xlink:href='#g3-111' y='191.334'/>
-<use x='231.25' xlink:href='#g3-119' y='191.334'/>
-<use x='236.799' xlink:href='#g3-101' y='191.334'/>
-<use x='240.562' xlink:href='#g3-114' y='191.334'/>
-<use x='246.277' xlink:href='#g3-105' y='191.334'/>
-<use x='248.297' xlink:href='#g3-115' y='191.334'/>
-<use x='254.366' xlink:href='#g3-98' y='191.334'/>
-<use x='258.974' xlink:href='#g3-101' y='191.334'/>
-<use x='262.738' xlink:href='#g3-116' y='191.334'/>
-<use x='265.796' xlink:href='#g3-116' y='191.334'/>
-<use x='268.854' xlink:href='#g3-101' y='191.334'/>
-<use x='272.618' xlink:href='#g3-114' y='191.334'/>
-<use x='275.51' xlink:href='#g3-41' y='191.334'/>
-</g>
-<path d='M136.149 312.324H341.363V282.324H136.149Z' fill='#ffffff'/>
-<path d='M136.149 312.324H341.363V282.324H136.149Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path d='M139.336 292.816H142.324V284.844H139.336ZM145.313 292.816H148.301V286.836H145.313Z' fill='#993333'/>
-<path d='M139.336 292.816H142.324V284.844H139.336ZM145.313 292.816H148.301V286.836H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -40.354 114.479)'>
-<use x='195.372' xlink:href='#g3-120' y='178.327'/>
-<use x='199.274' xlink:href='#g3-109' y='178.327'/>
-<use x='205.999' xlink:href='#g3-105' y='178.327'/>
-<use x='208.019' xlink:href='#g3-58' y='178.327'/>
-<use x='210.371' xlink:href='#g0-57' y='178.327'/>
-<use x='214.076' xlink:href='#g0-57' y='178.327'/>
-</g>
-<path d='M184.145 292.816H187.133V284.844H184.145ZM190.121 292.816H193.109V286.836H190.121Z' fill='#8080bf'/>
-<path d='M184.145 292.816H187.133V284.844H184.145ZM190.121 292.816H193.109V286.836H190.121Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.441 114.036)'>
-<use x='239.382' xlink:href='#g3-116' y='178.327'/>
-<use x='242.44' xlink:href='#g3-99' y='178.327'/>
-<use x='246.204' xlink:href='#g3-58' y='178.327'/>
-<use x='248.556' xlink:href='#g0-53' y='178.327'/>
-<use x='252.261' xlink:href='#g0-54' y='178.327'/>
-</g>
-<path d='M227.356 292.816H230.344V284.844H227.356ZM233.332 292.816H236.32V286.836H233.332Z' fill='#ffb733'/>
-<path d='M227.356 292.816H230.344V284.844H227.356ZM233.332 292.816H236.32V286.836H233.332Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.04 114.479)'>
-<use x='281.863' xlink:href='#g3-106' y='178.327'/>
-<use x='284.119' xlink:href='#g3-101' y='178.327'/>
-<use x='287.882' xlink:href='#g3-58' y='178.327'/>
-<use x='290.235' xlink:href='#g0-53' y='178.327'/>
-<use x='293.94' xlink:href='#g0-50' y='178.327'/>
-</g>
-<path d='M269.106 292.816H272.094V284.844H269.106ZM275.086 292.816H278.074V286.836H275.086Z' fill='#bf80bf'/>
-<path d='M269.106 292.816H272.094V284.844H269.106ZM275.086 292.816H278.074V286.836H275.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -39.932 114.515)'>
-<use x='321.287' xlink:href='#g3-116' y='178.327'/>
-<use x='324.345' xlink:href='#g3-98' y='178.327'/>
-<use x='328.717' xlink:href='#g3-98' y='178.327'/>
-<use x='333.09' xlink:href='#g3-58' y='178.327'/>
-<use x='335.442' xlink:href='#g0-53' y='178.327'/>
-<use x='339.147' xlink:href='#g0-51' y='178.327'/>
-</g>
-<path d='M306.203 292.816H309.191V284.844H306.203ZM312.18 292.816H315.168V286.836H312.18Z' fill='#dfbf9f'/>
-<path d='M306.203 292.816H309.191V284.844H306.203ZM312.18 292.816H315.168V286.836H312.18Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.662 114.036)'>
-<use x='356.019' xlink:href='#g3-114' y='178.327'/>
-<use x='358.911' xlink:href='#g3-112' y='178.327'/>
-<use x='363.284' xlink:href='#g3-58' y='178.327'/>
-<use x='365.636' xlink:href='#g0-56' y='178.327'/>
-<use x='369.341' xlink:href='#g0-54' y='178.327'/>
-</g>
-<path d='M139.336 305.82H142.324V297.852H139.336ZM145.313 305.82H148.301V299.844H145.313Z' fill='#80bf80'/>
-<path d='M139.336 305.82H142.324V297.852H139.336ZM145.313 305.82H148.301V299.844H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -43.882 114.515)'>
-<use x='195.372' xlink:href='#g3-104' y='191.334'/>
-<use x='199.744' xlink:href='#g3-111' y='191.334'/>
-<use x='203.978' xlink:href='#g3-97' y='191.334'/>
-<use x='207.811' xlink:href='#g3-114' y='191.334'/>
-<use x='210.703' xlink:href='#g3-100' y='191.334'/>
-<use x='215.076' xlink:href='#g3-58' y='191.334'/>
-<use x='217.428' xlink:href='#g0-51' y='191.334'/>
-<use x='221.133' xlink:href='#g0-51' y='191.334'/>
-</g>
-<path d='M184.145 305.82H187.133V297.852H184.145ZM190.121 305.82H193.109V299.844H190.121Z' fill='#bfbf80'/>
-<path d='M184.145 305.82H187.133V297.852H184.145ZM190.121 305.82H193.109V299.844H190.121Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -43.084 114.515)'>
-<use x='239.382' xlink:href='#g3-109' y='191.334'/>
-<use x='246.107' xlink:href='#g3-101' y='191.334'/>
-<use x='249.871' xlink:href='#g3-115' y='191.334'/>
-<use x='253.117' xlink:href='#g3-104' y='191.334'/>
-<use x='257.489' xlink:href='#g3-58' y='191.334'/>
-<use x='259.842' xlink:href='#g0-51' y='191.334'/>
-<use x='263.547' xlink:href='#g0-52' y='191.334'/>
-</g>
-<path d='M227.356 305.82H230.344V297.852H227.356ZM233.332 305.82H236.32V299.844H233.332Z' fill='#339999'/>
-<path d='M227.356 305.82H230.344V297.852H227.356ZM233.332 305.82H236.32V299.844H233.332Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -42.353 114.515)'>
-<use x='281.863' xlink:href='#g3-103' y='191.334'/>
-<use x='286.097' xlink:href='#g3-108' y='191.334'/>
-<use x='288.118' xlink:href='#g3-105' y='191.334'/>
-<use x='290.138' xlink:href='#g3-98' y='191.334'/>
-<use x='294.746' xlink:href='#g3-99' y='191.334'/>
-<use x='298.509' xlink:href='#g3-58' y='191.334'/>
-<use x='300.862' xlink:href='#g0-52' y='191.334'/>
-<use x='304.567' xlink:href='#g0-51' y='191.334'/>
-</g>
-<path d='M269.106 305.82H272.094V297.852H269.106ZM275.086 305.82H278.074V299.844H275.086Z' fill='#bf8080'/>
-<path d='M269.106 305.82H272.094V297.852H269.106ZM275.086 305.82H278.074V299.844H275.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -40.026 114.479)'>
-<use x='321.287' xlink:href='#g3-115' y='191.334'/>
-<use x='324.533' xlink:href='#g3-109' y='191.334'/>
-<use x='331.258' xlink:href='#g3-105' y='191.334'/>
-<use x='333.278' xlink:href='#g3-58' y='191.334'/>
-<use x='335.63' xlink:href='#g0-54' y='191.334'/>
-<use x='339.335' xlink:href='#g0-57' y='191.334'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-2.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-2.svg
deleted file mode 100644
index 917ea57..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-2.svg
+++ /dev/null
@@ -1,983 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='243.704pt' version='1.1' viewBox='106.737 54.995 381.623 243.704' width='381.623pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip2'>
-<path d='M135.949 249.281H487.961V81.515H135.949Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-45' transform='scale(1.6)' xlink:href='#g1-45'/>
-<use id='g2-49' transform='scale(1.6)' xlink:href='#g1-49'/>
-<use id='g2-54' transform='scale(1.6)' xlink:href='#g1-54'/>
-<use id='g2-56' transform='scale(1.6)' xlink:href='#g1-56'/>
-<use id='g2-78' transform='scale(1.6)' xlink:href='#g1-78'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-103' transform='scale(1.6)' xlink:href='#g1-103'/>
-<use id='g2-104' transform='scale(1.6)' xlink:href='#g1-104'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-106' transform='scale(1.6)' xlink:href='#g1-106'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-109' transform='scale(1.6)' xlink:href='#g1-109'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<use id='g2-120' transform='scale(1.6)' xlink:href='#g1-120'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.005V-0.448H0.508V0H0.648L0.503 0.638H0.727L0.956 -0.005Z' id='g1-44'/>
-<path d='M1.465 -0.951V-1.265H0.06V-0.951H1.465Z' id='g1-45'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M2.959 -0.438C2.884 -0.438 2.874 -0.438 2.834 -0.418C2.59 -0.334 2.336 -0.279 2.072 -0.279C1.27 -0.279 0.697 -0.956 0.697 -1.729C0.697 -2.565 1.345 -3.178 2.042 -3.178C2.182 -3.178 2.511 -3.143 2.675 -2.745C2.535 -2.824 2.381 -2.859 2.252 -2.859C1.719 -2.859 1.27 -2.361 1.27 -1.729C1.27 -1.081 1.733 -0.598 2.247 -0.598C2.635 -0.598 3.228 -0.912 3.228 -1.798C3.228 -2.301 3.193 -3.507 2.047 -3.507C1.101 -3.507 0.294 -2.725 0.294 -1.729C0.294 -0.742 1.091 0.05 2.052 0.05C2.511 0.05 2.939 -0.139 3.228 -0.438H2.959ZM2.252 -0.927C1.943 -0.927 1.674 -1.27 1.674 -1.729C1.674 -2.202 1.953 -2.531 2.247 -2.531C2.555 -2.531 2.824 -2.187 2.824 -1.729C2.824 -1.255 2.545 -0.927 2.252 -0.927Z' id='g1-64'/>
-<path d='M2.002 -3.457H1.519L0.149 0H0.558L0.946 -0.986H2.461L2.849 0H3.372L2.002 -3.457ZM1.709 -3.078L2.336 -1.28H1.071L1.709 -3.078Z' id='g1-65'/>
-<path d='M3.083 -0.608C2.735 -0.394 2.575 -0.299 2.077 -0.299C1.305 -0.299 0.837 -1.021 0.837 -1.738C0.837 -2.476 1.35 -3.168 2.077 -3.168C2.406 -3.168 2.745 -3.064 2.974 -2.889L3.054 -3.342C2.705 -3.472 2.426 -3.512 2.062 -3.512C1.076 -3.512 0.339 -2.695 0.339 -1.733C0.339 -0.707 1.121 0.05 2.092 0.05C2.58 0.05 2.785 -0.05 3.113 -0.229L3.083 -0.608Z' id='g1-67'/>
-<path d='M0.488 -3.457V0H1.903C2.8 0 3.522 -0.757 3.522 -1.699C3.522 -2.675 2.795 -3.457 1.903 -3.457H0.488ZM0.976 -0.294V-3.163H1.768C2.451 -3.163 3.034 -2.62 3.034 -1.704C3.034 -0.777 2.426 -0.294 1.768 -0.294H0.976Z' id='g1-68'/>
-<path d='M2.725 -1.624V-1.953H0.986V-3.098H1.714C1.773 -3.098 1.833 -3.093 1.893 -3.093H2.874V-3.442H0.483V0H2.949V-0.389H2.501C2.082 -0.389 1.664 -0.379 1.245 -0.379H0.986V-1.624H2.725Z' id='g1-69'/>
-<path d='M3.173 -1.489H2.057V-1.161H2.735V-0.399C2.516 -0.344 2.301 -0.299 2.077 -0.299C1.31 -0.299 0.837 -1.021 0.837 -1.733C0.837 -2.416 1.3 -3.168 2.052 -3.168C2.511 -3.168 2.8 -3.029 3.049 -2.819L3.128 -3.273C2.785 -3.437 2.481 -3.517 2.102 -3.517C1.096 -3.517 0.339 -2.73 0.339 -1.733C0.339 -0.762 1.091 0.05 2.072 0.05C2.431 0.05 2.854 -0.03 3.173 -0.194V-1.489Z' id='g1-71'/>
-<path d='M2.775 -1.729C2.715 -1.579 2.356 -0.702 2.306 -0.493H2.301C2.267 -0.638 2.037 -1.21 1.988 -1.34L1.131 -3.457H0.523V0H0.941V-3.059H0.946C0.986 -2.884 1.245 -2.227 1.27 -2.172L2.102 -0.105H2.496L3.238 -1.938C3.238 -1.943 3.582 -2.79 3.666 -3.064H3.671V0H4.09V-3.457H3.477L2.775 -1.729Z' id='g1-77'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M3.143 -3.457H2.71V-1.161C2.71 -0.493 2.262 -0.189 1.833 -0.189S0.986 -0.498 0.986 -1.156V-3.457H0.483V-1.166C0.483 -0.433 1.111 0.105 1.828 0.105C2.54 0.105 3.143 -0.438 3.143 -1.166V-3.457Z' id='g1-85'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M2.506 -2.262C2.396 -2.262 2.062 -2.257 1.684 -2.112L1.674 -2.107C1.494 -2.227 1.32 -2.262 1.176 -2.262C0.687 -2.262 0.324 -1.878 0.324 -1.45C0.324 -1.275 0.384 -1.096 0.498 -0.956C0.428 -0.872 0.354 -0.732 0.354 -0.543C0.354 -0.349 0.433 -0.224 0.478 -0.164C0.204 -0.005 0.149 0.224 0.149 0.344C0.149 0.722 0.672 1.021 1.32 1.021C1.973 1.021 2.491 0.722 2.491 0.344C2.491 -0.359 1.619 -0.359 1.405 -0.359H0.941C0.862 -0.359 0.648 -0.359 0.648 -0.618C0.648 -0.717 0.682 -0.767 0.687 -0.777C0.862 -0.667 1.036 -0.633 1.171 -0.633C1.659 -0.633 2.022 -1.016 2.022 -1.445C2.022 -1.604 1.978 -1.748 1.888 -1.883C1.868 -1.913 1.868 -1.918 1.868 -1.923C1.868 -1.943 2.167 -1.943 2.192 -1.943C2.197 -1.943 2.386 -1.943 2.565 -1.923L2.506 -2.262ZM1.176 -0.941C0.907 -0.941 0.707 -1.111 0.707 -1.445C0.707 -1.833 0.956 -1.953 1.171 -1.953C1.44 -1.953 1.639 -1.783 1.639 -1.45C1.639 -1.061 1.39 -0.941 1.176 -0.941ZM1.41 0.03C1.524 0.03 2.112 0.03 2.112 0.349C2.112 0.563 1.738 0.712 1.32 0.712S0.528 0.563 0.528 0.349C0.528 0.324 0.528 0.03 0.932 0.03H1.41Z' id='g1-103'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.161 -2.262 0.932 -2.012 0.832 -1.908V-3.457H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-104'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.986 -3.417H0.483V-2.914H0.986V-3.417ZM-0.324 0.847C-0.095 0.971 0.13 1.016 0.319 1.016C0.663 1.016 0.986 0.752 0.986 0.294V-2.212H0.568V0.329C0.568 0.418 0.568 0.498 0.463 0.583C0.349 0.667 0.209 0.667 0.164 0.667C-0.045 0.667 -0.174 0.573 -0.234 0.518L-0.324 0.847Z' id='g1-106'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M3.786 -1.474C3.786 -1.863 3.671 -2.262 3.059 -2.262C2.64 -2.262 2.381 -2.017 2.262 -1.858C2.212 -1.993 2.087 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.21C2.316 -1.539 2.456 -1.933 2.839 -1.933C3.352 -1.933 3.352 -1.584 3.352 -1.44V0H3.786V-1.474Z' id='g1-109'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M2.316 -2.212H1.883V-0.767C1.883 -0.369 1.544 -0.244 1.255 -0.244C0.887 -0.244 0.847 -0.344 0.847 -0.573V-2.212H0.413V-0.543C0.413 -0.1 0.608 0.05 0.956 0.05C1.161 0.05 1.599 0.01 1.898 -0.229V0H2.316V-2.212Z' id='g1-117'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M2.361 -2.212H1.958C1.554 -1.26 1.275 -0.618 1.255 -0.314C1.245 -0.453 1.156 -0.702 1.066 -0.936C0.986 -1.136 0.907 -1.335 0.817 -1.529L0.503 -2.212H0.075L1.106 0C1.046 0.144 0.946 0.374 0.917 0.438C0.812 0.648 0.742 0.717 0.608 0.717C0.588 0.717 0.403 0.717 0.189 0.628L0.219 0.976C0.264 0.986 0.448 1.016 0.603 1.016C0.802 1.016 0.981 0.941 1.191 0.463L2.361 -2.212Z' id='g1-121'/>
-<path d='M2.112 -2.002V-2.212H0.219V-1.893H0.951C1.011 -1.893 1.071 -1.898 1.131 -1.898H1.519L0.149 -0.219V0H2.127V-0.334H1.355C1.295 -0.334 1.235 -0.329 1.176 -0.329H0.742L2.112 -2.002Z' id='g1-122'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g3-1'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M6.581 -2.663C6.581 -3.327 6.402 -4.08 5.317 -4.08C4.564 -4.08 4.142 -3.622 3.927 -3.344C3.865 -3.524 3.676 -4.08 2.762 -4.08C2.053 -4.08 1.623 -3.667 1.417 -3.398V-4.035H0.726V0H1.47V-2.188C1.47 -2.78 1.704 -3.497 2.385 -3.497C3.282 -3.497 3.282 -2.86 3.282 -2.6V0H4.026V-2.188C4.026 -2.78 4.259 -3.497 4.94 -3.497C5.837 -3.497 5.837 -2.86 5.837 -2.6V0H6.581V-2.663Z' id='g0-109'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page2'>
-<path d='M194.617 258.136V249.281M253.285 258.136V249.281M311.953 258.136V249.281M370.625 258.136V249.281M429.293 258.136V249.281M194.617 72.66V81.515M253.285 72.66V81.515M311.953 72.66V81.515M370.625 72.66V81.515M429.293 72.66V81.515' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M165.281 253.535V249.281M223.953 253.535V249.281M282.621 253.535V249.281M341.289 253.535V249.281M399.957 253.535V249.281M458.629 253.535V249.281M165.281 77.265V81.515M223.953 77.265V81.515M282.621 77.265V81.515M341.289 77.265V81.515M399.957 77.265V81.515M458.629 77.265V81.515' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 249.281H140.199M135.949 215.73H140.199M135.949 182.176H140.199M135.949 148.625H140.199M135.949 115.07H140.199M135.949 81.515H140.199M487.961 249.281H483.711M487.961 215.73H483.711M487.961 182.176H483.711M487.961 148.625H483.711M487.961 115.07H483.711M487.961 81.515H483.711' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 249.281V81.515H487.961V249.281H135.949Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -21.265 61.588)'>
-<use x='168.285' xlink:href='#g2-97' y='201.694'/>
-<use x='172.353' xlink:href='#g2-108' y='201.694'/>
-<use x='174.373' xlink:href='#g2-108' y='201.694'/>
-<use x='176.393' xlink:href='#g2-111' y='201.694'/>
-<use x='180.863' xlink:href='#g2-99' y='201.694'/>
-<use x='184.627' xlink:href='#g2-45' y='201.694'/>
-<use x='187.449' xlink:href='#g2-116' y='201.694'/>
-<use x='190.507' xlink:href='#g2-101' y='201.694'/>
-<use x='194.271' xlink:href='#g2-115' y='201.694'/>
-<use x='197.517' xlink:href='#g2-116' y='201.694'/>
-<use x='200.575' xlink:href='#g2-49' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 61.588)'>
-<use x='168.285' xlink:href='#g2-97' y='201.694'/>
-<use x='172.353' xlink:href='#g2-108' y='201.694'/>
-<use x='174.373' xlink:href='#g2-108' y='201.694'/>
-<use x='176.393' xlink:href='#g2-111' y='201.694'/>
-<use x='180.863' xlink:href='#g2-99' y='201.694'/>
-<use x='184.627' xlink:href='#g2-45' y='201.694'/>
-<use x='187.449' xlink:href='#g2-116' y='201.694'/>
-<use x='190.507' xlink:href='#g2-101' y='201.694'/>
-<use x='194.271' xlink:href='#g2-115' y='201.694'/>
-<use x='197.517' xlink:href='#g2-116' y='201.694'/>
-<use x='200.575' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 61.588)'>
-<use x='168.285' xlink:href='#g2-115' y='201.694'/>
-<use x='171.531' xlink:href='#g2-104' y='201.694'/>
-<use x='175.904' xlink:href='#g2-54' y='201.694'/>
-<use x='180.138' xlink:href='#g2-98' y='201.694'/>
-<use x='184.746' xlink:href='#g2-101' y='201.694'/>
-<use x='188.509' xlink:href='#g2-110' y='201.694'/>
-<use x='192.882' xlink:href='#g2-99' y='201.694'/>
-<use x='196.646' xlink:href='#g2-104' y='201.694'/>
-<use x='201.018' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 61.588)'>
-<use x='168.285' xlink:href='#g2-115' y='201.694'/>
-<use x='171.531' xlink:href='#g2-104' y='201.694'/>
-<use x='175.904' xlink:href='#g2-56' y='201.694'/>
-<use x='180.138' xlink:href='#g2-98' y='201.694'/>
-<use x='184.746' xlink:href='#g2-101' y='201.694'/>
-<use x='188.509' xlink:href='#g2-110' y='201.694'/>
-<use x='192.882' xlink:href='#g2-99' y='201.694'/>
-<use x='196.646' xlink:href='#g2-104' y='201.694'/>
-<use x='201.018' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 61.588)'>
-<use x='168.285' xlink:href='#g2-120' y='201.694'/>
-<use x='172.187' xlink:href='#g2-109' y='201.694'/>
-<use x='178.912' xlink:href='#g2-97' y='201.694'/>
-<use x='182.98' xlink:href='#g2-108' y='201.694'/>
-<use x='185' xlink:href='#g2-108' y='201.694'/>
-<use x='187.02' xlink:href='#g2-111' y='201.694'/>
-<use x='191.49' xlink:href='#g2-99' y='201.694'/>
-<use x='195.254' xlink:href='#g2-45' y='201.694'/>
-<use x='198.076' xlink:href='#g2-116' y='201.694'/>
-<use x='201.134' xlink:href='#g2-101' y='201.694'/>
-<use x='204.898' xlink:href='#g2-115' y='201.694'/>
-<use x='208.144' xlink:href='#g2-116' y='201.694'/>
-<use x='211.202' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 61.588)'>
-<use x='168.285' xlink:href='#g2-99' y='201.694'/>
-<use x='172.049' xlink:href='#g2-97' y='201.694'/>
-<use x='176.117' xlink:href='#g2-99' y='201.694'/>
-<use x='179.88' xlink:href='#g2-104' y='201.694'/>
-<use x='184.253' xlink:href='#g2-101' y='201.694'/>
-<use x='188.017' xlink:href='#g2-45' y='201.694'/>
-<use x='190.839' xlink:href='#g2-115' y='201.694'/>
-<use x='194.086' xlink:href='#g2-99' y='201.694'/>
-<use x='197.849' xlink:href='#g2-114' y='201.694'/>
-<use x='200.741' xlink:href='#g2-97' y='201.694'/>
-<use x='204.81' xlink:href='#g2-116' y='201.694'/>
-<use x='207.868' xlink:href='#g2-99' y='201.694'/>
-<use x='211.631' xlink:href='#g2-104' y='201.694'/>
-<use x='216.004' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 49.223)'>
-<use x='168.285' xlink:href='#g1-48' y='201.694'/>
-<use x='170.931' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 15.67)'>
-<use x='168.285' xlink:href='#g1-48' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-53' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -17.883)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -51.436)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-53' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -84.989)'>
-<use x='168.285' xlink:href='#g1-50' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -118.543)'>
-<use x='168.285' xlink:href='#g1-50' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-53' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<path clip-path='url(#clip2)' d='M135.949 182.176H487.961' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M145.356 249.281H148.594V182.176H145.356ZM204.028 249.281H207.266V182.176H204.028ZM262.695 249.281H265.934V182.176H262.695ZM321.363 249.281H324.602V182.176H321.363ZM380.031 249.281H383.27V182.176H380.031ZM438.703 249.281H441.942V182.176H438.703Z' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M145.356 249.281H148.594V182.176H145.356ZM204.028 249.281H207.266V182.176H204.028ZM262.695 249.281H265.934V182.176H262.695ZM321.363 249.281H324.602V182.176H321.363ZM380.031 249.281H383.27V182.176H380.031ZM438.703 249.281H441.942V182.176H438.703Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M146.977 182.176V182.043' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M146.977 182.176V182.043' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M144.984 182.043H148.968' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M146.977 182.176V182.308' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M146.977 182.176V182.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M148.969 182.308H144.984' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M205.645 182.176V182.043' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M205.645 182.176V182.043' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M203.652 182.043H207.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M205.645 182.176V182.308' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M205.645 182.176V182.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M207.636 182.308H203.652' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M264.313 182.176V180.429' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M264.313 182.176V180.429' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M262.32 180.429H266.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M264.313 182.176V183.922' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M264.313 182.176V183.922' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M266.304 183.922H262.32' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M322.984 182.176V181.504' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M322.984 182.176V181.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M320.992 181.504H324.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M322.984 182.176V182.847' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M322.984 182.176V182.847' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M324.976 182.847H320.988' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M381.652 182.176V181.84' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M381.652 182.176V181.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M379.66 181.84H383.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M381.652 182.176V182.512' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M381.652 182.176V182.512' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M383.644 182.512H379.66' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M440.32 182.176V181.371' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M440.32 182.176V181.371' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M438.328 181.371H442.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M440.32 182.176V182.98' fill='#e0e0f0'/>
-<path clip-path='url(#clip2)' d='M440.32 182.176V182.98' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M442.312 182.98H438.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M150.586 249.281H153.824V180.765H150.586ZM209.258 249.281H212.496V173.117H209.258ZM267.926 249.281H271.164V158.086H267.926ZM326.594 249.281H329.832V81.515H326.594ZM385.262 249.281H388.5V81.515H385.262ZM443.934 249.281H447.172V81.515H443.934Z' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M150.586 249.281H153.824V180.765H150.586ZM209.258 249.281H212.496V173.117H209.258ZM267.926 249.281H271.164V158.086H267.926ZM326.594 249.281H329.832V81.515H326.594ZM385.262 249.281H388.5V81.515H385.262ZM443.934 249.281H447.172V81.515H443.934Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M152.207 180.765V180.633' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M152.207 180.765V180.633' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M150.215 180.633H154.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M152.207 180.765V180.902' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M152.207 180.765V180.902' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M154.2 180.902H150.215' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M210.875 173.117V172.914' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M210.875 173.117V172.914' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M208.883 172.915H212.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M210.875 173.117V173.316' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M210.875 173.117V173.316' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M212.867 173.316H208.883' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M269.543 158.086V157.48' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M269.543 158.086V157.48' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M267.551 157.48H271.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M269.543 158.086V158.687' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M269.543 158.086V158.687' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M271.535 158.687H267.551' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M328.215 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M326.223 81.516H330.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M328.215 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M326.223 81.516H330.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M386.883 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M384.891 81.516H388.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M386.883 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M384.891 81.516H388.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M445.551 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M443.559 81.516H447.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M445.551 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip2)' d='M443.559 81.516H447.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M155.817 249.281H159.055V175.668H155.817ZM214.488 249.281H217.727V172.648H214.488ZM273.156 249.281H276.395V81.515H273.156ZM331.824 249.281H335.063V148.152H331.824ZM390.492 249.281H393.731V130.57H390.492ZM449.164 249.281H452.402V81.515H449.164Z' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M155.817 249.281H159.055V175.668H155.817ZM214.488 249.281H217.727V172.648H214.488ZM273.156 249.281H276.395V81.515H273.156ZM331.824 249.281H335.063V148.152H331.824ZM390.492 249.281H393.731V130.57H390.492ZM449.164 249.281H452.402V81.515H449.164Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M157.438 175.668V174.39' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M157.438 175.668V174.39' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M155.445 174.391H159.429' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M157.438 175.668V176.941' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M157.438 175.668V176.941' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M159.43 176.942H155.445' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M216.106 172.648V172.648' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M214.113 172.648H218.097' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M216.106 172.648V172.648' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M214.113 172.648H218.097' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M274.774 81.515V81.515' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M272.781 81.516H276.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M274.774 81.515V81.515' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M272.781 81.516H276.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M333.445 148.152V146.945' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M333.445 148.152V146.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M331.453 146.945H335.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M333.445 148.152V149.359' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M333.445 148.152V149.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M335.437 149.359H331.449' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M392.113 130.57V129.566' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M392.113 130.57V129.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M390.121 129.566H394.105' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M392.113 130.57V131.578' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M392.113 130.57V131.578' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M394.105 131.578H390.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M450.781 81.515V81.515' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M448.789 81.516H452.773' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M450.781 81.515V81.515' fill='#a3a3d1'/>
-<path clip-path='url(#clip2)' d='M448.789 81.516H452.773' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M161.047 249.281H164.285V157.949H161.047ZM219.719 249.281H222.957V144.664H219.719ZM278.387 249.281H281.625V81.515H278.387ZM337.055 249.281H340.293V156.879H337.055ZM395.723 249.281H398.961V162.984H395.723ZM454.395 249.281H457.633V179.426H454.395Z' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M161.047 249.281H164.285V157.949H161.047ZM219.719 249.281H222.957V144.664H219.719ZM278.387 249.281H281.625V81.515H278.387ZM337.055 249.281H340.293V156.879H337.055ZM395.723 249.281H398.961V162.984H395.723ZM454.395 249.281H457.633V179.426H454.395Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M162.668 157.949V157.883' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M162.668 157.949V157.883' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M160.676 157.883H164.66' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M162.668 157.949V158.019' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M162.668 157.949V158.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M164.661 158.02H160.676' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M221.336 144.664V144.261' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M221.336 144.664V144.261' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M219.344 144.261H223.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M221.336 144.664V145.066' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M221.336 144.664V145.066' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M223.329 145.066H219.344' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M280.004 81.515V81.515' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M278.012 81.516H282' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M280.004 81.515V81.515' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M278.012 81.516H282' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M338.676 156.879V156.004' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M338.676 156.879V156.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M336.684 156.004H340.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M338.676 156.879V157.75' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M338.676 156.879V157.75' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M340.668 157.75H336.68' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M397.344 162.984V162.582' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M397.344 162.984V162.582' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M395.352 162.582H399.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M397.344 162.984V163.387' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M397.344 162.984V163.387' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M399.336 163.386H395.352' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M456.012 179.426V178.621' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M456.012 179.426V178.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M454.02 178.622H458.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M456.012 179.426V180.23' fill='#8585c2'/>
-<path clip-path='url(#clip2)' d='M456.012 179.426V180.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M458.004 180.23H454.02' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M166.278 249.281H169.516V163.992H166.278ZM224.949 249.281H228.188V159.426H224.949ZM283.617 249.281H286.856V91.047H283.617ZM342.285 249.281H345.524V81.515H342.285ZM400.953 249.281H404.192V81.515H400.953ZM459.625 249.281H462.863V81.515H459.625Z' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M166.278 249.281H169.516V163.992H166.278ZM224.949 249.281H228.188V159.426H224.949ZM283.617 249.281H286.856V91.047H283.617ZM342.285 249.281H345.524V81.515H342.285ZM400.953 249.281H404.192V81.515H400.953ZM459.625 249.281H462.863V81.515H459.625Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M167.899 163.992V163.722' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M167.899 163.992V163.722' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M165.906 163.723H169.89' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M167.899 163.992V164.258' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M167.899 163.992V164.258' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M169.891 164.258H165.906' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M226.567 159.426V159.359' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M226.567 159.426V159.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M224.574 159.359H228.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M226.567 159.426V159.496' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M226.567 159.426V159.496' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M228.559 159.496H224.574' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M285.234 91.047V90.777' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M285.234 91.047V90.777' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M283.242 90.777H287.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M285.234 91.047V91.316' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M285.234 91.047V91.316' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M287.227 91.316H283.242' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M343.906 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M341.914 81.516H345.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M343.906 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M341.914 81.516H345.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M402.574 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M400.582 81.516H404.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M402.574 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M400.582 81.516H404.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M461.242 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M459.25 81.516H463.234' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M461.242 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip2)' d='M459.25 81.516H463.234' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M171.508 249.281H174.746V172.648H171.508ZM230.18 249.281H233.414V132.519H230.18ZM288.848 249.281H292.086V124.867H288.848ZM347.516 249.281H350.754V81.515H347.516ZM406.184 249.281H409.422V81.515H406.184ZM464.856 249.281H468.094V81.515H464.856Z' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M171.508 249.281H174.746V172.648H171.508ZM230.18 249.281H233.414V132.519H230.18ZM288.848 249.281H292.086V124.867H288.848ZM347.516 249.281H350.754V81.515H347.516ZM406.184 249.281H409.422V81.515H406.184ZM464.856 249.281H468.094V81.515H464.856Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M173.129 172.648V172.312' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M173.129 172.648V172.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M171.137 172.313H175.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M173.129 172.648V172.984' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M173.129 172.648V172.984' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M175.122 172.985H171.137' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M231.797 132.519V131.847' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M231.797 132.519V131.847' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M229.805 131.848H233.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M231.797 132.519V133.187' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M231.797 132.519V133.187' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M233.79 133.188H229.805' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M290.465 124.867V124.062' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M290.465 124.867V124.062' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M288.473 124.062H292.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M290.465 124.867V125.672' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M290.465 124.867V125.672' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M292.458 125.672H288.473' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M349.137 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M347.145 81.516H351.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M349.137 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M347.145 81.516H351.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M407.805 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M405.813 81.516H409.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M407.805 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M405.813 81.516H409.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M466.473 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M464.481 81.516H468.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M466.473 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip2)' d='M464.481 81.516H468.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M176.738 249.281H179.977V163.656H176.738ZM235.41 249.281H238.645V159.359H235.41ZM294.078 249.281H297.317V90.578H294.078ZM352.746 249.281H355.984V81.515H352.746ZM411.414 249.281H414.652V81.515H411.414ZM470.086 249.281H473.324V81.515H470.086Z' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M176.738 249.281H179.977V163.656H176.738ZM235.41 249.281H238.645V159.359H235.41ZM294.078 249.281H297.317V90.578H294.078ZM352.746 249.281H355.984V81.515H352.746ZM411.414 249.281H414.652V81.515H411.414ZM470.086 249.281H473.324V81.515H470.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M178.36 163.656V163.32' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M178.36 163.656V163.32' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M176.367 163.32H180.351' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M178.36 163.656V163.992' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M178.36 163.656V163.992' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M180.352 163.992H176.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M237.027 159.359V159.359' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M235.035 159.359H239.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M237.027 159.359V159.359' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M235.035 159.359H239.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M295.695 90.578V89.234' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M295.695 90.578V89.234' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M293.703 89.234H297.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M295.695 90.578V91.918' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M295.695 90.578V91.918' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M297.688 91.918H293.703' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M354.367 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M352.375 81.516H356.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M354.367 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M352.375 81.516H356.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M413.035 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M411.043 81.516H415.027' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M413.035 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M411.043 81.516H415.027' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M471.703 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M469.711 81.516H473.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M471.703 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip2)' d='M469.711 81.516H473.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M416.645 249.281H419.883V131.445H416.645ZM181.969 249.281H185.207V153.523H181.969ZM240.641 249.281H243.875V149.226H240.641ZM299.309 249.281H302.547V81.515H299.309ZM357.977 249.281H361.215V129.297H357.977ZM475.317 249.281H478.555V179.894H475.317Z' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M416.645 249.281H419.883V131.445H416.645ZM181.969 249.281H185.207V153.523H181.969ZM240.641 249.281H243.875V149.226H240.641ZM299.309 249.281H302.547V81.515H299.309ZM357.977 249.281H361.215V129.297H357.977ZM475.317 249.281H478.555V179.894H475.317Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M418.266 131.445V128.894' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M418.266 131.445V128.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M416.274 128.895H420.258' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M418.266 131.445V133.992' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M418.266 131.445V133.992' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M420.257 133.992H416.273' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M183.59 153.523V152.851' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M183.59 153.523V152.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M181.598 152.852H185.583' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M183.59 153.523V154.191' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M183.59 153.523V154.191' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M185.582 154.191H181.597' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M242.258 149.226V149.16' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M242.258 149.226V149.16' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M240.266 149.16H244.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M242.258 149.226V149.293' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M242.258 149.226V149.293' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M244.25 149.293H240.265' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M300.926 81.515V81.515' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M298.933 81.516H302.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M300.926 81.515V81.515' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M298.933 81.516H302.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M359.598 129.297V128.426' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M359.598 129.297V128.426' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M357.606 128.426H361.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M359.598 129.297V130.168' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M359.598 129.297V130.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M361.589 130.168H357.601' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M476.934 179.894V179.894' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M474.942 179.895H478.926' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M476.934 179.894V179.894' fill='#0a0a85'/>
-<path clip-path='url(#clip2)' d='M474.942 179.895H478.926' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip2)' d='M418.387 298.301H487.762V276.324H418.387Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 253.422 92.648)'>
-<use x='168.285' xlink:href='#g1-114' y='190.457'/>
-<use x='170.092' xlink:href='#g1-53' y='190.457'/>
-<use x='172.739' xlink:href='#g1-97' y='190.457'/>
-<use x='175.281' xlink:href='#g1-45' y='190.457'/>
-<use x='177.046' xlink:href='#g1-52' y='190.457'/>
-<use x='179.692' xlink:href='#g1-120' y='190.457'/>
-<use x='182.131' xlink:href='#g1-108' y='190.457'/>
-<use x='183.393' xlink:href='#g1-97' y='190.457'/>
-<use x='185.789' xlink:href='#g1-114' y='190.457'/>
-<use x='187.596' xlink:href='#g1-103' y='190.457'/>
-<use x='190.243' xlink:href='#g1-101' y='190.457'/>
-<use x='192.595' xlink:href='#g1-44' y='190.457'/>
-<use x='195.83' xlink:href='#g1-49' y='190.457'/>
-<use x='198.476' xlink:href='#g1-50' y='190.457'/>
-<use x='201.122' xlink:href='#g1-56' y='190.457'/>
-<use x='203.769' xlink:href='#g1-71' y='190.457'/>
-<use x='207.297' xlink:href='#g1-98' y='190.457'/>
-<use x='168.285' xlink:href='#g1-49' y='196.075'/>
-<use x='170.931' xlink:href='#g1-54' y='196.075'/>
-<use x='173.578' xlink:href='#g1-45' y='196.075'/>
-<use x='175.342' xlink:href='#g1-99' y='196.075'/>
-<use x='177.694' xlink:href='#g1-111' y='196.075'/>
-<use x='180.193' xlink:href='#g1-114' y='196.075'/>
-<use x='182.001' xlink:href='#g1-101' y='196.075'/>
-<use x='186.118' xlink:href='#g1-65' y='196.075'/>
-<use x='189.646' xlink:href='#g1-77' y='196.075'/>
-<use x='194.264' xlink:href='#g1-68' y='196.075'/>
-<use x='199.851' xlink:href='#g1-69' y='196.075'/>
-<use x='203.025' xlink:href='#g1-112' y='196.075'/>
-<use x='205.611' xlink:href='#g1-121' y='196.075'/>
-<use x='208.049' xlink:href='#g1-99' y='196.075'/>
-<use x='212.166' xlink:href='#g1-64' y='196.075'/>
-<use x='215.695' xlink:href='#g1-50' y='196.075'/>
-<use x='218.341' xlink:href='#g1-46' y='196.075'/>
-<use x='219.811' xlink:href='#g1-53' y='196.075'/>
-<use x='222.457' xlink:href='#g1-71' y='196.075'/>
-<use x='225.986' xlink:href='#g1-104' y='196.075'/>
-<use x='228.719' xlink:href='#g1-122' y='196.075'/>
-<use x='168.285' xlink:href='#g1-85' y='201.694'/>
-<use x='171.917' xlink:href='#g1-98' y='201.694'/>
-<use x='174.65' xlink:href='#g1-117' y='201.694'/>
-<use x='177.383' xlink:href='#g1-110' y='201.694'/>
-<use x='180.116' xlink:href='#g1-116' y='201.694'/>
-<use x='182.027' xlink:href='#g1-117' y='201.694'/>
-<use x='186.524' xlink:href='#g1-49' y='201.694'/>
-<use x='189.17' xlink:href='#g1-56' y='201.694'/>
-<use x='191.817' xlink:href='#g1-46' y='201.694'/>
-<use x='193.287' xlink:href='#g1-48' y='201.694'/>
-<use x='195.933' xlink:href='#g1-52' y='201.694'/>
-<use x='198.58' xlink:href='#g1-46' y='201.694'/>
-<use x='200.05' xlink:href='#g1-49' y='201.694'/>
-<use x='202.696' xlink:href='#g1-44' y='201.694'/>
-<use x='205.931' xlink:href='#g1-71' y='201.694'/>
-<use x='209.459' xlink:href='#g1-67' y='201.694'/>
-<use x='212.841' xlink:href='#g1-67' y='201.694'/>
-<use x='217.986' xlink:href='#g1-55' y='201.694'/>
-<use x='220.633' xlink:href='#g1-46' y='201.694'/>
-<use x='222.103' xlink:href='#g1-51' y='201.694'/>
-<use x='224.749' xlink:href='#g1-46' y='201.694'/>
-<use x='226.219' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -53.084 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 5.585 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 64.254 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 122.923 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 181.592 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 240.261 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -47.853 342.848)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-50' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 10.816 335.198)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-49' y='201.694'/>
-<use x='175.048' xlink:href='#g1-52' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 69.485 320.166)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-54' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 128.154 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-56' y='201.694'/>
-<use x='180.675' xlink:href='#g1-50' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 186.823 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-56' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-50' y='201.694'/>
-<use x='180.675' xlink:href='#g1-50' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 245.492 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-49' y='201.694'/>
-<use x='176.558' xlink:href='#g1-57' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-50' y='201.694'/>
-<use x='183.321' xlink:href='#g1-51' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -42.623 337.748)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-49' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 16.046 334.728)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-49' y='201.694'/>
-<use x='175.048' xlink:href='#g1-52' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 74.715 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-50' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-56' y='201.694'/>
-<use x='180.675' xlink:href='#g1-51' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 133.384 310.234)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-53' y='201.694'/>
-<use x='175.048' xlink:href='#g1-49' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 192.053 292.653)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-55' y='201.694'/>
-<use x='175.048' xlink:href='#g1-55' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 250.722 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-49' y='201.694'/>
-<use x='176.558' xlink:href='#g1-56' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-48' y='201.694'/>
-<use x='183.321' xlink:href='#g1-57' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -37.392 320.032)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-54' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 21.277 306.745)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-53' y='201.694'/>
-<use x='175.048' xlink:href='#g1-54' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 79.946 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-50' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-55' y='201.694'/>
-<use x='180.675' xlink:href='#g1-52' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 138.615 318.958)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-56' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 197.284 325.065)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-57' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 255.953 341.506)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-52' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -32.162 326.071)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-55' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 26.507 321.508)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-52' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 85.176 253.127)'>
-<use x='168.285' xlink:href='#g1-50' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-54' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 143.845 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-50' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-57' y='201.694'/>
-<use x='180.675' xlink:href='#g1-52' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 202.514 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-49' y='201.694'/>
-<use x='176.558' xlink:href='#g1-50' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-53' y='201.694'/>
-<use x='183.321' xlink:href='#g1-50' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 261.183 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-52' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-50' y='201.694'/>
-<use x='180.675' xlink:href='#g1-49' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -26.931 334.728)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-49' y='201.694'/>
-<use x='175.048' xlink:href='#g1-52' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 31.738 294.599)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-55' y='201.694'/>
-<use x='175.048' xlink:href='#g1-52' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 90.407 286.949)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-56' y='201.694'/>
-<use x='175.048' xlink:href='#g1-53' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 149.076 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-52' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-55' y='201.694'/>
-<use x='180.675' xlink:href='#g1-51' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 207.745 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-51' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-56' y='201.694'/>
-<use x='183.321' xlink:href='#g1-53' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 266.414 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-57' y='201.694'/>
-<use x='180.675' xlink:href='#g1-53' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -21.701 325.736)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-56' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 36.968 321.441)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-52' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 95.637 252.657)'>
-<use x='168.285' xlink:href='#g1-50' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-55' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 154.306 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-50' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-57' y='201.694'/>
-<use x='180.675' xlink:href='#g1-55' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 212.975 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-49' y='201.694'/>
-<use x='176.558' xlink:href='#g1-49' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-55' y='201.694'/>
-<use x='183.321' xlink:href='#g1-56' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 271.644 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-52' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-49' y='201.694'/>
-<use x='180.675' xlink:href='#g1-56' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 218.205 293.525)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-55' y='201.694'/>
-<use x='175.048' xlink:href='#g1-54' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -16.471 315.603)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-52' y='201.694'/>
-<use x='175.048' xlink:href='#g1-51' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 42.198 311.308)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-52' y='201.694'/>
-<use x='175.048' xlink:href='#g1-57' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 100.867 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-52' y='201.694'/>
-<use x='180.675' xlink:href='#g1-56' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 159.536 291.377)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-55' y='201.694'/>
-<use x='175.048' xlink:href='#g1-57' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 276.874 341.975)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-51' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -88.536 388.944)'>
-<use x='168.285' xlink:href='#g0-82' y='201.694'/>
-<use x='174.255' xlink:href='#g0-101' y='201.694'/>
-<use x='178.351' xlink:href='#g0-108' y='201.694'/>
-<use x='180.551' xlink:href='#g0-97' y='201.694'/>
-<use x='184.979' xlink:href='#g0-116' y='201.694'/>
-<use x='188.307' xlink:href='#g0-105' y='201.694'/>
-<use x='190.507' xlink:href='#g0-118' y='201.694'/>
-<use x='194.755' xlink:href='#g0-101' y='201.694'/>
-<use x='201.922' xlink:href='#g0-116' y='201.694'/>
-<use x='205.25' xlink:href='#g0-105' y='201.694'/>
-<use x='207.45' xlink:href='#g0-109' y='201.694'/>
-<use x='214.77' xlink:href='#g0-101' y='201.694'/>
-<use x='221.937' xlink:href='#g2-40' y='201.694'/>
-<use x='225.231' xlink:href='#g2-108' y='201.694'/>
-<use x='227.251' xlink:href='#g2-111' y='201.694'/>
-<use x='231.25' xlink:href='#g2-119' y='201.694'/>
-<use x='236.799' xlink:href='#g2-101' y='201.694'/>
-<use x='240.562' xlink:href='#g2-114' y='201.694'/>
-<use x='246.277' xlink:href='#g2-105' y='201.694'/>
-<use x='248.297' xlink:href='#g2-115' y='201.694'/>
-<use x='254.366' xlink:href='#g2-98' y='201.694'/>
-<use x='258.974' xlink:href='#g2-101' y='201.694'/>
-<use x='262.738' xlink:href='#g2-116' y='201.694'/>
-<use x='265.796' xlink:href='#g2-116' y='201.694'/>
-<use x='268.854' xlink:href='#g2-101' y='201.694'/>
-<use x='272.618' xlink:href='#g2-114' y='201.694'/>
-<use x='275.51' xlink:href='#g2-41' y='201.694'/>
-</g>
-<path d='M136.149 296.672H349.488V279.679H136.149Z' fill='#ffffff'/>
-<path d='M136.149 296.672H349.488V279.679H136.149Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path d='M139.336 290.168H142.324V282.199H139.336ZM145.313 290.168H148.301V284.191H145.313Z' fill='#e0e0f0'/>
-<path d='M139.336 290.168H142.324V282.199H139.336ZM145.313 290.168H148.301V284.191H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -33.522 88.465)'>
-<use x='185.011' xlink:href='#g2-109' y='201.694'/>
-<use x='191.736' xlink:href='#g2-105' y='201.694'/>
-</g>
-<path d='M163.422 290.168H166.41V282.199H163.422ZM169.398 290.168H172.391V284.191H169.398Z' fill='#c2c2e1'/>
-<path d='M163.422 290.168H166.41V282.199H163.422ZM169.398 290.168H172.391V284.191H169.398Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.56 88.011)'>
-<use x='208.137' xlink:href='#g2-116' y='201.694'/>
-<use x='211.195' xlink:href='#g2-99' y='201.694'/>
-</g>
-<path d='M185.586 290.168H188.574V282.199H185.586ZM191.563 290.168H194.555V284.191H191.563Z' fill='#a3a3d1'/>
-<path d='M185.586 290.168H188.574V282.199H185.586ZM191.563 290.168H194.555V284.191H191.563Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.159 88.465)'>
-<use x='229.9' xlink:href='#g2-106' y='201.694'/>
-<use x='232.155' xlink:href='#g2-101' y='201.694'/>
-</g>
-<path d='M206.949 290.168H209.938V282.199H206.949ZM212.926 290.168H215.914V284.191H212.926Z' fill='#8585c2'/>
-<path d='M206.949 290.168H209.938V282.199H206.949ZM212.926 290.168H215.914V284.191H212.926Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.958 87.505)'>
-<use x='252.061' xlink:href='#g2-115' y='201.694'/>
-<use x='255.307' xlink:href='#g2-110' y='201.694'/>
-</g>
-<path d='M229.91 290.168H232.898V282.199H229.91ZM235.887 290.168H238.875V284.191H235.887Z' fill='#6666b3'/>
-<path d='M229.91 290.168H232.898V282.199H229.91ZM235.887 290.168H238.875V284.191H235.887Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.781 87.505)'>
-<use x='274.845' xlink:href='#g2-114' y='201.694'/>
-<use x='277.737' xlink:href='#g2-112' y='201.694'/>
-</g>
-<path d='M252.516 290.168H255.504V282.199H252.516ZM258.496 290.168H261.484V284.191H258.496Z' fill='#4747a4'/>
-<path d='M252.516 290.168H255.504V282.199H252.516ZM258.496 290.168H261.484V284.191H258.496Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -39.001 88.501)'>
-<use x='303.672' xlink:href='#g2-104' y='201.694'/>
-<use x='308.045' xlink:href='#g2-111' y='201.694'/>
-<use x='312.279' xlink:href='#g2-97' y='201.694'/>
-<use x='316.112' xlink:href='#g2-114' y='201.694'/>
-<use x='319.004' xlink:href='#g2-100' y='201.694'/>
-</g>
-<path d='M287.563 290.168H290.551V282.199H287.563ZM293.543 290.168H296.531V284.191H293.543Z' fill='#292994'/>
-<path d='M287.563 290.168H290.551V282.199H287.563ZM293.543 290.168H296.531V284.191H293.543Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.472 88.501)'>
-<use x='337.19' xlink:href='#g2-103' y='201.694'/>
-<use x='341.424' xlink:href='#g2-108' y='201.694'/>
-<use x='343.444' xlink:href='#g2-105' y='201.694'/>
-<use x='345.464' xlink:href='#g2-98' y='201.694'/>
-<use x='350.072' xlink:href='#g2-99' y='201.694'/>
-</g>
-<path d='M319.551 290.168H322.539V282.199H319.551ZM325.527 290.168H328.52V284.191H325.527Z' fill='#0a0a85'/>
-<path d='M319.551 290.168H322.539V282.199H319.551ZM325.527 290.168H328.52V284.191H325.527Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.051 88.501)'>
-<use x='366.757' xlink:href='#g2-116' y='201.694'/>
-<use x='369.815' xlink:href='#g2-98' y='201.694'/>
-<use x='374.187' xlink:href='#g2-98' y='201.694'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-rss-1.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-rss-1.svg
deleted file mode 100644
index 375ebd2..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-rss-1.svg
+++ /dev/null
@@ -1,683 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='164.687pt' version='1.1' viewBox='52.938 54.996 381.625 164.687' width='381.625pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip7'>
-<path d='M82.148 203.937H434.164V78.691H82.148Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-78' transform='scale(1.6)' xlink:href='#g1-78'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-102' transform='scale(1.6)' xlink:href='#g1-102'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M0.946 -1.898H1.514V-2.212H0.932V-2.785C0.932 -3.128 1.245 -3.178 1.41 -3.178C1.514 -3.178 1.649 -3.163 1.833 -3.093V-3.457C1.704 -3.487 1.549 -3.507 1.415 -3.507C0.902 -3.507 0.528 -3.138 0.528 -2.645V-2.212H0.144V-1.898H0.528V0H0.946V-1.898Z' id='g1-102'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g3-1'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M1.462 -1.91C1.462 -2.851 2.197 -3.425 3.013 -3.434V-4.08C2.367 -4.071 1.775 -3.748 1.408 -3.219V-4.035H0.744V0H1.462V-1.91Z' id='g0-114'/>
-<path d='M3.165 -3.847C2.609 -4.098 2.197 -4.133 1.829 -4.133C1.623 -4.133 0.305 -4.133 0.305 -2.95C0.305 -2.52 0.565 -2.251 0.664 -2.152C1.004 -1.856 1.237 -1.811 1.847 -1.695C2.134 -1.641 2.645 -1.542 2.645 -1.085C2.645 -0.502 1.919 -0.502 1.802 -0.502C1.273 -0.502 0.762 -0.681 0.377 -0.95L0.26 -0.296C0.798 -0.009 1.345 0.099 1.802 0.099C2.385 0.099 3.318 -0.09 3.318 -1.157C3.318 -1.47 3.192 -1.784 2.878 -2.053C2.573 -2.313 2.304 -2.367 1.748 -2.475C1.426 -2.537 0.977 -2.618 0.977 -3.04C0.977 -3.569 1.614 -3.569 1.748 -3.569C2.403 -3.569 2.789 -3.362 3.049 -3.219L3.165 -3.847Z' id='g0-115'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page7'>
-<path d='M140.82 212.793V203.937M199.488 212.793V203.937M258.156 212.793V203.937M316.824 212.793V203.937M375.496 212.793V203.937M140.82 69.836V78.691M199.488 69.836V78.691M258.156 69.836V78.691M316.824 69.836V78.691M375.496 69.836V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M111.484 208.191V203.937M170.152 208.191V203.937M228.824 208.191V203.937M287.492 208.191V203.937M346.16 208.191V203.937M404.828 208.191V203.937M111.484 74.441V78.691M170.152 74.441V78.691M228.824 74.441V78.691M287.492 74.441V78.691M346.16 74.441V78.691M404.828 74.441V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937H86.402M82.148 172.625H86.402M82.148 141.316H86.402M82.148 110.004H86.402M82.148 78.691H86.402M434.164 203.937H429.91M434.164 172.625H429.91M434.164 141.316H429.91M434.164 110.004H429.91M434.164 78.691H429.91' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937V78.691H434.164V203.937H82.148Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -11.54 33.989)'>
-<use x='114.487' xlink:href='#g2-99' y='183.949'/>
-<use x='118.25' xlink:href='#g2-102' y='183.949'/>
-<use x='120.838' xlink:href='#g2-114' y='183.949'/>
-<use x='123.73' xlink:href='#g2-97' y='183.949'/>
-<use x='127.798' xlink:href='#g2-99' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 41.401 33.989)'>
-<use x='114.487' xlink:href='#g2-101' y='183.949'/>
-<use x='118.25' xlink:href='#g2-115' y='183.949'/>
-<use x='121.497' xlink:href='#g2-112' y='183.949'/>
-<use x='125.634' xlink:href='#g2-114' y='183.949'/>
-<use x='128.526' xlink:href='#g2-101' y='183.949'/>
-<use x='132.29' xlink:href='#g2-115' y='183.949'/>
-<use x='135.536' xlink:href='#g2-115' y='183.949'/>
-<use x='138.782' xlink:href='#g2-111' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 103.095 33.989)'>
-<use x='114.487' xlink:href='#g2-98' y='183.949'/>
-<use x='118.859' xlink:href='#g2-97' y='183.949'/>
-<use x='122.692' xlink:href='#g2-114' y='183.949'/>
-<use x='125.584' xlink:href='#g2-110' y='183.949'/>
-<use x='129.957' xlink:href='#g2-101' y='183.949'/>
-<use x='133.72' xlink:href='#g2-115' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 162.903 33.989)'>
-<use x='114.487' xlink:href='#g2-108' y='183.949'/>
-<use x='116.507' xlink:href='#g2-101' y='183.949'/>
-<use x='120.271' xlink:href='#g2-97' y='183.949'/>
-<use x='124.339' xlink:href='#g2-110' y='183.949'/>
-<use x='128.711' xlink:href='#g2-78' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 223.526 33.989)'>
-<use x='114.487' xlink:href='#g2-114' y='183.949'/>
-<use x='117.379' xlink:href='#g2-101' y='183.949'/>
-<use x='121.142' xlink:href='#g2-100' y='183.949'/>
-<use x='125.515' xlink:href='#g2-105' y='183.949'/>
-<use x='127.535' xlink:href='#g2-115' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 277.054 33.989)'>
-<use x='114.487' xlink:href='#g2-108' y='183.949'/>
-<use x='116.507' xlink:href='#g2-97' y='183.949'/>
-<use x='120.34' xlink:href='#g2-114' y='183.949'/>
-<use x='123.232' xlink:href='#g2-115' y='183.949'/>
-<use x='126.478' xlink:href='#g2-111' y='183.949'/>
-<use x='130.712' xlink:href='#g2-110' y='183.949'/>
-<use x='135.085' xlink:href='#g2-78' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 21.624)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -9.688)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -40.999)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -72.311)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -103.622)'>
-<use x='114.487' xlink:href='#g1-50' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<path clip-path='url(#clip7)' d='M82.148 141.316H434.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M91.559 203.937H94.797V141.316H91.559ZM150.227 203.937H153.465V141.316H150.227ZM208.899 203.937H212.133V141.316H208.899ZM267.567 203.937H270.805V141.316H267.567ZM326.234 203.937H329.473V141.316H326.234ZM384.902 203.937H388.141V141.316H384.902Z' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M91.559 203.937H94.797V141.316H91.559ZM150.227 203.937H153.465V141.316H150.227ZM208.899 203.937H212.133V141.316H208.899ZM267.567 203.937H270.805V141.316H267.567ZM326.234 203.937H329.473V141.316H326.234ZM384.902 203.937H388.141V141.316H384.902Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M93.18 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M91.184 141.316H95.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M93.18 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M91.184 141.316H95.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M151.848 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M149.855 141.316H153.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M151.848 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M149.855 141.316H153.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M210.516 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M208.523 141.316H212.507' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M210.516 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M208.523 141.316H212.507' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M269.184 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M267.191 141.316H271.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M269.184 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M267.191 141.316H271.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M327.856 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M325.859 141.316H329.847' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M327.856 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M325.859 141.316H329.847' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M386.524 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M384.531 141.316H388.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M386.524 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip7)' d='M384.531 141.316H388.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M96.789 203.937H100.027V94.222H96.789ZM155.457 203.937H158.695V78.691H155.457ZM214.129 203.937H217.363V138.246H214.129ZM272.797 203.937H276.035V154.652H272.797ZM331.465 203.937H334.703V129.793H331.465ZM390.133 203.937H393.371V138.808H390.133Z' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M96.789 203.937H100.027V94.222H96.789ZM155.457 203.937H158.695V78.691H155.457ZM214.129 203.937H217.363V138.246H214.129ZM272.797 203.937H276.035V154.652H272.797ZM331.465 203.937H334.703V129.793H331.465ZM390.133 203.937H393.371V138.808H390.133Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M98.41 94.222V94.222' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M96.414 94.223H100.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M98.41 94.222V94.222' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M96.414 94.223H100.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M157.078 78.691V78.691' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M155.086 78.691H159.071' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M157.078 78.691V78.691' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M155.086 78.691H159.071' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M215.746 138.246V138.246' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M213.754 138.246H217.739' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M215.746 138.246V138.246' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M213.754 138.246H217.739' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M274.414 154.652V154.652' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M272.422 154.652H276.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M274.414 154.652V154.652' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M272.422 154.652H276.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M333.086 129.793V129.793' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M331.09 129.793H335.078' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M333.086 129.793V129.793' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M331.09 129.793H335.078' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M391.754 138.808V138.808' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M389.762 138.808H393.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M391.754 138.808V138.808' fill='#e1c2e1'/>
-<path clip-path='url(#clip7)' d='M389.762 138.808H393.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M102.02 203.937H105.258V115.828H102.02ZM160.688 203.937H163.926V108.187H160.688ZM219.359 203.937H222.594V139.625H219.359ZM278.027 203.937H281.266V141.379H278.027ZM336.695 203.937H339.934V137.246H336.695ZM395.363 203.937H398.602V122.09H395.363Z' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M102.02 203.937H105.258V115.828H102.02ZM160.688 203.937H163.926V108.187H160.688ZM219.359 203.937H222.594V139.625H219.359ZM278.027 203.937H281.266V141.379H278.027ZM336.695 203.937H339.934V137.246H336.695ZM395.363 203.937H398.602V122.09H395.363Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M103.641 115.828V115.828' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M101.644 115.828H105.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M103.641 115.828V115.828' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M101.644 115.828H105.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M162.309 108.187V108.187' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M160.316 108.188H164.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M162.309 108.187V108.187' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M160.316 108.188H164.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M220.977 139.625V139.625' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M218.984 139.625H222.969' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M220.977 139.625V139.625' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M218.984 139.625H222.969' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M279.645 141.379V141.379' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M277.652 141.379H281.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M279.645 141.379V141.379' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M277.652 141.379H281.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M338.317 137.246V137.246' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M336.32 137.246H340.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M338.317 137.246V137.246' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M336.32 137.246H340.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M396.984 122.09V122.09' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M394.992 122.09H398.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M396.984 122.09V122.09' fill='#d1a3d1'/>
-<path clip-path='url(#clip7)' d='M394.992 122.09H398.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M107.25 203.937H110.488V123.469H107.25ZM165.918 203.937H169.156V112.133H165.918ZM224.59 203.937H227.824V140.187H224.59ZM283.258 203.937H286.496V140.312H283.258ZM341.926 203.937H345.164V137.933H341.926ZM400.594 203.937H403.832V126.347H400.594Z' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M107.25 203.937H110.488V123.469H107.25ZM165.918 203.937H169.156V112.133H165.918ZM224.59 203.937H227.824V140.187H224.59ZM283.258 203.937H286.496V140.312H283.258ZM341.926 203.937H345.164V137.933H341.926ZM400.594 203.937H403.832V126.347H400.594Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M108.871 123.469V123.469' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M106.875 123.469H110.86' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M108.871 123.469V123.469' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M106.875 123.469H110.86' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M167.539 112.133V112.133' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M165.547 112.133H169.532' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M167.539 112.133V112.133' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M165.547 112.133H169.532' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M226.207 140.187V140.187' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M224.215 140.187H228.2' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M226.207 140.187V140.187' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M224.215 140.187H228.2' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M284.875 140.312V140.312' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M282.883 140.312H286.868' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M284.875 140.312V140.312' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M282.883 140.312H286.868' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M343.547 137.933V137.933' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M341.551 137.934H345.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M343.547 137.933V137.933' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M341.551 137.934H345.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M402.215 126.347V126.347' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M400.223 126.347H404.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M402.215 126.347V126.347' fill='#c285c2'/>
-<path clip-path='url(#clip7)' d='M400.223 126.347H404.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M112.481 203.937H115.719V139H112.481ZM171.149 203.937H174.387V143.82H171.149ZM229.82 203.937H233.055V141.316H229.82ZM288.488 203.937H291.727V133.176H288.488ZM347.156 203.937H350.395V140H347.156ZM405.824 203.937H409.063V133.176H405.824Z' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M112.481 203.937H115.719V139H112.481ZM171.149 203.937H174.387V143.82H171.149ZM229.82 203.937H233.055V141.316H229.82ZM288.488 203.937H291.727V133.176H288.488ZM347.156 203.937H350.395V140H347.156ZM405.824 203.937H409.063V133.176H405.824Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M114.098 139V139' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M112.105 139H116.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M114.098 139V139' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M112.105 139H116.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M172.77 143.82V143.82' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M170.777 143.82H174.762' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M172.77 143.82V143.82' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M170.777 143.82H174.762' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M231.438 141.316V141.316' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M229.445 141.316H233.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M231.438 141.316V141.316' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M229.445 141.316H233.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M290.106 133.176V133.176' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M288.113 133.176H292.098' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M290.106 133.176V133.176' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M288.113 133.176H292.098' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M348.777 140V140' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M346.781 140H350.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M348.777 140V140' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M346.781 140H350.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M407.445 133.176V133.176' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M405.453 133.176H409.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M407.445 133.176V133.176' fill='#b366b3'/>
-<path clip-path='url(#clip7)' d='M405.453 133.176H409.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M117.711 203.937H120.949V111.32H117.711ZM176.379 203.937H179.617V78.691H176.379ZM235.051 203.937H238.285V139.75H235.051ZM293.719 203.937H296.957V125.785H293.719ZM352.387 203.937H355.625V124.906H352.387ZM411.055 203.937H414.293V132.359H411.055Z' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M117.711 203.937H120.949V111.32H117.711ZM176.379 203.937H179.617V78.691H176.379ZM235.051 203.937H238.285V139.75H235.051ZM293.719 203.937H296.957V125.785H293.719ZM352.387 203.937H355.625V124.906H352.387ZM411.055 203.937H414.293V132.359H411.055Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M119.328 111.32V111.32' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M117.336 111.32H121.321' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M119.328 111.32V111.32' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M117.336 111.32H121.321' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M178 78.691V78.691' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M176.008 78.691H179.993' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M178 78.691V78.691' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M176.008 78.691H179.993' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M236.668 139.75V139.75' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M234.676 139.75H238.661' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M236.668 139.75V139.75' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M234.676 139.75H238.661' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M295.336 125.785V125.785' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M293.344 125.785H297.329' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M295.336 125.785V125.785' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M293.344 125.785H297.329' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M354.008 124.906V124.906' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M352.012 124.906H356' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M354.008 124.906V124.906' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M352.012 124.906H356' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M412.676 132.359V132.359' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M410.684 132.359H414.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M412.676 132.359V132.359' fill='#a447a4'/>
-<path clip-path='url(#clip7)' d='M410.684 132.359H414.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M122.941 203.937H126.18V143.57H122.941ZM181.609 203.937H184.848V154.34H181.609ZM240.281 203.937H243.516V141.504H240.281ZM298.949 203.937H302.188V133.363H298.949ZM357.617 203.937H360.856V139.937H357.617ZM416.285 203.937H419.524V133.426H416.285Z' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M122.941 203.937H126.18V143.57H122.941ZM181.609 203.937H184.848V154.34H181.609ZM240.281 203.937H243.516V141.504H240.281ZM298.949 203.937H302.188V133.363H298.949ZM357.617 203.937H360.856V139.937H357.617ZM416.285 203.937H419.524V133.426H416.285Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M124.559 143.57V143.57' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M122.566 143.571H126.551' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M124.559 143.57V143.57' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M122.566 143.571H126.551' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M183.231 154.34V154.34' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M181.238 154.34H185.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M183.231 154.34V154.34' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M181.238 154.34H185.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M241.899 141.504V141.504' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M239.906 141.504H243.891' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M241.899 141.504V141.504' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M239.906 141.504H243.891' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M300.567 133.363V133.363' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M298.574 133.363H302.559' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M300.567 133.363V133.363' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M298.574 133.363H302.559' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M359.238 139.937V139.937' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M357.242 139.938H361.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M359.238 139.937V139.937' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M357.242 139.938H361.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M417.906 133.426V133.426' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M415.914 133.426H419.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M417.906 133.426V133.426' fill='#942994'/>
-<path clip-path='url(#clip7)' d='M415.914 133.426H419.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M128.172 203.937H131.41V118.457H128.172ZM186.84 203.937H190.078V113.699H186.84ZM245.512 203.937H248.746V140.062H245.512ZM304.18 203.937H307.418V133.613H304.18ZM362.848 203.937H366.086V97.101H362.848ZM421.516 203.937H424.754V137.371H421.516Z' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M128.172 203.937H131.41V118.457H128.172ZM186.84 203.937H190.078V113.699H186.84ZM245.512 203.937H248.746V140.062H245.512ZM304.18 203.937H307.418V133.613H304.18ZM362.848 203.937H366.086V97.101H362.848ZM421.516 203.937H424.754V137.371H421.516Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M129.789 118.457V118.457' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M127.797 118.457H131.782' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M129.789 118.457V118.457' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M127.797 118.457H131.782' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M188.461 113.699V113.699' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M186.469 113.7H190.454' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M188.461 113.699V113.699' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M186.469 113.7H190.454' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M247.129 140.062V140.062' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M245.137 140.063H249.122' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M247.129 140.062V140.062' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M245.137 140.063H249.122' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M305.797 133.613V133.613' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M303.804 133.614H307.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M305.797 133.613V133.613' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M303.804 133.614H307.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M364.469 97.101V97.101' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M362.473 97.102H366.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M364.469 97.101V97.101' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M362.473 97.102H366.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M423.137 137.371V137.371' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M421.144 137.371H425.128' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip7)' d='M423.137 137.371V137.371' fill='#850a85'/>
-<path clip-path='url(#clip7)' d='M421.144 137.371H425.128' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(0 -1 1 0 -89.137 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -30.468 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 28.201 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 86.87 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 145.539 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 204.208 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -83.906 202.685)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-55' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -25.237 187.155)'>
-<use x='109.598' xlink:href='#g3-1' y='183.949'/>
-<use x='113.103' xlink:href='#g3-1' y='183.949'/>
-<use x='116.608' xlink:href='#g3-1' y='183.949'/>
-<use x='120.114' xlink:href='#g1-50' y='183.949'/>
-<use x='122.76' xlink:href='#g1-46' y='183.949'/>
-<use x='124.23' xlink:href='#g1-48' y='183.949'/>
-<use x='126.877' xlink:href='#g1-55' y='183.949'/>
-<use x='129.523' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 33.432 246.709)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.101 263.116)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-55' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 150.77 238.255)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 209.439 247.273)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.676 224.29)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-52' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -20.007 216.65)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 38.662 248.087)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 97.331 249.84)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 156 245.707)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 214.669 230.552)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-51' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -73.445 231.93)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -14.776 220.595)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-52' y='183.949'/>
-<use x='121.25' xlink:href='#g1-55' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 43.893 248.65)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 102.562 248.776)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 161.231 246.396)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 219.9 234.811)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -68.215 247.46)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -9.546 252.282)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-57' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.123 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 107.792 241.637)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 166.461 248.462)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.13 241.637)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -62.984 219.781)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-52' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -4.315 187.155)'>
-<use x='109.598' xlink:href='#g3-1' y='183.949'/>
-<use x='113.103' xlink:href='#g3-1' y='183.949'/>
-<use x='116.608' xlink:href='#g3-1' y='183.949'/>
-<use x='120.114' xlink:href='#g1-52' y='183.949'/>
-<use x='122.76' xlink:href='#g1-46' y='183.949'/>
-<use x='124.23' xlink:href='#g1-51' y='183.949'/>
-<use x='126.877' xlink:href='#g1-54' y='183.949'/>
-<use x='129.523' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 54.354 248.212)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.023 234.247)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 171.692 233.37)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 230.361 240.822)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -57.754 252.032)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-57' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 0.915 262.803)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-55' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 59.584 249.965)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.253 241.824)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 176.922 248.4)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 235.591 241.887)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -52.524 226.92)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-51' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 6.145 222.161)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-52' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 64.814 248.525)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 123.483 242.075)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 182.152 205.566)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-55' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 240.821 245.832)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -124.589 307.697)'>
-<use x='114.487' xlink:href='#g0-82' y='183.949'/>
-<use x='120.457' xlink:href='#g0-101' y='183.949'/>
-<use x='124.553' xlink:href='#g0-108' y='183.949'/>
-<use x='126.753' xlink:href='#g0-97' y='183.949'/>
-<use x='131.181' xlink:href='#g0-116' y='183.949'/>
-<use x='134.509' xlink:href='#g0-105' y='183.949'/>
-<use x='136.709' xlink:href='#g0-118' y='183.949'/>
-<use x='140.957' xlink:href='#g0-101' y='183.949'/>
-<use x='148.124' xlink:href='#g0-114' y='183.949'/>
-<use x='151.272' xlink:href='#g0-115' y='183.949'/>
-<use x='154.805' xlink:href='#g0-115' y='183.949'/>
-<use x='161.409' xlink:href='#g2-40' y='183.949'/>
-<use x='164.702' xlink:href='#g2-108' y='183.949'/>
-<use x='166.722' xlink:href='#g2-111' y='183.949'/>
-<use x='170.721' xlink:href='#g2-119' y='183.949'/>
-<use x='176.27' xlink:href='#g2-101' y='183.949'/>
-<use x='180.034' xlink:href='#g2-114' y='183.949'/>
-<use x='185.749' xlink:href='#g2-105' y='183.949'/>
-<use x='187.769' xlink:href='#g2-115' y='183.949'/>
-<use x='193.838' xlink:href='#g2-98' y='183.949'/>
-<use x='198.446' xlink:href='#g2-101' y='183.949'/>
-<use x='202.209' xlink:href='#g2-116' y='183.949'/>
-<use x='205.267' xlink:href='#g2-116' y='183.949'/>
-<use x='208.325' xlink:href='#g2-101' y='183.949'/>
-<use x='212.089' xlink:href='#g2-114' y='183.949'/>
-<use x='214.981' xlink:href='#g2-41' y='183.949'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-rss-2.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-rss-2.svg
deleted file mode 100644
index cb2bbc8..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-r5a-rss-2.svg
+++ /dev/null
@@ -1,854 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='196.567pt' version='1.1' viewBox='106.737 54.996 381.623 196.567' width='381.623pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip8'>
-<path d='M135.949 203.938H487.961V78.692H135.949Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-45' transform='scale(1.6)' xlink:href='#g1-45'/>
-<use id='g2-49' transform='scale(1.6)' xlink:href='#g1-49'/>
-<use id='g2-54' transform='scale(1.6)' xlink:href='#g1-54'/>
-<use id='g2-56' transform='scale(1.6)' xlink:href='#g1-56'/>
-<use id='g2-78' transform='scale(1.6)' xlink:href='#g1-78'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-103' transform='scale(1.6)' xlink:href='#g1-103'/>
-<use id='g2-104' transform='scale(1.6)' xlink:href='#g1-104'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-106' transform='scale(1.6)' xlink:href='#g1-106'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-109' transform='scale(1.6)' xlink:href='#g1-109'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<use id='g2-120' transform='scale(1.6)' xlink:href='#g1-120'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.005V-0.448H0.508V0H0.648L0.503 0.638H0.727L0.956 -0.005Z' id='g1-44'/>
-<path d='M1.465 -0.951V-1.265H0.06V-0.951H1.465Z' id='g1-45'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M2.959 -0.438C2.884 -0.438 2.874 -0.438 2.834 -0.418C2.59 -0.334 2.336 -0.279 2.072 -0.279C1.27 -0.279 0.697 -0.956 0.697 -1.729C0.697 -2.565 1.345 -3.178 2.042 -3.178C2.182 -3.178 2.511 -3.143 2.675 -2.745C2.535 -2.824 2.381 -2.859 2.252 -2.859C1.719 -2.859 1.27 -2.361 1.27 -1.729C1.27 -1.081 1.733 -0.598 2.247 -0.598C2.635 -0.598 3.228 -0.912 3.228 -1.798C3.228 -2.301 3.193 -3.507 2.047 -3.507C1.101 -3.507 0.294 -2.725 0.294 -1.729C0.294 -0.742 1.091 0.05 2.052 0.05C2.511 0.05 2.939 -0.139 3.228 -0.438H2.959ZM2.252 -0.927C1.943 -0.927 1.674 -1.27 1.674 -1.729C1.674 -2.202 1.953 -2.531 2.247 -2.531C2.555 -2.531 2.824 -2.187 2.824 -1.729C2.824 -1.255 2.545 -0.927 2.252 -0.927Z' id='g1-64'/>
-<path d='M2.002 -3.457H1.519L0.149 0H0.558L0.946 -0.986H2.461L2.849 0H3.372L2.002 -3.457ZM1.709 -3.078L2.336 -1.28H1.071L1.709 -3.078Z' id='g1-65'/>
-<path d='M3.083 -0.608C2.735 -0.394 2.575 -0.299 2.077 -0.299C1.305 -0.299 0.837 -1.021 0.837 -1.738C0.837 -2.476 1.35 -3.168 2.077 -3.168C2.406 -3.168 2.745 -3.064 2.974 -2.889L3.054 -3.342C2.705 -3.472 2.426 -3.512 2.062 -3.512C1.076 -3.512 0.339 -2.695 0.339 -1.733C0.339 -0.707 1.121 0.05 2.092 0.05C2.58 0.05 2.785 -0.05 3.113 -0.229L3.083 -0.608Z' id='g1-67'/>
-<path d='M0.488 -3.457V0H1.903C2.8 0 3.522 -0.757 3.522 -1.699C3.522 -2.675 2.795 -3.457 1.903 -3.457H0.488ZM0.976 -0.294V-3.163H1.768C2.451 -3.163 3.034 -2.62 3.034 -1.704C3.034 -0.777 2.426 -0.294 1.768 -0.294H0.976Z' id='g1-68'/>
-<path d='M2.725 -1.624V-1.953H0.986V-3.098H1.714C1.773 -3.098 1.833 -3.093 1.893 -3.093H2.874V-3.442H0.483V0H2.949V-0.389H2.501C2.082 -0.389 1.664 -0.379 1.245 -0.379H0.986V-1.624H2.725Z' id='g1-69'/>
-<path d='M3.173 -1.489H2.057V-1.161H2.735V-0.399C2.516 -0.344 2.301 -0.299 2.077 -0.299C1.31 -0.299 0.837 -1.021 0.837 -1.733C0.837 -2.416 1.3 -3.168 2.052 -3.168C2.511 -3.168 2.8 -3.029 3.049 -2.819L3.128 -3.273C2.785 -3.437 2.481 -3.517 2.102 -3.517C1.096 -3.517 0.339 -2.73 0.339 -1.733C0.339 -0.762 1.091 0.05 2.072 0.05C2.431 0.05 2.854 -0.03 3.173 -0.194V-1.489Z' id='g1-71'/>
-<path d='M2.775 -1.729C2.715 -1.579 2.356 -0.702 2.306 -0.493H2.301C2.267 -0.638 2.037 -1.21 1.988 -1.34L1.131 -3.457H0.523V0H0.941V-3.059H0.946C0.986 -2.884 1.245 -2.227 1.27 -2.172L2.102 -0.105H2.496L3.238 -1.938C3.238 -1.943 3.582 -2.79 3.666 -3.064H3.671V0H4.09V-3.457H3.477L2.775 -1.729Z' id='g1-77'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M3.143 -3.457H2.71V-1.161C2.71 -0.493 2.262 -0.189 1.833 -0.189S0.986 -0.498 0.986 -1.156V-3.457H0.483V-1.166C0.483 -0.433 1.111 0.105 1.828 0.105C2.54 0.105 3.143 -0.438 3.143 -1.166V-3.457Z' id='g1-85'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M2.506 -2.262C2.396 -2.262 2.062 -2.257 1.684 -2.112L1.674 -2.107C1.494 -2.227 1.32 -2.262 1.176 -2.262C0.687 -2.262 0.324 -1.878 0.324 -1.45C0.324 -1.275 0.384 -1.096 0.498 -0.956C0.428 -0.872 0.354 -0.732 0.354 -0.543C0.354 -0.349 0.433 -0.224 0.478 -0.164C0.204 -0.005 0.149 0.224 0.149 0.344C0.149 0.722 0.672 1.021 1.32 1.021C1.973 1.021 2.491 0.722 2.491 0.344C2.491 -0.359 1.619 -0.359 1.405 -0.359H0.941C0.862 -0.359 0.648 -0.359 0.648 -0.618C0.648 -0.717 0.682 -0.767 0.687 -0.777C0.862 -0.667 1.036 -0.633 1.171 -0.633C1.659 -0.633 2.022 -1.016 2.022 -1.445C2.022 -1.604 1.978 -1.748 1.888 -1.883C1.868 -1.913 1.868 -1.918 1.868 -1.923C1.868 -1.943 2.167 -1.943 2.192 -1.943C2.197 -1.943 2.386 -1.943 2.565 -1.923L2.506 -2.262ZM1.176 -0.941C0.907 -0.941 0.707 -1.111 0.707 -1.445C0.707 -1.833 0.956 -1.953 1.171 -1.953C1.44 -1.953 1.639 -1.783 1.639 -1.45C1.639 -1.061 1.39 -0.941 1.176 -0.941ZM1.41 0.03C1.524 0.03 2.112 0.03 2.112 0.349C2.112 0.563 1.738 0.712 1.32 0.712S0.528 0.563 0.528 0.349C0.528 0.324 0.528 0.03 0.932 0.03H1.41Z' id='g1-103'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.161 -2.262 0.932 -2.012 0.832 -1.908V-3.457H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-104'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.986 -3.417H0.483V-2.914H0.986V-3.417ZM-0.324 0.847C-0.095 0.971 0.13 1.016 0.319 1.016C0.663 1.016 0.986 0.752 0.986 0.294V-2.212H0.568V0.329C0.568 0.418 0.568 0.498 0.463 0.583C0.349 0.667 0.209 0.667 0.164 0.667C-0.045 0.667 -0.174 0.573 -0.234 0.518L-0.324 0.847Z' id='g1-106'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M3.786 -1.474C3.786 -1.863 3.671 -2.262 3.059 -2.262C2.64 -2.262 2.381 -2.017 2.262 -1.858C2.212 -1.993 2.087 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.21C2.316 -1.539 2.456 -1.933 2.839 -1.933C3.352 -1.933 3.352 -1.584 3.352 -1.44V0H3.786V-1.474Z' id='g1-109'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M2.316 -2.212H1.883V-0.767C1.883 -0.369 1.544 -0.244 1.255 -0.244C0.887 -0.244 0.847 -0.344 0.847 -0.573V-2.212H0.413V-0.543C0.413 -0.1 0.608 0.05 0.956 0.05C1.161 0.05 1.599 0.01 1.898 -0.229V0H2.316V-2.212Z' id='g1-117'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M2.361 -2.212H1.958C1.554 -1.26 1.275 -0.618 1.255 -0.314C1.245 -0.453 1.156 -0.702 1.066 -0.936C0.986 -1.136 0.907 -1.335 0.817 -1.529L0.503 -2.212H0.075L1.106 0C1.046 0.144 0.946 0.374 0.917 0.438C0.812 0.648 0.742 0.717 0.608 0.717C0.588 0.717 0.403 0.717 0.189 0.628L0.219 0.976C0.264 0.986 0.448 1.016 0.603 1.016C0.802 1.016 0.981 0.941 1.191 0.463L2.361 -2.212Z' id='g1-121'/>
-<path d='M2.112 -2.002V-2.212H0.219V-1.893H0.951C1.011 -1.893 1.071 -1.898 1.131 -1.898H1.519L0.149 -0.219V0H2.127V-0.334H1.355C1.295 -0.334 1.235 -0.329 1.176 -0.329H0.742L2.112 -2.002Z' id='g1-122'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g3-1'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M1.462 -1.91C1.462 -2.851 2.197 -3.425 3.013 -3.434V-4.08C2.367 -4.071 1.775 -3.748 1.408 -3.219V-4.035H0.744V0H1.462V-1.91Z' id='g0-114'/>
-<path d='M3.165 -3.847C2.609 -4.098 2.197 -4.133 1.829 -4.133C1.623 -4.133 0.305 -4.133 0.305 -2.95C0.305 -2.52 0.565 -2.251 0.664 -2.152C1.004 -1.856 1.237 -1.811 1.847 -1.695C2.134 -1.641 2.645 -1.542 2.645 -1.085C2.645 -0.502 1.919 -0.502 1.802 -0.502C1.273 -0.502 0.762 -0.681 0.377 -0.95L0.26 -0.296C0.798 -0.009 1.345 0.099 1.802 0.099C2.385 0.099 3.318 -0.09 3.318 -1.157C3.318 -1.47 3.192 -1.784 2.878 -2.053C2.573 -2.313 2.304 -2.367 1.748 -2.475C1.426 -2.537 0.977 -2.618 0.977 -3.04C0.977 -3.569 1.614 -3.569 1.748 -3.569C2.403 -3.569 2.789 -3.362 3.049 -3.219L3.165 -3.847Z' id='g0-115'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page8'>
-<path d='M194.617 212.793V203.938M253.285 212.793V203.938M311.953 212.793V203.938M370.625 212.793V203.938M429.293 212.793V203.938M194.617 69.836V78.692M253.285 69.836V78.692M311.953 69.836V78.692M370.625 69.836V78.692M429.293 69.836V78.692' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M165.281 208.192V203.938M223.953 208.192V203.938M282.621 208.192V203.938M341.289 208.192V203.938M399.957 208.192V203.938M458.629 208.192V203.938M165.281 74.442V78.692M223.953 74.442V78.692M282.621 74.442V78.692M341.289 74.442V78.692M399.957 74.442V78.692M458.629 74.442V78.692' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 203.938H140.199M135.949 172.625H140.199M135.949 141.317H140.199M135.949 110.004H140.199M135.949 78.692H140.199M487.961 203.938H483.711M487.961 172.625H483.711M487.961 141.317H483.711M487.961 110.004H483.711M487.961 78.692H483.711' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 203.938V78.692H487.961V203.938H135.949Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -21.265 59.571)'>
-<use x='168.285' xlink:href='#g2-97' y='158.367'/>
-<use x='172.353' xlink:href='#g2-108' y='158.367'/>
-<use x='174.373' xlink:href='#g2-108' y='158.367'/>
-<use x='176.393' xlink:href='#g2-111' y='158.367'/>
-<use x='180.863' xlink:href='#g2-99' y='158.367'/>
-<use x='184.627' xlink:href='#g2-45' y='158.367'/>
-<use x='187.449' xlink:href='#g2-116' y='158.367'/>
-<use x='190.507' xlink:href='#g2-101' y='158.367'/>
-<use x='194.271' xlink:href='#g2-115' y='158.367'/>
-<use x='197.517' xlink:href='#g2-116' y='158.367'/>
-<use x='200.575' xlink:href='#g2-49' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 59.571)'>
-<use x='168.285' xlink:href='#g2-97' y='158.367'/>
-<use x='172.353' xlink:href='#g2-108' y='158.367'/>
-<use x='174.373' xlink:href='#g2-108' y='158.367'/>
-<use x='176.393' xlink:href='#g2-111' y='158.367'/>
-<use x='180.863' xlink:href='#g2-99' y='158.367'/>
-<use x='184.627' xlink:href='#g2-45' y='158.367'/>
-<use x='187.449' xlink:href='#g2-116' y='158.367'/>
-<use x='190.507' xlink:href='#g2-101' y='158.367'/>
-<use x='194.271' xlink:href='#g2-115' y='158.367'/>
-<use x='197.517' xlink:href='#g2-116' y='158.367'/>
-<use x='200.575' xlink:href='#g2-78' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 59.571)'>
-<use x='168.285' xlink:href='#g2-115' y='158.367'/>
-<use x='171.531' xlink:href='#g2-104' y='158.367'/>
-<use x='175.904' xlink:href='#g2-54' y='158.367'/>
-<use x='180.138' xlink:href='#g2-98' y='158.367'/>
-<use x='184.746' xlink:href='#g2-101' y='158.367'/>
-<use x='188.509' xlink:href='#g2-110' y='158.367'/>
-<use x='192.882' xlink:href='#g2-99' y='158.367'/>
-<use x='196.646' xlink:href='#g2-104' y='158.367'/>
-<use x='201.018' xlink:href='#g2-78' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 59.571)'>
-<use x='168.285' xlink:href='#g2-115' y='158.367'/>
-<use x='171.531' xlink:href='#g2-104' y='158.367'/>
-<use x='175.904' xlink:href='#g2-56' y='158.367'/>
-<use x='180.138' xlink:href='#g2-98' y='158.367'/>
-<use x='184.746' xlink:href='#g2-101' y='158.367'/>
-<use x='188.509' xlink:href='#g2-110' y='158.367'/>
-<use x='192.882' xlink:href='#g2-99' y='158.367'/>
-<use x='196.646' xlink:href='#g2-104' y='158.367'/>
-<use x='201.018' xlink:href='#g2-78' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 59.571)'>
-<use x='168.285' xlink:href='#g2-120' y='158.367'/>
-<use x='172.187' xlink:href='#g2-109' y='158.367'/>
-<use x='178.912' xlink:href='#g2-97' y='158.367'/>
-<use x='182.98' xlink:href='#g2-108' y='158.367'/>
-<use x='185' xlink:href='#g2-108' y='158.367'/>
-<use x='187.02' xlink:href='#g2-111' y='158.367'/>
-<use x='191.49' xlink:href='#g2-99' y='158.367'/>
-<use x='195.254' xlink:href='#g2-45' y='158.367'/>
-<use x='198.076' xlink:href='#g2-116' y='158.367'/>
-<use x='201.134' xlink:href='#g2-101' y='158.367'/>
-<use x='204.898' xlink:href='#g2-115' y='158.367'/>
-<use x='208.144' xlink:href='#g2-116' y='158.367'/>
-<use x='211.202' xlink:href='#g2-78' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 59.571)'>
-<use x='168.285' xlink:href='#g2-99' y='158.367'/>
-<use x='172.049' xlink:href='#g2-97' y='158.367'/>
-<use x='176.117' xlink:href='#g2-99' y='158.367'/>
-<use x='179.88' xlink:href='#g2-104' y='158.367'/>
-<use x='184.253' xlink:href='#g2-101' y='158.367'/>
-<use x='188.017' xlink:href='#g2-45' y='158.367'/>
-<use x='190.839' xlink:href='#g2-115' y='158.367'/>
-<use x='194.086' xlink:href='#g2-99' y='158.367'/>
-<use x='197.849' xlink:href='#g2-114' y='158.367'/>
-<use x='200.741' xlink:href='#g2-97' y='158.367'/>
-<use x='204.81' xlink:href='#g2-116' y='158.367'/>
-<use x='207.868' xlink:href='#g2-99' y='158.367'/>
-<use x='211.631' xlink:href='#g2-104' y='158.367'/>
-<use x='216.004' xlink:href='#g2-78' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 47.205)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-120' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 15.894)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-53' y='158.367'/>
-<use x='175.048' xlink:href='#g1-120' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -15.418)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-120' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -46.729)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-53' y='158.367'/>
-<use x='175.048' xlink:href='#g1-120' y='158.367'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -78.041)'>
-<use x='168.285' xlink:href='#g1-50' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-120' y='158.367'/>
-</g>
-<path clip-path='url(#clip8)' d='M135.949 141.317H487.961' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M145.356 203.938H148.594V141.317H145.356ZM204.028 203.938H207.266V141.317H204.028ZM262.695 203.938H265.934V141.317H262.695ZM321.363 203.938H324.602V141.317H321.363ZM380.031 203.938H383.27V141.317H380.031ZM438.703 203.938H441.942V141.317H438.703Z' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M145.356 203.938H148.594V141.317H145.356ZM204.028 203.938H207.266V141.317H204.028ZM262.695 203.938H265.934V141.317H262.695ZM321.363 203.938H324.602V141.317H321.363ZM380.031 203.938H383.27V141.317H380.031ZM438.703 203.938H441.942V141.317H438.703Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M146.977 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M144.984 141.317H148.968' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M146.977 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M144.984 141.317H148.968' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M205.645 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M203.652 141.317H207.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M205.645 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M203.652 141.317H207.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M264.313 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M262.32 141.317H266.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M264.313 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M262.32 141.317H266.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M322.984 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M320.992 141.317H324.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M322.984 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M320.992 141.317H324.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M381.652 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M379.66 141.317H383.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M381.652 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M379.66 141.317H383.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M440.32 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M438.328 141.317H442.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M440.32 141.317V141.317' fill='#f0e0f0'/>
-<path clip-path='url(#clip8)' d='M438.328 141.317H442.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M150.586 203.938H153.824V137.809H150.586ZM209.258 203.938H212.496V144.196H209.258ZM267.926 203.938H271.164V140.563H267.926ZM326.594 203.938H329.832V141.754H326.594ZM385.262 203.938H388.5V188.406H385.262ZM443.934 203.938H447.172V110.754H443.934Z' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M150.586 203.938H153.824V137.809H150.586ZM209.258 203.938H212.496V144.196H209.258ZM267.926 203.938H271.164V140.563H267.926ZM326.594 203.938H329.832V141.754H326.594ZM385.262 203.938H388.5V188.406H385.262ZM443.934 203.938H447.172V110.754H443.934Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M152.207 137.809V137.809' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M150.215 137.809H154.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M152.207 137.809V137.809' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M150.215 137.809H154.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M210.875 144.196V144.196' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M208.883 144.195H212.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M210.875 144.196V144.196' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M208.883 144.195H212.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M269.543 140.563V140.563' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M267.551 140.562H271.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M269.543 140.563V140.563' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M267.551 140.562H271.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M328.215 141.754V141.754' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M326.223 141.754H330.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M328.215 141.754V141.754' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M326.223 141.754H330.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M386.883 188.406V188.406' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M384.891 188.406H388.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M386.883 188.406V188.406' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M384.891 188.406H388.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M445.551 110.754V110.754' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M443.559 110.754H447.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M445.551 110.754V110.754' fill='#e1c2e1'/>
-<path clip-path='url(#clip8)' d='M443.559 110.754H447.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M155.817 203.938H159.055V140.313H155.817ZM214.488 203.938H217.727V147.453H214.488ZM273.156 203.938H276.395V139.625H273.156ZM331.824 203.938H335.063V130.043H331.824ZM390.492 203.938H393.731V170.809H390.492ZM449.164 203.938H452.402V120.024H449.164Z' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M155.817 203.938H159.055V140.313H155.817ZM214.488 203.938H217.727V147.453H214.488ZM273.156 203.938H276.395V139.625H273.156ZM331.824 203.938H335.063V130.043H331.824ZM390.492 203.938H393.731V170.809H390.492ZM449.164 203.938H452.402V120.024H449.164Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M157.438 140.313V140.313' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M155.445 140.313H159.429' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M157.438 140.313V140.313' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M155.445 140.313H159.429' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M216.106 147.453V147.453' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M214.113 147.453H218.097' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M216.106 147.453V147.453' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M214.113 147.453H218.097' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M274.774 139.625V139.625' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M272.781 139.625H276.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M274.774 139.625V139.625' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M272.781 139.625H276.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M333.445 130.043V130.043' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M331.453 130.043H335.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M333.445 130.043V130.043' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M331.453 130.043H335.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M392.113 170.809V170.809' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M390.121 170.808H394.105' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M392.113 170.809V170.809' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M390.121 170.808H394.105' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M450.781 120.024V120.024' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M448.789 120.023H452.773' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M450.781 120.024V120.024' fill='#d1a3d1'/>
-<path clip-path='url(#clip8)' d='M448.789 120.023H452.773' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M161.047 203.938H164.285V137.559H161.047ZM219.719 203.938H222.957V144.383H219.719ZM278.387 203.938H281.625V131.36H278.387ZM337.055 203.938H340.293V128.164H337.055ZM395.723 203.938H398.961V138.121H395.723ZM454.395 203.938H457.633V137.559H454.395Z' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M161.047 203.938H164.285V137.559H161.047ZM219.719 203.938H222.957V144.383H219.719ZM278.387 203.938H281.625V131.36H278.387ZM337.055 203.938H340.293V128.164H337.055ZM395.723 203.938H398.961V138.121H395.723ZM454.395 203.938H457.633V137.559H454.395Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M162.668 137.559V137.559' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M160.676 137.558H164.66' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M162.668 137.559V137.559' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M160.676 137.558H164.66' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M221.336 144.383V144.383' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M219.344 144.382H223.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M221.336 144.383V144.383' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M219.344 144.382H223.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M280.004 131.36V131.36' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M278.012 131.36H282' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M280.004 131.36V131.36' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M278.012 131.36H282' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M338.676 128.164V128.164' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M336.684 128.164H340.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M338.676 128.164V128.164' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M336.684 128.164H340.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M397.344 138.121V138.121' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M395.352 138.121H399.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M397.344 138.121V138.121' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M395.352 138.121H399.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M456.012 137.559V137.559' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M454.02 137.558H458.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M456.012 137.559V137.559' fill='#c285c2'/>
-<path clip-path='url(#clip8)' d='M454.02 137.558H458.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M166.278 203.938H169.516V126.723H166.278ZM224.949 203.938H228.188V141.629H224.949ZM283.617 203.938H286.856V104.055H283.617ZM342.285 203.938H345.524V122.84H342.285ZM400.953 203.938H404.192V186.215H400.953ZM459.625 203.938H462.863V140.188H459.625Z' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M166.278 203.938H169.516V126.723H166.278ZM224.949 203.938H228.188V141.629H224.949ZM283.617 203.938H286.856V104.055H283.617ZM342.285 203.938H345.524V122.84H342.285ZM400.953 203.938H404.192V186.215H400.953ZM459.625 203.938H462.863V140.188H459.625Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M167.899 126.723V126.723' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M165.906 126.723H169.89' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M167.899 126.723V126.723' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M165.906 126.723H169.89' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M226.567 141.629V141.629' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M224.574 141.629H228.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M226.567 141.629V141.629' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M224.574 141.629H228.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M285.234 104.055V104.055' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M283.242 104.055H287.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M285.234 104.055V104.055' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M283.242 104.055H287.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M343.906 122.84V122.84' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M341.914 122.84H345.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M343.906 122.84V122.84' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M341.914 122.84H345.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M402.574 186.215V186.215' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M400.582 186.215H404.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M402.574 186.215V186.215' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M400.582 186.215H404.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M461.242 140.188V140.188' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M459.25 140.188H463.234' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M461.242 140.188V140.188' fill='#b366b3'/>
-<path clip-path='url(#clip8)' d='M459.25 140.188H463.234' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M171.508 203.938H174.746V115.828H171.508ZM230.18 203.938H233.414V91.215H230.18ZM288.848 203.938H292.086V95.977H288.848ZM347.516 203.938H350.754V78.692H347.516ZM406.184 203.938H409.422V167.68H406.184ZM464.856 203.938H468.094V130.856H464.856Z' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M171.508 203.938H174.746V115.828H171.508ZM230.18 203.938H233.414V91.215H230.18ZM288.848 203.938H292.086V95.977H288.848ZM347.516 203.938H350.754V78.692H347.516ZM406.184 203.938H409.422V167.68H406.184ZM464.856 203.938H468.094V130.856H464.856Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M173.129 115.828V115.828' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M171.137 115.828H175.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M173.129 115.828V115.828' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M171.137 115.828H175.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M231.797 91.215V91.215' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M229.805 91.215H233.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M231.797 91.215V91.215' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M229.805 91.215H233.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M290.465 95.977V95.977' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M288.473 95.977H292.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M290.465 95.977V95.977' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M288.473 95.977H292.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M349.137 78.692V78.692' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M347.145 78.691H351.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M349.137 78.692V78.692' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M347.145 78.691H351.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M407.805 167.68V167.68' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M405.813 167.68H409.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M407.805 167.68V167.68' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M405.813 167.68H409.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M466.473 130.856V130.856' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M464.481 130.856H468.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M466.473 130.856V130.856' fill='#a447a4'/>
-<path clip-path='url(#clip8)' d='M464.481 130.856H468.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M176.738 203.938H179.977V126.973H176.738ZM235.41 203.938H238.645V141.754H235.41ZM294.078 203.938H297.317V104.18H294.078ZM352.746 203.938H355.984V122.903H352.746ZM411.414 203.938H414.652V186.278H411.414ZM470.086 203.938H473.324V140.688H470.086Z' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M176.738 203.938H179.977V126.973H176.738ZM235.41 203.938H238.645V141.754H235.41ZM294.078 203.938H297.317V104.18H294.078ZM352.746 203.938H355.984V122.903H352.746ZM411.414 203.938H414.652V186.278H411.414ZM470.086 203.938H473.324V140.688H470.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M178.36 126.973V126.973' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M176.367 126.972H180.351' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M178.36 126.973V126.973' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M176.367 126.972H180.351' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M237.027 141.754V141.754' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M235.035 141.754H239.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M237.027 141.754V141.754' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M235.035 141.754H239.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M295.695 104.18V104.18' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M293.703 104.179H297.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M295.695 104.18V104.18' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M293.703 104.179H297.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M354.367 122.903V122.903' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M352.375 122.903H356.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M354.367 122.903V122.903' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M352.375 122.903H356.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M413.035 186.278V186.278' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M411.043 186.277H415.027' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M413.035 186.278V186.278' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M411.043 186.277H415.027' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M471.703 140.688V140.688' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M469.711 140.688H473.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M471.703 140.688V140.688' fill='#942994'/>
-<path clip-path='url(#clip8)' d='M469.711 140.688H473.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M416.645 203.938H419.883V157.973H416.645ZM181.969 203.938H185.207V135.051H181.969ZM240.641 203.938H243.875V142.129H240.641ZM299.309 203.938H302.547V134.676H299.309ZM357.977 203.938H361.215V140.25H357.977ZM475.317 203.938H478.555V131.235H475.317Z' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M416.645 203.938H419.883V157.973H416.645ZM181.969 203.938H185.207V135.051H181.969ZM240.641 203.938H243.875V142.129H240.641ZM299.309 203.938H302.547V134.676H299.309ZM357.977 203.938H361.215V140.25H357.977ZM475.317 203.938H478.555V131.235H475.317Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M418.266 157.973V157.973' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M416.274 157.973H420.258' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M418.266 157.973V157.973' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M416.274 157.973H420.258' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M183.59 135.051V135.051' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M181.598 135.051H185.583' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M183.59 135.051V135.051' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M181.598 135.051H185.583' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M242.258 142.129V142.129' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M240.266 142.129H244.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M242.258 142.129V142.129' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M240.266 142.129H244.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M300.926 134.676V134.676' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M298.933 134.676H302.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M300.926 134.676V134.676' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M298.933 134.676H302.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M359.598 140.25V140.25' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M357.606 140.25H361.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M359.598 140.25V140.25' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M357.606 140.25H361.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M476.934 131.235V131.235' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M474.942 131.235H478.926' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M476.934 131.235V131.235' fill='#850a85'/>
-<path clip-path='url(#clip8)' d='M474.942 131.235H478.926' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip8)' d='M418.387 251.164H487.762V229.188H418.387Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 253.422 88.837)'>
-<use x='168.285' xlink:href='#g1-114' y='147.13'/>
-<use x='170.092' xlink:href='#g1-53' y='147.13'/>
-<use x='172.739' xlink:href='#g1-97' y='147.13'/>
-<use x='175.281' xlink:href='#g1-45' y='147.13'/>
-<use x='177.046' xlink:href='#g1-52' y='147.13'/>
-<use x='179.692' xlink:href='#g1-120' y='147.13'/>
-<use x='182.131' xlink:href='#g1-108' y='147.13'/>
-<use x='183.393' xlink:href='#g1-97' y='147.13'/>
-<use x='185.789' xlink:href='#g1-114' y='147.13'/>
-<use x='187.596' xlink:href='#g1-103' y='147.13'/>
-<use x='190.243' xlink:href='#g1-101' y='147.13'/>
-<use x='192.595' xlink:href='#g1-44' y='147.13'/>
-<use x='195.83' xlink:href='#g1-49' y='147.13'/>
-<use x='198.476' xlink:href='#g1-50' y='147.13'/>
-<use x='201.122' xlink:href='#g1-56' y='147.13'/>
-<use x='203.769' xlink:href='#g1-71' y='147.13'/>
-<use x='207.297' xlink:href='#g1-98' y='147.13'/>
-<use x='168.285' xlink:href='#g1-49' y='152.749'/>
-<use x='170.931' xlink:href='#g1-54' y='152.749'/>
-<use x='173.578' xlink:href='#g1-45' y='152.749'/>
-<use x='175.342' xlink:href='#g1-99' y='152.749'/>
-<use x='177.694' xlink:href='#g1-111' y='152.749'/>
-<use x='180.193' xlink:href='#g1-114' y='152.749'/>
-<use x='182.001' xlink:href='#g1-101' y='152.749'/>
-<use x='186.118' xlink:href='#g1-65' y='152.749'/>
-<use x='189.646' xlink:href='#g1-77' y='152.749'/>
-<use x='194.264' xlink:href='#g1-68' y='152.749'/>
-<use x='199.851' xlink:href='#g1-69' y='152.749'/>
-<use x='203.025' xlink:href='#g1-112' y='152.749'/>
-<use x='205.611' xlink:href='#g1-121' y='152.749'/>
-<use x='208.049' xlink:href='#g1-99' y='152.749'/>
-<use x='212.166' xlink:href='#g1-64' y='152.749'/>
-<use x='215.695' xlink:href='#g1-50' y='152.749'/>
-<use x='218.341' xlink:href='#g1-46' y='152.749'/>
-<use x='219.811' xlink:href='#g1-53' y='152.749'/>
-<use x='222.457' xlink:href='#g1-71' y='152.749'/>
-<use x='225.986' xlink:href='#g1-104' y='152.749'/>
-<use x='228.719' xlink:href='#g1-122' y='152.749'/>
-<use x='168.285' xlink:href='#g1-85' y='158.367'/>
-<use x='171.917' xlink:href='#g1-98' y='158.367'/>
-<use x='174.65' xlink:href='#g1-117' y='158.367'/>
-<use x='177.383' xlink:href='#g1-110' y='158.367'/>
-<use x='180.116' xlink:href='#g1-116' y='158.367'/>
-<use x='182.027' xlink:href='#g1-117' y='158.367'/>
-<use x='186.524' xlink:href='#g1-49' y='158.367'/>
-<use x='189.17' xlink:href='#g1-56' y='158.367'/>
-<use x='191.817' xlink:href='#g1-46' y='158.367'/>
-<use x='193.287' xlink:href='#g1-48' y='158.367'/>
-<use x='195.933' xlink:href='#g1-52' y='158.367'/>
-<use x='198.58' xlink:href='#g1-46' y='158.367'/>
-<use x='200.05' xlink:href='#g1-49' y='158.367'/>
-<use x='202.696' xlink:href='#g1-44' y='158.367'/>
-<use x='205.931' xlink:href='#g1-71' y='158.367'/>
-<use x='209.459' xlink:href='#g1-67' y='158.367'/>
-<use x='212.841' xlink:href='#g1-67' y='158.367'/>
-<use x='217.986' xlink:href='#g1-55' y='158.367'/>
-<use x='220.633' xlink:href='#g1-46' y='158.367'/>
-<use x='222.103' xlink:href='#g1-51' y='158.367'/>
-<use x='224.749' xlink:href='#g1-46' y='158.367'/>
-<use x='226.219' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 -9.757 303.575)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 48.912 303.575)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 107.581 303.575)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 166.25 303.575)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 224.919 303.575)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 283.588 303.575)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 -4.526 300.068)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-54' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 54.143 306.456)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-57' y='158.367'/>
-<use x='175.048' xlink:href='#g1-53' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 112.812 302.824)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-49' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 171.481 304.013)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-57' y='158.367'/>
-<use x='175.048' xlink:href='#g1-57' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 230.15 350.668)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-50' y='158.367'/>
-<use x='175.048' xlink:href='#g1-53' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 288.819 273.015)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-52' y='158.367'/>
-<use x='175.048' xlink:href='#g1-57' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 0.704 302.573)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-50' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 59.373 309.712)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-57' y='158.367'/>
-<use x='175.048' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.042 301.884)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-51' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 176.711 292.303)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-49' y='158.367'/>
-<use x='175.048' xlink:href='#g1-56' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 235.38 333.071)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-53' y='158.367'/>
-<use x='175.048' xlink:href='#g1-51' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 294.049 282.283)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-51' y='158.367'/>
-<use x='175.048' xlink:href='#g1-52' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 5.935 299.818)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-54' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 64.604 306.644)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-57' y='158.367'/>
-<use x='175.048' xlink:href='#g1-53' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 123.273 293.618)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-49' y='158.367'/>
-<use x='175.048' xlink:href='#g1-54' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 181.942 290.424)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-50' y='158.367'/>
-<use x='175.048' xlink:href='#g1-49' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 240.611 300.381)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-53' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 299.28 299.818)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-54' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 11.165 288.984)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-50' y='158.367'/>
-<use x='175.048' xlink:href='#g1-51' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 69.834 303.888)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-57' y='158.367'/>
-<use x='175.048' xlink:href='#g1-57' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 128.503 266.314)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-53' y='158.367'/>
-<use x='175.048' xlink:href='#g1-57' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 187.172 285.101)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-50' y='158.367'/>
-<use x='175.048' xlink:href='#g1-57' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 245.841 348.476)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-50' y='158.367'/>
-<use x='175.048' xlink:href='#g1-56' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 304.51 302.448)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-50' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 16.396 278.088)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-52' y='158.367'/>
-<use x='175.048' xlink:href='#g1-49' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 75.065 253.477)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-56' y='158.367'/>
-<use x='175.048' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 133.734 258.236)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-55' y='158.367'/>
-<use x='175.048' xlink:href='#g1-50' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 192.403 240.952)'>
-<use x='163.396' xlink:href='#g3-1' y='158.367'/>
-<use x='166.901' xlink:href='#g3-1' y='158.367'/>
-<use x='170.407' xlink:href='#g3-1' y='158.367'/>
-<use x='173.912' xlink:href='#g1-50' y='158.367'/>
-<use x='176.558' xlink:href='#g1-46' y='158.367'/>
-<use x='178.029' xlink:href='#g1-52' y='158.367'/>
-<use x='180.675' xlink:href='#g1-54' y='158.367'/>
-<use x='183.321' xlink:href='#g1-120' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 251.072 329.939)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-53' y='158.367'/>
-<use x='175.048' xlink:href='#g1-56' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 309.741 293.117)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-49' y='158.367'/>
-<use x='175.048' xlink:href='#g1-55' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 21.626 289.234)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-50' y='158.367'/>
-<use x='175.048' xlink:href='#g1-51' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 80.295 304.013)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-57' y='158.367'/>
-<use x='175.048' xlink:href='#g1-57' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 138.964 266.44)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-53' y='158.367'/>
-<use x='175.048' xlink:href='#g1-57' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 197.633 285.164)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-50' y='158.367'/>
-<use x='175.048' xlink:href='#g1-57' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 256.302 348.538)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-50' y='158.367'/>
-<use x='175.048' xlink:href='#g1-56' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 314.971 302.949)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-49' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 261.532 320.233)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-55' y='158.367'/>
-<use x='175.048' xlink:href='#g1-51' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 26.856 297.313)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-49' y='158.367'/>
-<use x='175.048' xlink:href='#g1-48' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 85.525 304.389)'>
-<use x='168.285' xlink:href='#g1-48' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-57' y='158.367'/>
-<use x='175.048' xlink:href='#g1-57' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 144.194 296.937)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-49' y='158.367'/>
-<use x='175.048' xlink:href='#g1-49' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 202.863 302.511)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-48' y='158.367'/>
-<use x='175.048' xlink:href='#g1-50' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 320.201 293.493)'>
-<use x='168.285' xlink:href='#g1-49' y='158.367'/>
-<use x='170.931' xlink:href='#g1-46' y='158.367'/>
-<use x='172.401' xlink:href='#g1-49' y='158.367'/>
-<use x='175.048' xlink:href='#g1-54' y='158.367'/>
-</g>
-<g transform='matrix(0 -1 1 0 -45.209 361.494)'>
-<use x='168.285' xlink:href='#g0-82' y='158.367'/>
-<use x='174.255' xlink:href='#g0-101' y='158.367'/>
-<use x='178.351' xlink:href='#g0-108' y='158.367'/>
-<use x='180.551' xlink:href='#g0-97' y='158.367'/>
-<use x='184.979' xlink:href='#g0-116' y='158.367'/>
-<use x='188.307' xlink:href='#g0-105' y='158.367'/>
-<use x='190.507' xlink:href='#g0-118' y='158.367'/>
-<use x='194.755' xlink:href='#g0-101' y='158.367'/>
-<use x='201.922' xlink:href='#g0-114' y='158.367'/>
-<use x='205.07' xlink:href='#g0-115' y='158.367'/>
-<use x='208.603' xlink:href='#g0-115' y='158.367'/>
-<use x='215.207' xlink:href='#g2-40' y='158.367'/>
-<use x='218.5' xlink:href='#g2-108' y='158.367'/>
-<use x='220.521' xlink:href='#g2-111' y='158.367'/>
-<use x='224.52' xlink:href='#g2-119' y='158.367'/>
-<use x='230.068' xlink:href='#g2-101' y='158.367'/>
-<use x='233.832' xlink:href='#g2-114' y='158.367'/>
-<use x='239.547' xlink:href='#g2-105' y='158.367'/>
-<use x='241.567' xlink:href='#g2-115' y='158.367'/>
-<use x='247.636' xlink:href='#g2-98' y='158.367'/>
-<use x='252.244' xlink:href='#g2-101' y='158.367'/>
-<use x='256.008' xlink:href='#g2-116' y='158.367'/>
-<use x='259.066' xlink:href='#g2-116' y='158.367'/>
-<use x='262.124' xlink:href='#g2-101' y='158.367'/>
-<use x='265.887' xlink:href='#g2-114' y='158.367'/>
-<use x='268.779' xlink:href='#g2-41' y='158.367'/>
-</g>
-<path d='M136.149 249.309H349.488V232.317H136.149Z' fill='#ffffff'/>
-<path d='M136.149 249.309H349.488V232.317H136.149Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path d='M139.336 242.804H142.324V234.835H139.336ZM145.313 242.804H148.301V236.828H145.313Z' fill='#f0e0f0'/>
-<path d='M139.336 242.804H142.324V234.835H139.336ZM145.313 242.804H148.301V236.828H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -33.522 84.43)'>
-<use x='185.011' xlink:href='#g2-109' y='158.367'/>
-<use x='191.736' xlink:href='#g2-105' y='158.367'/>
-</g>
-<path d='M163.422 242.805H166.41V234.836H163.422ZM169.398 242.805H172.391V236.828H169.398Z' fill='#e1c2e1'/>
-<path d='M163.422 242.804H166.41V234.835H163.422ZM169.398 242.804H172.391V236.828H169.398Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.56 83.976)'>
-<use x='208.137' xlink:href='#g2-116' y='158.367'/>
-<use x='211.195' xlink:href='#g2-99' y='158.367'/>
-</g>
-<path d='M185.586 242.805H188.574V234.836H185.586ZM191.563 242.805H194.555V236.828H191.563Z' fill='#d1a3d1'/>
-<path d='M185.586 242.804H188.574V234.835H185.586ZM191.563 242.804H194.555V236.828H191.563Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.159 84.43)'>
-<use x='229.9' xlink:href='#g2-106' y='158.367'/>
-<use x='232.155' xlink:href='#g2-101' y='158.367'/>
-</g>
-<path d='M206.949 242.805H209.938V234.836H206.949ZM212.926 242.805H215.914V236.828H212.926Z' fill='#c285c2'/>
-<path d='M206.949 242.804H209.938V234.835H206.949ZM212.926 242.804H215.914V236.828H212.926Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.958 83.47)'>
-<use x='252.061' xlink:href='#g2-115' y='158.367'/>
-<use x='255.307' xlink:href='#g2-110' y='158.367'/>
-</g>
-<path d='M229.91 242.805H232.898V234.836H229.91ZM235.887 242.805H238.875V236.828H235.887Z' fill='#b366b3'/>
-<path d='M229.91 242.804H232.898V234.835H229.91ZM235.887 242.804H238.875V236.828H235.887Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.781 83.47)'>
-<use x='274.845' xlink:href='#g2-114' y='158.367'/>
-<use x='277.737' xlink:href='#g2-112' y='158.367'/>
-</g>
-<path d='M252.516 242.805H255.504V234.836H252.516ZM258.496 242.805H261.484V236.828H258.496Z' fill='#a447a4'/>
-<path d='M252.516 242.804H255.504V234.835H252.516ZM258.496 242.804H261.484V236.828H258.496Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -39.001 84.467)'>
-<use x='303.672' xlink:href='#g2-104' y='158.367'/>
-<use x='308.045' xlink:href='#g2-111' y='158.367'/>
-<use x='312.279' xlink:href='#g2-97' y='158.367'/>
-<use x='316.112' xlink:href='#g2-114' y='158.367'/>
-<use x='319.004' xlink:href='#g2-100' y='158.367'/>
-</g>
-<path d='M287.563 242.805H290.551V234.836H287.563ZM293.543 242.805H296.531V236.828H293.543Z' fill='#942994'/>
-<path d='M287.563 242.804H290.551V234.835H287.563ZM293.543 242.804H296.531V236.828H293.543Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.472 84.467)'>
-<use x='337.19' xlink:href='#g2-103' y='158.367'/>
-<use x='341.424' xlink:href='#g2-108' y='158.367'/>
-<use x='343.444' xlink:href='#g2-105' y='158.367'/>
-<use x='345.464' xlink:href='#g2-98' y='158.367'/>
-<use x='350.072' xlink:href='#g2-99' y='158.367'/>
-</g>
-<path d='M319.551 242.805H322.539V234.836H319.551ZM325.527 242.805H328.52V236.828H325.527Z' fill='#850a85'/>
-<path d='M319.551 242.804H322.539V234.835H319.551ZM325.527 242.804H328.52V236.828H325.527Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.051 84.467)'>
-<use x='366.757' xlink:href='#g2-116' y='158.367'/>
-<use x='369.815' xlink:href='#g2-98' y='158.367'/>
-<use x='374.187' xlink:href='#g2-98' y='158.367'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-spec-rss.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-spec-rss.svg
deleted file mode 100644
index 2c93616..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-spec-rss.svg
+++ /dev/null
@@ -1,713 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='182.025pt' version='1.1' viewBox='106.736 51.674 270.486 182.025' width='270.486pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<defs>
-<clipPath id='clip6'>
-<path d='M135.949 186.074H355.586V60.828H135.949Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-46' transform='scale(1.6)' xlink:href='#g1-46'/>
-<use id='g2-48' transform='scale(1.6)' xlink:href='#g1-48'/>
-<use id='g2-50' transform='scale(1.6)' xlink:href='#g1-50'/>
-<use id='g2-51' transform='scale(1.6)' xlink:href='#g1-51'/>
-<use id='g2-52' transform='scale(1.6)' xlink:href='#g1-52'/>
-<use id='g2-54' transform='scale(1.6)' xlink:href='#g1-54'/>
-<use id='g2-56' transform='scale(1.6)' xlink:href='#g1-56'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-103' transform='scale(1.6)' xlink:href='#g1-103'/>
-<use id='g2-104' transform='scale(1.6)' xlink:href='#g1-104'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-106' transform='scale(1.6)' xlink:href='#g1-106'/>
-<use id='g2-107' transform='scale(1.6)' xlink:href='#g1-107'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-109' transform='scale(1.6)' xlink:href='#g1-109'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<use id='g2-120' transform='scale(1.6)' xlink:href='#g1-120'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.005V-0.448H0.508V0H0.648L0.503 0.638H0.727L0.956 -0.005Z' id='g1-44'/>
-<path d='M1.465 -0.951V-1.265H0.06V-0.951H1.465Z' id='g1-45'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M2.959 -0.438C2.884 -0.438 2.874 -0.438 2.834 -0.418C2.59 -0.334 2.336 -0.279 2.072 -0.279C1.27 -0.279 0.697 -0.956 0.697 -1.729C0.697 -2.565 1.345 -3.178 2.042 -3.178C2.182 -3.178 2.511 -3.143 2.675 -2.745C2.535 -2.824 2.381 -2.859 2.252 -2.859C1.719 -2.859 1.27 -2.361 1.27 -1.729C1.27 -1.081 1.733 -0.598 2.247 -0.598C2.635 -0.598 3.228 -0.912 3.228 -1.798C3.228 -2.301 3.193 -3.507 2.047 -3.507C1.101 -3.507 0.294 -2.725 0.294 -1.729C0.294 -0.742 1.091 0.05 2.052 0.05C2.511 0.05 2.939 -0.139 3.228 -0.438H2.959ZM2.252 -0.927C1.943 -0.927 1.674 -1.27 1.674 -1.729C1.674 -2.202 1.953 -2.531 2.247 -2.531C2.555 -2.531 2.824 -2.187 2.824 -1.729C2.824 -1.255 2.545 -0.927 2.252 -0.927Z' id='g1-64'/>
-<path d='M3.083 -0.608C2.735 -0.394 2.575 -0.299 2.077 -0.299C1.305 -0.299 0.837 -1.021 0.837 -1.738C0.837 -2.476 1.35 -3.168 2.077 -3.168C2.406 -3.168 2.745 -3.064 2.974 -2.889L3.054 -3.342C2.705 -3.472 2.426 -3.512 2.062 -3.512C1.076 -3.512 0.339 -2.695 0.339 -1.733C0.339 -0.707 1.121 0.05 2.092 0.05C2.58 0.05 2.785 -0.05 3.113 -0.229L3.083 -0.608Z' id='g1-67'/>
-<path d='M2.725 -1.624V-1.953H0.986V-3.098H1.714C1.773 -3.098 1.833 -3.093 1.893 -3.093H2.874V-3.442H0.483V0H2.949V-0.389H2.501C2.082 -0.389 1.664 -0.379 1.245 -0.379H0.986V-1.624H2.725Z' id='g1-69'/>
-<path d='M3.173 -1.489H2.057V-1.161H2.735V-0.399C2.516 -0.344 2.301 -0.299 2.077 -0.299C1.31 -0.299 0.837 -1.021 0.837 -1.733C0.837 -2.416 1.3 -3.168 2.052 -3.168C2.511 -3.168 2.8 -3.029 3.049 -2.819L3.128 -3.273C2.785 -3.437 2.481 -3.517 2.102 -3.517C1.096 -3.517 0.339 -2.73 0.339 -1.733C0.339 -0.762 1.091 0.05 2.072 0.05C2.431 0.05 2.854 -0.03 3.173 -0.194V-1.489Z' id='g1-71'/>
-<path d='M3.248 -3.457H2.745V-1.963H0.986V-3.457H0.483V0H0.986V-1.634H2.745V0H3.248V-3.457Z' id='g1-72'/>
-<path d='M0.986 -3.457H0.483V0H0.986V-3.457Z' id='g1-73'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M3.611 -1.714C3.611 -2.745 2.854 -3.562 1.953 -3.562S0.294 -2.745 0.294 -1.714S1.061 0.105 1.953 0.105C2.849 0.105 3.611 -0.687 3.611 -1.714ZM1.953 -0.249C1.35 -0.249 0.797 -0.852 0.797 -1.793C0.797 -2.675 1.355 -3.218 1.953 -3.218S3.108 -2.675 3.108 -1.793C3.108 -0.847 2.555 -0.249 1.953 -0.249Z' id='g1-79'/>
-<path d='M1.868 -1.42C2.511 -1.42 3.083 -1.873 3.083 -2.446C3.083 -2.979 2.555 -3.457 1.833 -3.457H0.488V0H0.991V-1.42H1.868ZM1.709 -3.163C2.271 -3.163 2.63 -2.864 2.63 -2.446C2.63 -2.037 2.291 -1.729 1.709 -1.729H0.976V-3.163H1.709Z' id='g1-80'/>
-<path d='M3.143 -3.457H2.71V-1.161C2.71 -0.493 2.262 -0.189 1.833 -0.189S0.986 -0.498 0.986 -1.156V-3.457H0.483V-1.166C0.483 -0.433 1.111 0.105 1.828 0.105C2.54 0.105 3.143 -0.438 3.143 -1.166V-3.457Z' id='g1-85'/>
-<path d='M1.968 -1.823L3.228 -3.457H2.685L1.724 -2.182L0.742 -3.457H0.149L1.479 -1.823L0.075 0H0.618L1.724 -1.499L2.854 0H3.447L1.968 -1.823Z' id='g1-88'/>
-<path d='M2.934 -3.238V-3.457H0.369V-3.123H1.41C1.479 -3.123 1.539 -3.128 1.609 -3.128H2.291L0.294 -0.229V0H2.964V-0.354H2.466C1.958 -0.354 1.45 -0.344 0.941 -0.344L2.934 -3.238Z' id='g1-90'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M2.506 -2.262C2.396 -2.262 2.062 -2.257 1.684 -2.112L1.674 -2.107C1.494 -2.227 1.32 -2.262 1.176 -2.262C0.687 -2.262 0.324 -1.878 0.324 -1.45C0.324 -1.275 0.384 -1.096 0.498 -0.956C0.428 -0.872 0.354 -0.732 0.354 -0.543C0.354 -0.349 0.433 -0.224 0.478 -0.164C0.204 -0.005 0.149 0.224 0.149 0.344C0.149 0.722 0.672 1.021 1.32 1.021C1.973 1.021 2.491 0.722 2.491 0.344C2.491 -0.359 1.619 -0.359 1.405 -0.359H0.941C0.862 -0.359 0.648 -0.359 0.648 -0.618C0.648 -0.717 0.682 -0.767 0.687 -0.777C0.862 -0.667 1.036 -0.633 1.171 -0.633C1.659 -0.633 2.022 -1.016 2.022 -1.445C2.022 -1.604 1.978 -1.748 1.888 -1.883C1.868 -1.913 1.868 -1.918 1.868 -1.923C1.868 -1.943 2.167 -1.943 2.192 -1.943C2.197 -1.943 2.386 -1.943 2.565 -1.923L2.506 -2.262ZM1.176 -0.941C0.907 -0.941 0.707 -1.111 0.707 -1.445C0.707 -1.833 0.956 -1.953 1.171 -1.953C1.44 -1.953 1.639 -1.783 1.639 -1.45C1.639 -1.061 1.39 -0.941 1.176 -0.941ZM1.41 0.03C1.524 0.03 2.112 0.03 2.112 0.349C2.112 0.563 1.738 0.712 1.32 0.712S0.528 0.563 0.528 0.349C0.528 0.324 0.528 0.03 0.932 0.03H1.41Z' id='g1-103'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.161 -2.262 0.932 -2.012 0.832 -1.908V-3.457H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-104'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.986 -3.417H0.483V-2.914H0.986V-3.417ZM-0.324 0.847C-0.095 0.971 0.13 1.016 0.319 1.016C0.663 1.016 0.986 0.752 0.986 0.294V-2.212H0.568V0.329C0.568 0.418 0.568 0.498 0.463 0.583C0.349 0.667 0.209 0.667 0.164 0.667C-0.045 0.667 -0.174 0.573 -0.234 0.518L-0.324 0.847Z' id='g1-106'/>
-<path d='M1.489 -1.355L2.376 -2.212H1.893L0.827 -1.181V-3.457H0.438V0H0.807V-0.697L1.23 -1.106L2.052 0H2.491L1.489 -1.355Z' id='g1-107'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M3.786 -1.474C3.786 -1.863 3.671 -2.262 3.059 -2.262C2.64 -2.262 2.381 -2.017 2.262 -1.858C2.212 -1.993 2.087 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.21C2.316 -1.539 2.456 -1.933 2.839 -1.933C3.352 -1.933 3.352 -1.584 3.352 -1.44V0H3.786V-1.474Z' id='g1-109'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M2.316 -2.212H1.883V-0.767C1.883 -0.369 1.544 -0.244 1.255 -0.244C0.887 -0.244 0.847 -0.344 0.847 -0.573V-2.212H0.413V-0.543C0.413 -0.1 0.608 0.05 0.956 0.05C1.161 0.05 1.599 0.01 1.898 -0.229V0H2.316V-2.212Z' id='g1-117'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M2.112 -2.002V-2.212H0.219V-1.893H0.951C1.011 -1.893 1.071 -1.898 1.131 -1.898H1.519L0.149 -0.219V0H2.127V-0.334H1.355C1.295 -0.334 1.235 -0.329 1.176 -0.329H0.742L2.112 -2.002Z' id='g1-122'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M1.462 -1.91C1.462 -2.851 2.197 -3.425 3.013 -3.434V-4.08C2.367 -4.071 1.775 -3.748 1.408 -3.219V-4.035H0.744V0H1.462V-1.91Z' id='g0-114'/>
-<path d='M3.165 -3.847C2.609 -4.098 2.197 -4.133 1.829 -4.133C1.623 -4.133 0.305 -4.133 0.305 -2.95C0.305 -2.52 0.565 -2.251 0.664 -2.152C1.004 -1.856 1.237 -1.811 1.847 -1.695C2.134 -1.641 2.645 -1.542 2.645 -1.085C2.645 -0.502 1.919 -0.502 1.802 -0.502C1.273 -0.502 0.762 -0.681 0.377 -0.95L0.26 -0.296C0.798 -0.009 1.345 0.099 1.802 0.099C2.385 0.099 3.318 -0.09 3.318 -1.157C3.318 -1.47 3.192 -1.784 2.878 -2.053C2.573 -2.313 2.304 -2.367 1.748 -2.475C1.426 -2.537 0.977 -2.618 0.977 -3.04C0.977 -3.569 1.614 -3.569 1.748 -3.569C2.403 -3.569 2.789 -3.362 3.049 -3.219L3.165 -3.847Z' id='g0-115'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page6'>
-<path d='M190.86 194.93V186.074M245.766 194.93V186.074M300.676 194.93V186.074M190.86 51.973V60.828M245.766 51.973V60.828M300.676 51.973V60.828' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M163.403 190.324V186.074M218.313 190.324V186.074M273.223 190.324V186.074M328.133 190.324V186.074M163.403 56.574V60.828M218.313 56.574V60.828M273.223 56.574V60.828M328.133 56.574V60.828' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 186.074H140.199M135.949 154.762H140.199M135.949 123.449H140.199M135.949 92.141H140.199M135.949 60.828H140.199M355.586 186.074H351.336M355.586 154.762H351.336M355.586 123.449H351.336M355.586 92.141H351.336M355.586 60.828H351.336' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 186.074V60.828H355.586V186.074H135.949Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -18.291 59.571)'>
-<use x='168.285' xlink:href='#g2-54' y='140.503'/>
-<use x='172.519' xlink:href='#g2-48' y='140.503'/>
-<use x='176.753' xlink:href='#g2-50' y='140.503'/>
-<use x='180.987' xlink:href='#g2-46' y='140.503'/>
-<use x='183.34' xlink:href='#g2-103' y='140.503'/>
-<use x='187.574' xlink:href='#g2-99' y='140.503'/>
-<use x='191.338' xlink:href='#g2-99' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 27.05 59.571)'>
-<use x='168.285' xlink:href='#g2-54' y='140.503'/>
-<use x='172.519' xlink:href='#g2-50' y='140.503'/>
-<use x='176.753' xlink:href='#g2-48' y='140.503'/>
-<use x='180.987' xlink:href='#g2-46' y='140.503'/>
-<use x='183.34' xlink:href='#g2-111' y='140.503'/>
-<use x='187.574' xlink:href='#g2-109' y='140.503'/>
-<use x='194.299' xlink:href='#g2-110' y='140.503'/>
-<use x='198.671' xlink:href='#g2-101' y='140.503'/>
-<use x='202.435' xlink:href='#g2-116' y='140.503'/>
-<use x='205.493' xlink:href='#g2-112' y='140.503'/>
-<use x='209.866' xlink:href='#g2-112' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 78.694 59.571)'>
-<use x='168.285' xlink:href='#g2-54' y='140.503'/>
-<use x='172.519' xlink:href='#g2-50' y='140.503'/>
-<use x='176.753' xlink:href='#g2-51' y='140.503'/>
-<use x='180.987' xlink:href='#g2-46' y='140.503'/>
-<use x='183.34' xlink:href='#g2-120' y='140.503'/>
-<use x='187.242' xlink:href='#g2-97' y='140.503'/>
-<use x='191.31' xlink:href='#g2-108' y='140.503'/>
-<use x='193.33' xlink:href='#g2-97' y='140.503'/>
-<use x='197.398' xlink:href='#g2-110' y='140.503'/>
-<use x='201.771' xlink:href='#g2-99' y='140.503'/>
-<use x='205.535' xlink:href='#g2-98' y='140.503'/>
-<use x='209.907' xlink:href='#g2-109' y='140.503'/>
-<use x='216.632' xlink:href='#g2-107' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 134.081 59.571)'>
-<use x='168.285' xlink:href='#g2-54' y='140.503'/>
-<use x='172.519' xlink:href='#g2-52' y='140.503'/>
-<use x='176.753' xlink:href='#g2-56' y='140.503'/>
-<use x='180.987' xlink:href='#g2-46' y='140.503'/>
-<use x='183.34' xlink:href='#g2-101' y='140.503'/>
-<use x='187.103' xlink:href='#g2-120' y='140.503'/>
-<use x='191.006' xlink:href='#g2-99' y='140.503'/>
-<use x='194.769' xlink:href='#g2-104' y='140.503'/>
-<use x='199.142' xlink:href='#g2-97' y='140.503'/>
-<use x='203.21' xlink:href='#g2-110' y='140.503'/>
-<use x='207.582' xlink:href='#g2-103' y='140.503'/>
-<use x='211.817' xlink:href='#g2-101' y='140.503'/>
-<use x='215.58' xlink:href='#g2-50' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 47.205)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 15.894)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-53' y='140.503'/>
-<use x='175.048' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -15.418)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -46.729)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-53' y='140.503'/>
-<use x='175.048' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -78.041)'>
-<use x='168.285' xlink:href='#g1-50' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-120' y='140.503'/>
-</g>
-<path clip-path='url(#clip6)' d='M135.949 123.449H355.586' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M140.863 186.074H144.102V123.449H140.863ZM195.77 186.074H199.008V123.449H195.77ZM250.68 186.074H253.918V123.449H250.68ZM305.59 186.074H308.828V123.449H305.59Z' fill='#f0e0f0'/>
-<path clip-path='url(#clip6)' d='M140.863 186.074H144.102V123.449H140.863ZM195.77 186.074H199.008V123.449H195.77ZM250.68 186.074H253.918V123.449H250.68ZM305.59 186.074H308.828V123.449H305.59Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M142.481 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip6)' d='M140.488 123.449H144.472' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M142.481 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip6)' d='M140.488 123.449H144.472' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M197.391 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip6)' d='M195.398 123.449H199.383' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M197.391 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip6)' d='M195.398 123.449H199.383' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M252.301 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip6)' d='M250.308 123.449H254.292' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M252.301 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip6)' d='M250.308 123.449H254.292' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M307.211 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip6)' d='M305.219 123.449H309.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M307.211 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip6)' d='M305.219 123.449H309.203' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M146.094 186.074H149.332V123.262H146.094ZM201 186.074H204.238V123.137H201ZM255.91 186.074H259.149V124.141H255.91ZM310.82 186.074H314.059V73.664H310.82Z' fill='#e1c2e1'/>
-<path clip-path='url(#clip6)' d='M146.094 186.074H149.332V123.262H146.094ZM201 186.074H204.238V123.137H201ZM255.91 186.074H259.149V124.141H255.91ZM310.82 186.074H314.059V73.664H310.82Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M147.711 123.262V123.262' fill='#e1c2e1'/>
-<path clip-path='url(#clip6)' d='M145.719 123.262H149.703' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M147.711 123.262V123.262' fill='#e1c2e1'/>
-<path clip-path='url(#clip6)' d='M145.719 123.262H149.703' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M202.621 123.137V123.137' fill='#e1c2e1'/>
-<path clip-path='url(#clip6)' d='M200.629 123.137H204.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M202.621 123.137V123.137' fill='#e1c2e1'/>
-<path clip-path='url(#clip6)' d='M200.629 123.137H204.613' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M257.531 124.141V124.141' fill='#e1c2e1'/>
-<path clip-path='url(#clip6)' d='M255.539 124.141H259.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M257.531 124.141V124.141' fill='#e1c2e1'/>
-<path clip-path='url(#clip6)' d='M255.539 124.141H259.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M312.442 73.664V73.664' fill='#e1c2e1'/>
-<path clip-path='url(#clip6)' d='M310.449 73.664H314.433' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M312.442 73.664V73.664' fill='#e1c2e1'/>
-<path clip-path='url(#clip6)' d='M310.449 73.664H314.433' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M151.324 186.074H154.563V121.762H151.324ZM206.231 186.074H209.469V123.891H206.231ZM261.141 186.074H264.379V121.321H261.141ZM316.051 186.074H319.289V94.52H316.051Z' fill='#d1a3d1'/>
-<path clip-path='url(#clip6)' d='M151.324 186.074H154.563V121.762H151.324ZM206.231 186.074H209.469V123.891H206.231ZM261.141 186.074H264.379V121.321H261.141ZM316.051 186.074H319.289V94.52H316.051Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M152.942 121.762V121.762' fill='#d1a3d1'/>
-<path clip-path='url(#clip6)' d='M150.949 121.762H154.933' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M152.942 121.762V121.762' fill='#d1a3d1'/>
-<path clip-path='url(#clip6)' d='M150.949 121.762H154.933' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M207.852 123.891V123.891' fill='#d1a3d1'/>
-<path clip-path='url(#clip6)' d='M205.86 123.89H209.844' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M207.852 123.891V123.891' fill='#d1a3d1'/>
-<path clip-path='url(#clip6)' d='M205.86 123.89H209.844' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M262.762 121.321V121.321' fill='#d1a3d1'/>
-<path clip-path='url(#clip6)' d='M260.769 121.321H264.753' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M262.762 121.321V121.321' fill='#d1a3d1'/>
-<path clip-path='url(#clip6)' d='M260.769 121.321H264.753' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M317.672 94.52V94.52' fill='#d1a3d1'/>
-<path clip-path='url(#clip6)' d='M315.68 94.52H319.664' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M317.672 94.52V94.52' fill='#d1a3d1'/>
-<path clip-path='url(#clip6)' d='M315.68 94.52H319.664' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M156.555 186.074H159.793V122.449H156.555ZM211.461 186.074H214.699V124.328H211.461ZM266.371 186.074H269.609V124.953H266.371ZM321.281 186.074H324.52V106.168H321.281Z' fill='#c285c2'/>
-<path clip-path='url(#clip6)' d='M156.555 186.074H159.793V122.449H156.555ZM211.461 186.074H214.699V124.328H211.461ZM266.371 186.074H269.609V124.953H266.371ZM321.281 186.074H324.52V106.168H321.281Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M158.172 122.449V122.449' fill='#c285c2'/>
-<path clip-path='url(#clip6)' d='M156.18 122.449H160.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M158.172 122.449V122.449' fill='#c285c2'/>
-<path clip-path='url(#clip6)' d='M156.18 122.449H160.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M213.082 124.328V124.328' fill='#c285c2'/>
-<path clip-path='url(#clip6)' d='M211.09 124.329H215.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M213.082 124.328V124.328' fill='#c285c2'/>
-<path clip-path='url(#clip6)' d='M211.09 124.329H215.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M267.992 124.953V124.953' fill='#c285c2'/>
-<path clip-path='url(#clip6)' d='M266 124.953H269.985' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M267.992 124.953V124.953' fill='#c285c2'/>
-<path clip-path='url(#clip6)' d='M266 124.953H269.985' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M322.902 106.168V106.168' fill='#c285c2'/>
-<path clip-path='url(#clip6)' d='M320.91 106.168H324.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M322.902 106.168V106.168' fill='#c285c2'/>
-<path clip-path='url(#clip6)' d='M320.91 106.168H324.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M161.785 186.074H165.024V123.891H161.785ZM216.692 186.074H219.93V122.262H216.692ZM271.602 186.074H274.84V127.395H271.602ZM326.512 186.074H329.75V125.328H326.512Z' fill='#b366b3'/>
-<path clip-path='url(#clip6)' d='M161.785 186.074H165.024V123.891H161.785ZM216.692 186.074H219.93V122.262H216.692ZM271.602 186.074H274.84V127.395H271.602ZM326.512 186.074H329.75V125.328H326.512Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M163.403 123.891V123.891' fill='#b366b3'/>
-<path clip-path='url(#clip6)' d='M161.41 123.89H165.394' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M163.403 123.891V123.891' fill='#b366b3'/>
-<path clip-path='url(#clip6)' d='M161.41 123.89H165.394' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M218.313 122.262V122.262' fill='#b366b3'/>
-<path clip-path='url(#clip6)' d='M216.321 122.262H220.305' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M218.313 122.262V122.262' fill='#b366b3'/>
-<path clip-path='url(#clip6)' d='M216.321 122.262H220.305' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M273.223 127.395V127.395' fill='#b366b3'/>
-<path clip-path='url(#clip6)' d='M271.23 127.394H275.215' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M273.223 127.395V127.395' fill='#b366b3'/>
-<path clip-path='url(#clip6)' d='M271.23 127.394H275.215' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M328.133 125.328V125.328' fill='#b366b3'/>
-<path clip-path='url(#clip6)' d='M326.141 125.329H330.125' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M328.133 125.328V125.328' fill='#b366b3'/>
-<path clip-path='url(#clip6)' d='M326.141 125.329H330.125' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M167.016 186.074H170.254V104.914H167.016ZM221.922 186.074H225.16V113.18H221.922ZM276.832 186.074H280.07V100.781H276.832ZM331.742 186.074H334.981V71.848H331.742Z' fill='#a447a4'/>
-<path clip-path='url(#clip6)' d='M167.016 186.074H170.254V104.914H167.016ZM221.922 186.074H225.16V113.18H221.922ZM276.832 186.074H280.07V100.781H276.832ZM331.742 186.074H334.981V71.848H331.742Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M168.633 104.914V104.914' fill='#a447a4'/>
-<path clip-path='url(#clip6)' d='M166.641 104.914H170.625' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M168.633 104.914V104.914' fill='#a447a4'/>
-<path clip-path='url(#clip6)' d='M166.641 104.914H170.625' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M223.543 113.18V113.18' fill='#a447a4'/>
-<path clip-path='url(#clip6)' d='M221.551 113.18H225.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M223.543 113.18V113.18' fill='#a447a4'/>
-<path clip-path='url(#clip6)' d='M221.551 113.18H225.535' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M278.453 100.781V100.781' fill='#a447a4'/>
-<path clip-path='url(#clip6)' d='M276.461 100.781H280.446' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M278.453 100.781V100.781' fill='#a447a4'/>
-<path clip-path='url(#clip6)' d='M276.461 100.781H280.446' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M333.363 71.848V71.848' fill='#a447a4'/>
-<path clip-path='url(#clip6)' d='M331.371 71.848H335.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M333.363 71.848V71.848' fill='#a447a4'/>
-<path clip-path='url(#clip6)' d='M331.371 71.848H335.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M172.246 186.074H175.485V123.891H172.246ZM227.153 186.074H230.391V122.324H227.153ZM282.063 186.074H285.301V127.395H282.063ZM336.973 186.074H340.211V123.891H336.973Z' fill='#942994'/>
-<path clip-path='url(#clip6)' d='M172.246 186.074H175.485V123.891H172.246ZM227.153 186.074H230.391V122.324H227.153ZM282.063 186.074H285.301V127.395H282.063ZM336.973 186.074H340.211V123.891H336.973Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M173.863 123.891V123.891' fill='#942994'/>
-<path clip-path='url(#clip6)' d='M171.871 123.89H175.855' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M173.863 123.891V123.891' fill='#942994'/>
-<path clip-path='url(#clip6)' d='M171.871 123.89H175.855' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M228.774 122.324V122.324' fill='#942994'/>
-<path clip-path='url(#clip6)' d='M226.782 122.325H230.766' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M228.774 122.324V122.324' fill='#942994'/>
-<path clip-path='url(#clip6)' d='M226.782 122.325H230.766' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M283.684 127.395V127.395' fill='#942994'/>
-<path clip-path='url(#clip6)' d='M281.691 127.394H285.676' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M283.684 127.395V127.395' fill='#942994'/>
-<path clip-path='url(#clip6)' d='M281.691 127.394H285.676' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M338.594 123.891V123.891' fill='#942994'/>
-<path clip-path='url(#clip6)' d='M336.602 123.89H340.586' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M338.594 123.891V123.891' fill='#942994'/>
-<path clip-path='url(#clip6)' d='M336.602 123.89H340.586' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M177.477 186.074H180.715V104.602H177.477ZM232.383 186.074H235.621V113.367H232.383ZM287.293 186.074H290.531V112.117H287.293ZM342.203 186.074H345.442V103.16H342.203Z' fill='#850a85'/>
-<path clip-path='url(#clip6)' d='M177.477 186.074H180.715V104.602H177.477ZM232.383 186.074H235.621V113.367H232.383ZM287.293 186.074H290.531V112.117H287.293ZM342.203 186.074H345.442V103.16H342.203Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M179.094 104.602V104.602' fill='#850a85'/>
-<path clip-path='url(#clip6)' d='M177.102 104.601H181.086' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M179.094 104.602V104.602' fill='#850a85'/>
-<path clip-path='url(#clip6)' d='M177.102 104.601H181.086' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M234.004 113.367V113.367' fill='#850a85'/>
-<path clip-path='url(#clip6)' d='M232.012 113.368H235.996' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M234.004 113.367V113.367' fill='#850a85'/>
-<path clip-path='url(#clip6)' d='M232.012 113.368H235.996' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M288.914 112.117V112.117' fill='#850a85'/>
-<path clip-path='url(#clip6)' d='M286.922 112.117H290.907' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M288.914 112.117V112.117' fill='#850a85'/>
-<path clip-path='url(#clip6)' d='M286.922 112.117H290.907' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M343.824 103.16V103.16' fill='#850a85'/>
-<path clip-path='url(#clip6)' d='M341.832 103.16H345.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M343.824 103.16V103.16' fill='#850a85'/>
-<path clip-path='url(#clip6)' d='M341.832 103.16H345.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M182.707 186.074H185.945V123.324H182.707ZM237.613 186.074H240.852V117.754H237.613ZM292.524 186.074H295.762V121.508H292.524ZM347.434 186.074H350.672V117.375H347.434Z' fill='#760076'/>
-<path clip-path='url(#clip6)' d='M182.707 186.074H185.945V123.324H182.707ZM237.613 186.074H240.852V117.754H237.613ZM292.524 186.074H295.762V121.508H292.524ZM347.434 186.074H350.672V117.375H347.434Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M184.324 123.324V123.324' fill='#760076'/>
-<path clip-path='url(#clip6)' d='M182.332 123.325H186.316' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M184.324 123.324V123.324' fill='#760076'/>
-<path clip-path='url(#clip6)' d='M182.332 123.325H186.316' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M239.234 117.754V117.754' fill='#760076'/>
-<path clip-path='url(#clip6)' d='M237.243 117.754H241.227' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M239.234 117.754V117.754' fill='#760076'/>
-<path clip-path='url(#clip6)' d='M237.243 117.754H241.227' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M294.145 121.508V121.508' fill='#760076'/>
-<path clip-path='url(#clip6)' d='M292.152 121.508H296.137' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M294.145 121.508V121.508' fill='#760076'/>
-<path clip-path='url(#clip6)' d='M292.152 121.508H296.137' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M349.055 117.375V117.375' fill='#760076'/>
-<path clip-path='url(#clip6)' d='M347.063 117.375H351.047' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M349.055 117.375V117.375' fill='#760076'/>
-<path clip-path='url(#clip6)' d='M347.063 117.375H351.047' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip6)' d='M287.102 233.301H355.387V211.324H287.102Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 122.136 88.837)'>
-<use x='168.285' xlink:href='#g1-72' y='129.265'/>
-<use x='172.021' xlink:href='#g1-80' y='129.265'/>
-<use x='175.402' xlink:href='#g1-45' y='129.265'/>
-<use x='177.167' xlink:href='#g1-90' y='129.265'/>
-<use x='180.401' xlink:href='#g1-52' y='129.265'/>
-<use x='183.047' xlink:href='#g1-45' y='129.265'/>
-<use x='184.812' xlink:href='#g1-71' y='129.265'/>
-<use x='188.34' xlink:href='#g1-52' y='129.265'/>
-<use x='190.987' xlink:href='#g1-44' y='129.265'/>
-<use x='194.221' xlink:href='#g1-49' y='129.265'/>
-<use x='196.867' xlink:href='#g1-54' y='129.265'/>
-<use x='199.514' xlink:href='#g1-71' y='129.265'/>
-<use x='203.042' xlink:href='#g1-98' y='129.265'/>
-<use x='168.285' xlink:href='#g1-56' y='134.884'/>
-<use x='170.931' xlink:href='#g1-45' y='134.884'/>
-<use x='172.695' xlink:href='#g1-99' y='134.884'/>
-<use x='175.048' xlink:href='#g1-111' y='134.884'/>
-<use x='177.547' xlink:href='#g1-114' y='134.884'/>
-<use x='179.355' xlink:href='#g1-101' y='134.884'/>
-<use x='183.471' xlink:href='#g1-73' y='134.884'/>
-<use x='184.941' xlink:href='#g1-110' y='134.884'/>
-<use x='187.674' xlink:href='#g1-116' y='134.884'/>
-<use x='189.585' xlink:href='#g1-101' y='134.884'/>
-<use x='191.938' xlink:href='#g1-108' y='134.884'/>
-<use x='194.965' xlink:href='#g1-88' y='134.884'/>
-<use x='198.493' xlink:href='#g1-69' y='134.884'/>
-<use x='201.667' xlink:href='#g1-79' y='134.884'/>
-<use x='205.576' xlink:href='#g1-78' y='134.884'/>
-<use x='211.076' xlink:href='#g1-64' y='134.884'/>
-<use x='214.605' xlink:href='#g1-50' y='134.884'/>
-<use x='217.251' xlink:href='#g1-46' y='134.884'/>
-<use x='218.721' xlink:href='#g1-55' y='134.884'/>
-<use x='221.368' xlink:href='#g1-71' y='134.884'/>
-<use x='224.896' xlink:href='#g1-104' y='134.884'/>
-<use x='227.629' xlink:href='#g1-122' y='134.884'/>
-<use x='168.285' xlink:href='#g1-85' y='140.503'/>
-<use x='171.917' xlink:href='#g1-98' y='140.503'/>
-<use x='174.65' xlink:href='#g1-117' y='140.503'/>
-<use x='177.383' xlink:href='#g1-110' y='140.503'/>
-<use x='180.116' xlink:href='#g1-116' y='140.503'/>
-<use x='182.027' xlink:href='#g1-117' y='140.503'/>
-<use x='186.524' xlink:href='#g1-49' y='140.503'/>
-<use x='189.17' xlink:href='#g1-56' y='140.503'/>
-<use x='191.817' xlink:href='#g1-46' y='140.503'/>
-<use x='193.287' xlink:href='#g1-48' y='140.503'/>
-<use x='195.933' xlink:href='#g1-52' y='140.503'/>
-<use x='198.58' xlink:href='#g1-46' y='140.503'/>
-<use x='200.05' xlink:href='#g1-49' y='140.503'/>
-<use x='202.696' xlink:href='#g1-44' y='140.503'/>
-<use x='205.931' xlink:href='#g1-71' y='140.503'/>
-<use x='209.459' xlink:href='#g1-67' y='140.503'/>
-<use x='212.841' xlink:href='#g1-67' y='140.503'/>
-<use x='217.986' xlink:href='#g1-55' y='140.503'/>
-<use x='220.633' xlink:href='#g1-46' y='140.503'/>
-<use x='222.103' xlink:href='#g1-52' y='140.503'/>
-<use x='224.749' xlink:href='#g1-46' y='140.503'/>
-<use x='226.219' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 3.612 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 58.522 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.431 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 168.341 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 8.843 285.523)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 63.752 285.398)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.662 286.4)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 173.571 235.926)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-55' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 14.073 284.02)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-51' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 68.983 286.149)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 123.892 283.582)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-51' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 178.802 256.779)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-52' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 19.304 284.709)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 74.213 286.588)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 129.123 287.214)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-56' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 184.032 268.427)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-56' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 24.534 286.149)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 79.444 284.521)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 134.353 289.656)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-52' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 189.263 287.59)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-55' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 29.765 267.175)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-51' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 84.674 275.441)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 139.584 263.042)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-51' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 194.493 234.11)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-56' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 34.995 286.149)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 89.905 284.584)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 144.814 289.656)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-52' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 199.724 286.149)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 40.226 266.862)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-51' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 95.135 275.629)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 150.045 274.376)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-56' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 204.954 265.421)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-51' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 45.456 285.586)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 100.366 280.012)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 155.275 283.77)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-51' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 210.185 279.637)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -27.345 343.63)'>
-<use x='168.285' xlink:href='#g0-82' y='140.503'/>
-<use x='174.255' xlink:href='#g0-101' y='140.503'/>
-<use x='178.351' xlink:href='#g0-108' y='140.503'/>
-<use x='180.551' xlink:href='#g0-97' y='140.503'/>
-<use x='184.979' xlink:href='#g0-116' y='140.503'/>
-<use x='188.307' xlink:href='#g0-105' y='140.503'/>
-<use x='190.507' xlink:href='#g0-118' y='140.503'/>
-<use x='194.755' xlink:href='#g0-101' y='140.503'/>
-<use x='201.922' xlink:href='#g0-114' y='140.503'/>
-<use x='205.07' xlink:href='#g0-115' y='140.503'/>
-<use x='208.603' xlink:href='#g0-115' y='140.503'/>
-<use x='215.207' xlink:href='#g2-40' y='140.503'/>
-<use x='218.5' xlink:href='#g2-108' y='140.503'/>
-<use x='220.521' xlink:href='#g2-111' y='140.503'/>
-<use x='224.52' xlink:href='#g2-119' y='140.503'/>
-<use x='230.068' xlink:href='#g2-101' y='140.503'/>
-<use x='233.832' xlink:href='#g2-114' y='140.503'/>
-<use x='239.547' xlink:href='#g2-105' y='140.503'/>
-<use x='241.567' xlink:href='#g2-115' y='140.503'/>
-<use x='247.636' xlink:href='#g2-98' y='140.503'/>
-<use x='252.244' xlink:href='#g2-101' y='140.503'/>
-<use x='256.008' xlink:href='#g2-116' y='140.503'/>
-<use x='259.066' xlink:href='#g2-116' y='140.503'/>
-<use x='262.124' xlink:href='#g2-101' y='140.503'/>
-<use x='265.887' xlink:href='#g2-114' y='140.503'/>
-<use x='268.779' xlink:href='#g2-41' y='140.503'/>
-</g>
-<path d='M136.149 231.446H376.824V214.453H136.149Z' fill='#ffffff'/>
-<path d='M136.149 231.446H376.824V214.453H136.149Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path d='M139.336 224.941H142.324V216.972H139.336ZM145.313 224.941H148.301V218.964H145.313Z' fill='#f0e0f0'/>
-<path d='M139.336 224.941H142.324V216.972H139.336ZM145.313 224.941H148.301V218.964H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -33.522 84.43)'>
-<use x='185.011' xlink:href='#g2-109' y='140.503'/>
-<use x='191.736' xlink:href='#g2-105' y='140.503'/>
-</g>
-<path d='M163.422 224.941H166.41V216.973H163.422ZM169.398 224.941H172.391V218.965H169.398Z' fill='#e1c2e1'/>
-<path d='M163.422 224.941H166.41V216.972H163.422ZM169.398 224.941H172.391V218.964H169.398Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.56 83.976)'>
-<use x='208.137' xlink:href='#g2-116' y='140.503'/>
-<use x='211.195' xlink:href='#g2-99' y='140.503'/>
-</g>
-<path d='M185.586 224.941H188.574V216.973H185.586ZM191.563 224.941H194.555V218.965H191.563Z' fill='#d1a3d1'/>
-<path d='M185.586 224.941H188.574V216.972H185.586ZM191.563 224.941H194.555V218.964H191.563Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.159 84.43)'>
-<use x='229.9' xlink:href='#g2-106' y='140.503'/>
-<use x='232.155' xlink:href='#g2-101' y='140.503'/>
-</g>
-<path d='M206.949 224.941H209.938V216.973H206.949ZM212.926 224.941H215.914V218.965H212.926Z' fill='#c285c2'/>
-<path d='M206.949 224.941H209.938V216.972H206.949ZM212.926 224.941H215.914V218.964H212.926Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.958 83.47)'>
-<use x='252.061' xlink:href='#g2-115' y='140.503'/>
-<use x='255.307' xlink:href='#g2-110' y='140.503'/>
-</g>
-<path d='M229.91 224.941H232.898V216.973H229.91ZM235.887 224.941H238.875V218.965H235.887Z' fill='#b366b3'/>
-<path d='M229.91 224.941H232.898V216.972H229.91ZM235.887 224.941H238.875V218.964H235.887Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.781 83.47)'>
-<use x='274.845' xlink:href='#g2-114' y='140.503'/>
-<use x='277.737' xlink:href='#g2-112' y='140.503'/>
-</g>
-<path d='M252.516 224.941H255.504V216.973H252.516ZM258.496 224.941H261.484V218.965H258.496Z' fill='#a447a4'/>
-<path d='M252.516 224.941H255.504V216.972H252.516ZM258.496 224.941H261.484V218.964H258.496Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -39.001 84.467)'>
-<use x='303.672' xlink:href='#g2-104' y='140.503'/>
-<use x='308.045' xlink:href='#g2-111' y='140.503'/>
-<use x='312.279' xlink:href='#g2-97' y='140.503'/>
-<use x='316.112' xlink:href='#g2-114' y='140.503'/>
-<use x='319.004' xlink:href='#g2-100' y='140.503'/>
-</g>
-<path d='M287.563 224.941H290.551V216.973H287.563ZM293.543 224.941H296.531V218.965H293.543Z' fill='#942994'/>
-<path d='M287.563 224.941H290.551V216.972H287.563ZM293.543 224.941H296.531V218.964H293.543Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.472 84.467)'>
-<use x='337.19' xlink:href='#g2-103' y='140.503'/>
-<use x='341.424' xlink:href='#g2-108' y='140.503'/>
-<use x='343.444' xlink:href='#g2-105' y='140.503'/>
-<use x='345.464' xlink:href='#g2-98' y='140.503'/>
-<use x='350.072' xlink:href='#g2-99' y='140.503'/>
-</g>
-<path d='M319.551 224.941H322.539V216.973H319.551ZM325.527 224.941H328.52V218.965H325.527Z' fill='#850a85'/>
-<path d='M319.551 224.941H322.539V216.972H319.551ZM325.527 224.941H328.52V218.964H325.527Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.051 84.467)'>
-<use x='366.757' xlink:href='#g2-116' y='140.503'/>
-<use x='369.815' xlink:href='#g2-98' y='140.503'/>
-<use x='374.187' xlink:href='#g2-98' y='140.503'/>
-</g>
-<path d='M346.699 224.941H349.688V216.973H346.699ZM352.676 224.941H355.664V218.965H352.676Z' fill='#760076'/>
-<path d='M346.699 224.941H349.688V216.972H346.699ZM352.676 224.941H355.664V218.964H352.676Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.145 84.43)'>
-<use x='393.997' xlink:href='#g2-115' y='140.503'/>
-<use x='397.243' xlink:href='#g2-109' y='140.503'/>
-<use x='403.968' xlink:href='#g2-105' y='140.503'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-spec.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-spec.svg
deleted file mode 100644
index af2b41b..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-spec.svg
+++ /dev/null
@@ -1,713 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='182.025pt' version='1.1' viewBox='52.938 51.674 270.487 182.025' width='270.487pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<defs>
-<clipPath id='clip5'>
-<path d='M82.148 186.074H301.789V60.828H82.148Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-46' transform='scale(1.6)' xlink:href='#g1-46'/>
-<use id='g2-48' transform='scale(1.6)' xlink:href='#g1-48'/>
-<use id='g2-50' transform='scale(1.6)' xlink:href='#g1-50'/>
-<use id='g2-51' transform='scale(1.6)' xlink:href='#g1-51'/>
-<use id='g2-52' transform='scale(1.6)' xlink:href='#g1-52'/>
-<use id='g2-54' transform='scale(1.6)' xlink:href='#g1-54'/>
-<use id='g2-56' transform='scale(1.6)' xlink:href='#g1-56'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-103' transform='scale(1.6)' xlink:href='#g1-103'/>
-<use id='g2-104' transform='scale(1.6)' xlink:href='#g1-104'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-106' transform='scale(1.6)' xlink:href='#g1-106'/>
-<use id='g2-107' transform='scale(1.6)' xlink:href='#g1-107'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-109' transform='scale(1.6)' xlink:href='#g1-109'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<use id='g2-120' transform='scale(1.6)' xlink:href='#g1-120'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.005V-0.448H0.508V0H0.648L0.503 0.638H0.727L0.956 -0.005Z' id='g1-44'/>
-<path d='M1.465 -0.951V-1.265H0.06V-0.951H1.465Z' id='g1-45'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M2.959 -0.438C2.884 -0.438 2.874 -0.438 2.834 -0.418C2.59 -0.334 2.336 -0.279 2.072 -0.279C1.27 -0.279 0.697 -0.956 0.697 -1.729C0.697 -2.565 1.345 -3.178 2.042 -3.178C2.182 -3.178 2.511 -3.143 2.675 -2.745C2.535 -2.824 2.381 -2.859 2.252 -2.859C1.719 -2.859 1.27 -2.361 1.27 -1.729C1.27 -1.081 1.733 -0.598 2.247 -0.598C2.635 -0.598 3.228 -0.912 3.228 -1.798C3.228 -2.301 3.193 -3.507 2.047 -3.507C1.101 -3.507 0.294 -2.725 0.294 -1.729C0.294 -0.742 1.091 0.05 2.052 0.05C2.511 0.05 2.939 -0.139 3.228 -0.438H2.959ZM2.252 -0.927C1.943 -0.927 1.674 -1.27 1.674 -1.729C1.674 -2.202 1.953 -2.531 2.247 -2.531C2.555 -2.531 2.824 -2.187 2.824 -1.729C2.824 -1.255 2.545 -0.927 2.252 -0.927Z' id='g1-64'/>
-<path d='M3.083 -0.608C2.735 -0.394 2.575 -0.299 2.077 -0.299C1.305 -0.299 0.837 -1.021 0.837 -1.738C0.837 -2.476 1.35 -3.168 2.077 -3.168C2.406 -3.168 2.745 -3.064 2.974 -2.889L3.054 -3.342C2.705 -3.472 2.426 -3.512 2.062 -3.512C1.076 -3.512 0.339 -2.695 0.339 -1.733C0.339 -0.707 1.121 0.05 2.092 0.05C2.58 0.05 2.785 -0.05 3.113 -0.229L3.083 -0.608Z' id='g1-67'/>
-<path d='M2.725 -1.624V-1.953H0.986V-3.098H1.714C1.773 -3.098 1.833 -3.093 1.893 -3.093H2.874V-3.442H0.483V0H2.949V-0.389H2.501C2.082 -0.389 1.664 -0.379 1.245 -0.379H0.986V-1.624H2.725Z' id='g1-69'/>
-<path d='M3.173 -1.489H2.057V-1.161H2.735V-0.399C2.516 -0.344 2.301 -0.299 2.077 -0.299C1.31 -0.299 0.837 -1.021 0.837 -1.733C0.837 -2.416 1.3 -3.168 2.052 -3.168C2.511 -3.168 2.8 -3.029 3.049 -2.819L3.128 -3.273C2.785 -3.437 2.481 -3.517 2.102 -3.517C1.096 -3.517 0.339 -2.73 0.339 -1.733C0.339 -0.762 1.091 0.05 2.072 0.05C2.431 0.05 2.854 -0.03 3.173 -0.194V-1.489Z' id='g1-71'/>
-<path d='M3.248 -3.457H2.745V-1.963H0.986V-3.457H0.483V0H0.986V-1.634H2.745V0H3.248V-3.457Z' id='g1-72'/>
-<path d='M0.986 -3.457H0.483V0H0.986V-3.457Z' id='g1-73'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M3.611 -1.714C3.611 -2.745 2.854 -3.562 1.953 -3.562S0.294 -2.745 0.294 -1.714S1.061 0.105 1.953 0.105C2.849 0.105 3.611 -0.687 3.611 -1.714ZM1.953 -0.249C1.35 -0.249 0.797 -0.852 0.797 -1.793C0.797 -2.675 1.355 -3.218 1.953 -3.218S3.108 -2.675 3.108 -1.793C3.108 -0.847 2.555 -0.249 1.953 -0.249Z' id='g1-79'/>
-<path d='M1.868 -1.42C2.511 -1.42 3.083 -1.873 3.083 -2.446C3.083 -2.979 2.555 -3.457 1.833 -3.457H0.488V0H0.991V-1.42H1.868ZM1.709 -3.163C2.271 -3.163 2.63 -2.864 2.63 -2.446C2.63 -2.037 2.291 -1.729 1.709 -1.729H0.976V-3.163H1.709Z' id='g1-80'/>
-<path d='M3.143 -3.457H2.71V-1.161C2.71 -0.493 2.262 -0.189 1.833 -0.189S0.986 -0.498 0.986 -1.156V-3.457H0.483V-1.166C0.483 -0.433 1.111 0.105 1.828 0.105C2.54 0.105 3.143 -0.438 3.143 -1.166V-3.457Z' id='g1-85'/>
-<path d='M1.968 -1.823L3.228 -3.457H2.685L1.724 -2.182L0.742 -3.457H0.149L1.479 -1.823L0.075 0H0.618L1.724 -1.499L2.854 0H3.447L1.968 -1.823Z' id='g1-88'/>
-<path d='M2.934 -3.238V-3.457H0.369V-3.123H1.41C1.479 -3.123 1.539 -3.128 1.609 -3.128H2.291L0.294 -0.229V0H2.964V-0.354H2.466C1.958 -0.354 1.45 -0.344 0.941 -0.344L2.934 -3.238Z' id='g1-90'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M2.506 -2.262C2.396 -2.262 2.062 -2.257 1.684 -2.112L1.674 -2.107C1.494 -2.227 1.32 -2.262 1.176 -2.262C0.687 -2.262 0.324 -1.878 0.324 -1.45C0.324 -1.275 0.384 -1.096 0.498 -0.956C0.428 -0.872 0.354 -0.732 0.354 -0.543C0.354 -0.349 0.433 -0.224 0.478 -0.164C0.204 -0.005 0.149 0.224 0.149 0.344C0.149 0.722 0.672 1.021 1.32 1.021C1.973 1.021 2.491 0.722 2.491 0.344C2.491 -0.359 1.619 -0.359 1.405 -0.359H0.941C0.862 -0.359 0.648 -0.359 0.648 -0.618C0.648 -0.717 0.682 -0.767 0.687 -0.777C0.862 -0.667 1.036 -0.633 1.171 -0.633C1.659 -0.633 2.022 -1.016 2.022 -1.445C2.022 -1.604 1.978 -1.748 1.888 -1.883C1.868 -1.913 1.868 -1.918 1.868 -1.923C1.868 -1.943 2.167 -1.943 2.192 -1.943C2.197 -1.943 2.386 -1.943 2.565 -1.923L2.506 -2.262ZM1.176 -0.941C0.907 -0.941 0.707 -1.111 0.707 -1.445C0.707 -1.833 0.956 -1.953 1.171 -1.953C1.44 -1.953 1.639 -1.783 1.639 -1.45C1.639 -1.061 1.39 -0.941 1.176 -0.941ZM1.41 0.03C1.524 0.03 2.112 0.03 2.112 0.349C2.112 0.563 1.738 0.712 1.32 0.712S0.528 0.563 0.528 0.349C0.528 0.324 0.528 0.03 0.932 0.03H1.41Z' id='g1-103'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.161 -2.262 0.932 -2.012 0.832 -1.908V-3.457H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-104'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.986 -3.417H0.483V-2.914H0.986V-3.417ZM-0.324 0.847C-0.095 0.971 0.13 1.016 0.319 1.016C0.663 1.016 0.986 0.752 0.986 0.294V-2.212H0.568V0.329C0.568 0.418 0.568 0.498 0.463 0.583C0.349 0.667 0.209 0.667 0.164 0.667C-0.045 0.667 -0.174 0.573 -0.234 0.518L-0.324 0.847Z' id='g1-106'/>
-<path d='M1.489 -1.355L2.376 -2.212H1.893L0.827 -1.181V-3.457H0.438V0H0.807V-0.697L1.23 -1.106L2.052 0H2.491L1.489 -1.355Z' id='g1-107'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M3.786 -1.474C3.786 -1.863 3.671 -2.262 3.059 -2.262C2.64 -2.262 2.381 -2.017 2.262 -1.858C2.212 -1.993 2.087 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.21C2.316 -1.539 2.456 -1.933 2.839 -1.933C3.352 -1.933 3.352 -1.584 3.352 -1.44V0H3.786V-1.474Z' id='g1-109'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M2.316 -2.212H1.883V-0.767C1.883 -0.369 1.544 -0.244 1.255 -0.244C0.887 -0.244 0.847 -0.344 0.847 -0.573V-2.212H0.413V-0.543C0.413 -0.1 0.608 0.05 0.956 0.05C1.161 0.05 1.599 0.01 1.898 -0.229V0H2.316V-2.212Z' id='g1-117'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M2.112 -2.002V-2.212H0.219V-1.893H0.951C1.011 -1.893 1.071 -1.898 1.131 -1.898H1.519L0.149 -0.219V0H2.127V-0.334H1.355C1.295 -0.334 1.235 -0.329 1.176 -0.329H0.742L2.112 -2.002Z' id='g1-122'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M6.581 -2.663C6.581 -3.327 6.402 -4.08 5.317 -4.08C4.564 -4.08 4.142 -3.622 3.927 -3.344C3.865 -3.524 3.676 -4.08 2.762 -4.08C2.053 -4.08 1.623 -3.667 1.417 -3.398V-4.035H0.726V0H1.47V-2.188C1.47 -2.78 1.704 -3.497 2.385 -3.497C3.282 -3.497 3.282 -2.86 3.282 -2.6V0H4.026V-2.188C4.026 -2.78 4.259 -3.497 4.94 -3.497C5.837 -3.497 5.837 -2.86 5.837 -2.6V0H6.581V-2.663Z' id='g0-109'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page5'>
-<path d='M137.059 194.93V186.074M191.969 194.93V186.074M246.879 194.93V186.074M137.059 51.973V60.828M191.969 51.973V60.828M246.879 51.973V60.828' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M109.606 190.324V186.074M164.516 190.324V186.074M219.422 190.324V186.074M274.332 190.324V186.074M109.606 56.574V60.828M164.516 56.574V60.828M219.422 56.574V60.828M274.332 56.574V60.828' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 186.074H86.402M82.148 154.762H86.402M82.148 123.449H86.402M82.148 92.141H86.402M82.148 60.828H86.402M301.789 186.074H297.535M301.789 154.762H297.535M301.789 123.449H297.535M301.789 92.141H297.535M301.789 60.828H297.535' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 186.074V60.828H301.789V186.074H82.148Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -18.291 59.571)'>
-<use x='114.487' xlink:href='#g2-54' y='140.503'/>
-<use x='118.721' xlink:href='#g2-48' y='140.503'/>
-<use x='122.955' xlink:href='#g2-50' y='140.503'/>
-<use x='127.189' xlink:href='#g2-46' y='140.503'/>
-<use x='129.541' xlink:href='#g2-103' y='140.503'/>
-<use x='133.776' xlink:href='#g2-99' y='140.503'/>
-<use x='137.539' xlink:href='#g2-99' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 27.05 59.571)'>
-<use x='114.487' xlink:href='#g2-54' y='140.503'/>
-<use x='118.721' xlink:href='#g2-50' y='140.503'/>
-<use x='122.955' xlink:href='#g2-48' y='140.503'/>
-<use x='127.189' xlink:href='#g2-46' y='140.503'/>
-<use x='129.541' xlink:href='#g2-111' y='140.503'/>
-<use x='133.776' xlink:href='#g2-109' y='140.503'/>
-<use x='140.501' xlink:href='#g2-110' y='140.503'/>
-<use x='144.873' xlink:href='#g2-101' y='140.503'/>
-<use x='148.637' xlink:href='#g2-116' y='140.503'/>
-<use x='151.695' xlink:href='#g2-112' y='140.503'/>
-<use x='156.067' xlink:href='#g2-112' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 78.694 59.571)'>
-<use x='114.487' xlink:href='#g2-54' y='140.503'/>
-<use x='118.721' xlink:href='#g2-50' y='140.503'/>
-<use x='122.955' xlink:href='#g2-51' y='140.503'/>
-<use x='127.189' xlink:href='#g2-46' y='140.503'/>
-<use x='129.541' xlink:href='#g2-120' y='140.503'/>
-<use x='133.444' xlink:href='#g2-97' y='140.503'/>
-<use x='137.512' xlink:href='#g2-108' y='140.503'/>
-<use x='139.532' xlink:href='#g2-97' y='140.503'/>
-<use x='143.6' xlink:href='#g2-110' y='140.503'/>
-<use x='147.973' xlink:href='#g2-99' y='140.503'/>
-<use x='151.736' xlink:href='#g2-98' y='140.503'/>
-<use x='156.109' xlink:href='#g2-109' y='140.503'/>
-<use x='162.834' xlink:href='#g2-107' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 134.081 59.571)'>
-<use x='114.487' xlink:href='#g2-54' y='140.503'/>
-<use x='118.721' xlink:href='#g2-52' y='140.503'/>
-<use x='122.955' xlink:href='#g2-56' y='140.503'/>
-<use x='127.189' xlink:href='#g2-46' y='140.503'/>
-<use x='129.541' xlink:href='#g2-101' y='140.503'/>
-<use x='133.305' xlink:href='#g2-120' y='140.503'/>
-<use x='137.207' xlink:href='#g2-99' y='140.503'/>
-<use x='140.971' xlink:href='#g2-104' y='140.503'/>
-<use x='145.344' xlink:href='#g2-97' y='140.503'/>
-<use x='149.412' xlink:href='#g2-110' y='140.503'/>
-<use x='153.784' xlink:href='#g2-103' y='140.503'/>
-<use x='158.018' xlink:href='#g2-101' y='140.503'/>
-<use x='161.782' xlink:href='#g2-50' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 47.205)'>
-<use x='114.487' xlink:href='#g1-48' y='140.503'/>
-<use x='117.133' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 15.894)'>
-<use x='114.487' xlink:href='#g1-48' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-53' y='140.503'/>
-<use x='121.25' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -15.418)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -46.729)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-53' y='140.503'/>
-<use x='121.25' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -78.041)'>
-<use x='114.487' xlink:href='#g1-50' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-120' y='140.503'/>
-</g>
-<path clip-path='url(#clip5)' d='M82.148 123.449H301.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M87.063 186.074H90.301V123.449H87.063ZM141.973 186.074H145.211V123.449H141.973ZM196.883 186.074H200.121V123.449H196.883ZM251.793 186.074H255.031V123.449H251.793Z' fill='#e0e0f0'/>
-<path clip-path='url(#clip5)' d='M87.063 186.074H90.301V123.449H87.063ZM141.973 186.074H145.211V123.449H141.973ZM196.883 186.074H200.121V123.449H196.883ZM251.793 186.074H255.031V123.449H251.793Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M88.684 123.449V123.449' fill='#e0e0f0'/>
-<path clip-path='url(#clip5)' d='M86.691 123.449H90.676' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M88.684 123.449V123.449' fill='#e0e0f0'/>
-<path clip-path='url(#clip5)' d='M86.691 123.449H90.676' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M143.594 123.449V123.449' fill='#e0e0f0'/>
-<path clip-path='url(#clip5)' d='M141.602 123.449H145.586' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M143.594 123.449V123.449' fill='#e0e0f0'/>
-<path clip-path='url(#clip5)' d='M141.602 123.449H145.586' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M198.5 123.449V123.449' fill='#e0e0f0'/>
-<path clip-path='url(#clip5)' d='M196.511 123.449H200.496' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M198.5 123.449V123.449' fill='#e0e0f0'/>
-<path clip-path='url(#clip5)' d='M196.511 123.449H200.496' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M253.41 123.449V123.449' fill='#e0e0f0'/>
-<path clip-path='url(#clip5)' d='M251.418 123.449H255.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M253.41 123.449V123.449' fill='#e0e0f0'/>
-<path clip-path='url(#clip5)' d='M251.418 123.449H255.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M92.293 186.074H95.531V103.535H92.293ZM147.203 186.074H150.441V125.77H147.203ZM202.113 186.074H205.352V124.203H202.113ZM257.024 186.074H260.262V123.074H257.024Z' fill='#c2c2e1'/>
-<path clip-path='url(#clip5)' d='M92.293 186.074H95.531V103.535H92.293ZM147.203 186.074H150.441V125.77H147.203ZM202.113 186.074H205.352V124.203H202.113ZM257.024 186.074H260.262V123.074H257.024Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M93.914 103.535V103.535' fill='#c2c2e1'/>
-<path clip-path='url(#clip5)' d='M91.922 103.535H95.906' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M93.914 103.535V103.535' fill='#c2c2e1'/>
-<path clip-path='url(#clip5)' d='M91.922 103.535H95.906' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M148.824 125.77V125.77' fill='#c2c2e1'/>
-<path clip-path='url(#clip5)' d='M146.832 125.77H150.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M148.824 125.77V125.77' fill='#c2c2e1'/>
-<path clip-path='url(#clip5)' d='M146.832 125.77H150.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M203.731 124.203V124.203' fill='#c2c2e1'/>
-<path clip-path='url(#clip5)' d='M201.742 124.203H205.727' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M203.731 124.203V124.203' fill='#c2c2e1'/>
-<path clip-path='url(#clip5)' d='M201.742 124.203H205.727' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M258.641 123.074V123.074' fill='#c2c2e1'/>
-<path clip-path='url(#clip5)' d='M256.648 123.074H260.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M258.641 123.074V123.074' fill='#c2c2e1'/>
-<path clip-path='url(#clip5)' d='M256.648 123.074H260.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M97.524 186.074H100.762V123.324H97.524ZM152.434 186.074H155.672V123.828H152.434ZM207.344 186.074H210.582V124.203H207.344ZM262.254 186.074H265.492V123.137H262.254Z' fill='#a3a3d1'/>
-<path clip-path='url(#clip5)' d='M97.524 186.074H100.762V123.324H97.524ZM152.434 186.074H155.672V123.828H152.434ZM207.344 186.074H210.582V124.203H207.344ZM262.254 186.074H265.492V123.137H262.254Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M99.145 123.324V123.324' fill='#a3a3d1'/>
-<path clip-path='url(#clip5)' d='M97.152 123.325H101.136' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M99.145 123.324V123.324' fill='#a3a3d1'/>
-<path clip-path='url(#clip5)' d='M97.152 123.325H101.136' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M154.055 123.828V123.828' fill='#a3a3d1'/>
-<path clip-path='url(#clip5)' d='M152.063 123.829H156.047' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M154.055 123.828V123.828' fill='#a3a3d1'/>
-<path clip-path='url(#clip5)' d='M152.063 123.829H156.047' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M208.961 124.203V124.203' fill='#a3a3d1'/>
-<path clip-path='url(#clip5)' d='M206.972 124.203H210.957' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M208.961 124.203V124.203' fill='#a3a3d1'/>
-<path clip-path='url(#clip5)' d='M206.972 124.203H210.957' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M263.871 123.137V123.137' fill='#a3a3d1'/>
-<path clip-path='url(#clip5)' d='M261.879 123.137H265.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M263.871 123.137V123.137' fill='#a3a3d1'/>
-<path clip-path='url(#clip5)' d='M261.879 123.137H265.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M102.754 186.074H105.992V123.449H102.754ZM157.664 186.074H160.902V125.77H157.664ZM212.574 186.074H215.813V125.391H212.574ZM267.484 186.074H270.723V122.449H267.484Z' fill='#8585c2'/>
-<path clip-path='url(#clip5)' d='M102.754 186.074H105.992V123.449H102.754ZM157.664 186.074H160.902V125.77H157.664ZM212.574 186.074H215.813V125.391H212.574ZM267.484 186.074H270.723V122.449H267.484Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M104.375 123.449V123.449' fill='#8585c2'/>
-<path clip-path='url(#clip5)' d='M102.383 123.449H106.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M104.375 123.449V123.449' fill='#8585c2'/>
-<path clip-path='url(#clip5)' d='M102.383 123.449H106.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M159.285 125.77V125.77' fill='#8585c2'/>
-<path clip-path='url(#clip5)' d='M157.293 125.77H161.277' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M159.285 125.77V125.77' fill='#8585c2'/>
-<path clip-path='url(#clip5)' d='M157.293 125.77H161.277' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M214.192 125.391V125.391' fill='#8585c2'/>
-<path clip-path='url(#clip5)' d='M212.203 125.39H216.188' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M214.192 125.391V125.391' fill='#8585c2'/>
-<path clip-path='url(#clip5)' d='M212.203 125.39H216.188' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M269.102 122.449V122.449' fill='#8585c2'/>
-<path clip-path='url(#clip5)' d='M267.109 122.449H271.097' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M269.102 122.449V122.449' fill='#8585c2'/>
-<path clip-path='url(#clip5)' d='M267.109 122.449H271.097' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M107.984 186.074H111.223V122.699H107.984ZM162.895 186.074H166.133V117.188H162.895ZM217.805 186.074H221.043V104.727H217.805ZM272.715 186.074H275.953V122.762H272.715Z' fill='#6666b3'/>
-<path clip-path='url(#clip5)' d='M107.984 186.074H111.223V122.699H107.984ZM162.895 186.074H166.133V117.188H162.895ZM217.805 186.074H221.043V104.727H217.805ZM272.715 186.074H275.953V122.762H272.715Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M109.606 122.699V122.699' fill='#6666b3'/>
-<path clip-path='url(#clip5)' d='M107.613 122.699H111.597' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M109.606 122.699V122.699' fill='#6666b3'/>
-<path clip-path='url(#clip5)' d='M107.613 122.699H111.597' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M164.516 117.188V117.188' fill='#6666b3'/>
-<path clip-path='url(#clip5)' d='M162.524 117.188H166.508' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M164.516 117.188V117.188' fill='#6666b3'/>
-<path clip-path='url(#clip5)' d='M162.524 117.188H166.508' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M219.422 104.727V104.727' fill='#6666b3'/>
-<path clip-path='url(#clip5)' d='M217.433 104.727H221.418' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M219.422 104.727V104.727' fill='#6666b3'/>
-<path clip-path='url(#clip5)' d='M217.433 104.727H221.418' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M274.332 122.762V122.762' fill='#6666b3'/>
-<path clip-path='url(#clip5)' d='M272.34 122.762H276.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M274.332 122.762V122.762' fill='#6666b3'/>
-<path clip-path='url(#clip5)' d='M272.34 122.762H276.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M113.215 186.074H116.453V123.574H113.215ZM168.125 186.074H171.363V119.696H168.125ZM223.035 186.074H226.274V122.637H223.035ZM277.945 186.074H281.184V122.449H277.945Z' fill='#4747a4'/>
-<path clip-path='url(#clip5)' d='M113.215 186.074H116.453V123.574H113.215ZM168.125 186.074H171.363V119.696H168.125ZM223.035 186.074H226.274V122.637H223.035ZM277.945 186.074H281.184V122.449H277.945Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M114.836 123.574V123.574' fill='#4747a4'/>
-<path clip-path='url(#clip5)' d='M112.844 123.574H116.828' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M114.836 123.574V123.574' fill='#4747a4'/>
-<path clip-path='url(#clip5)' d='M112.844 123.574H116.828' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M169.746 119.696V119.696' fill='#4747a4'/>
-<path clip-path='url(#clip5)' d='M167.754 119.695H171.738' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M169.746 119.696V119.696' fill='#4747a4'/>
-<path clip-path='url(#clip5)' d='M167.754 119.695H171.738' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M224.652 122.637V122.637' fill='#4747a4'/>
-<path clip-path='url(#clip5)' d='M222.664 122.637H226.649' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M224.652 122.637V122.637' fill='#4747a4'/>
-<path clip-path='url(#clip5)' d='M222.664 122.637H226.649' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M279.563 122.449V122.449' fill='#4747a4'/>
-<path clip-path='url(#clip5)' d='M277.57 122.449H281.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M279.563 122.449V122.449' fill='#4747a4'/>
-<path clip-path='url(#clip5)' d='M277.57 122.449H281.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M118.445 186.074H121.684V122.574H118.445ZM173.356 186.074H176.594V117.25H173.356ZM228.266 186.074H231.504V105.477H228.266ZM283.176 186.074H286.414V121.887H283.176Z' fill='#292994'/>
-<path clip-path='url(#clip5)' d='M118.445 186.074H121.684V122.574H118.445ZM173.356 186.074H176.594V117.25H173.356ZM228.266 186.074H231.504V105.477H228.266ZM283.176 186.074H286.414V121.887H283.176Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M120.066 122.574V122.574' fill='#292994'/>
-<path clip-path='url(#clip5)' d='M118.074 122.574H122.058' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M120.066 122.574V122.574' fill='#292994'/>
-<path clip-path='url(#clip5)' d='M118.074 122.574H122.058' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M174.977 117.25V117.25' fill='#292994'/>
-<path clip-path='url(#clip5)' d='M172.985 117.25H176.969' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M174.977 117.25V117.25' fill='#292994'/>
-<path clip-path='url(#clip5)' d='M172.985 117.25H176.969' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M229.883 105.477V105.477' fill='#292994'/>
-<path clip-path='url(#clip5)' d='M227.894 105.477H231.879' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M229.883 105.477V105.477' fill='#292994'/>
-<path clip-path='url(#clip5)' d='M227.894 105.477H231.879' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M284.793 121.887V121.887' fill='#292994'/>
-<path clip-path='url(#clip5)' d='M282.801 121.886H286.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M284.793 121.887V121.887' fill='#292994'/>
-<path clip-path='url(#clip5)' d='M282.801 121.886H286.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M123.676 186.074H126.914V106.606H123.676ZM178.586 186.074H181.824V122.699H178.586ZM233.496 186.074H236.734V122.449H233.496ZM288.406 186.074H291.645V122.012H288.406Z' fill='#0a0a85'/>
-<path clip-path='url(#clip5)' d='M123.676 186.074H126.914V106.606H123.676ZM178.586 186.074H181.824V122.699H178.586ZM233.496 186.074H236.734V122.449H233.496ZM288.406 186.074H291.645V122.012H288.406Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M125.297 106.606V106.606' fill='#0a0a85'/>
-<path clip-path='url(#clip5)' d='M123.305 106.605H127.289' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M125.297 106.606V106.606' fill='#0a0a85'/>
-<path clip-path='url(#clip5)' d='M123.305 106.605H127.289' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M180.207 122.699V122.699' fill='#0a0a85'/>
-<path clip-path='url(#clip5)' d='M178.215 122.699H182.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M180.207 122.699V122.699' fill='#0a0a85'/>
-<path clip-path='url(#clip5)' d='M178.215 122.699H182.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M235.113 122.449V122.449' fill='#0a0a85'/>
-<path clip-path='url(#clip5)' d='M233.125 122.449H237.11' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M235.113 122.449V122.449' fill='#0a0a85'/>
-<path clip-path='url(#clip5)' d='M233.125 122.449H237.11' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M290.024 122.012V122.012' fill='#0a0a85'/>
-<path clip-path='url(#clip5)' d='M288.031 122.012H292.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M290.024 122.012V122.012' fill='#0a0a85'/>
-<path clip-path='url(#clip5)' d='M288.031 122.012H292.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M128.906 186.074H132.145V120.633H128.906ZM183.817 186.074H187.055V122.074H183.817ZM238.727 186.074H241.965V119.696H238.727ZM293.637 186.074H296.875V123.387H293.637Z' fill='#000076'/>
-<path clip-path='url(#clip5)' d='M128.906 186.074H132.145V120.633H128.906ZM183.817 186.074H187.055V122.074H183.817ZM238.727 186.074H241.965V119.696H238.727ZM293.637 186.074H296.875V123.387H293.637Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M130.527 120.633V120.633' fill='#000076'/>
-<path clip-path='url(#clip5)' d='M128.535 120.633H132.52' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M130.527 120.633V120.633' fill='#000076'/>
-<path clip-path='url(#clip5)' d='M128.535 120.633H132.52' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M185.438 122.074V122.074' fill='#000076'/>
-<path clip-path='url(#clip5)' d='M183.446 122.074H187.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M185.438 122.074V122.074' fill='#000076'/>
-<path clip-path='url(#clip5)' d='M183.446 122.074H187.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M240.344 119.696V119.696' fill='#000076'/>
-<path clip-path='url(#clip5)' d='M238.355 119.695H242.34' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M240.344 119.696V119.696' fill='#000076'/>
-<path clip-path='url(#clip5)' d='M238.355 119.695H242.34' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M295.254 123.387V123.387' fill='#000076'/>
-<path clip-path='url(#clip5)' d='M293.262 123.387H297.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M295.254 123.387V123.387' fill='#000076'/>
-<path clip-path='url(#clip5)' d='M293.262 123.387H297.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip5)' d='M233.301 233.301H301.59V211.324H233.301Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 122.136 88.837)'>
-<use x='114.487' xlink:href='#g1-72' y='129.265'/>
-<use x='118.223' xlink:href='#g1-80' y='129.265'/>
-<use x='121.604' xlink:href='#g1-45' y='129.265'/>
-<use x='123.368' xlink:href='#g1-90' y='129.265'/>
-<use x='126.603' xlink:href='#g1-52' y='129.265'/>
-<use x='129.249' xlink:href='#g1-45' y='129.265'/>
-<use x='131.013' xlink:href='#g1-71' y='129.265'/>
-<use x='134.542' xlink:href='#g1-52' y='129.265'/>
-<use x='137.188' xlink:href='#g1-44' y='129.265'/>
-<use x='140.423' xlink:href='#g1-49' y='129.265'/>
-<use x='143.069' xlink:href='#g1-54' y='129.265'/>
-<use x='145.715' xlink:href='#g1-71' y='129.265'/>
-<use x='149.244' xlink:href='#g1-98' y='129.265'/>
-<use x='114.487' xlink:href='#g1-56' y='134.884'/>
-<use x='117.133' xlink:href='#g1-45' y='134.884'/>
-<use x='118.897' xlink:href='#g1-99' y='134.884'/>
-<use x='121.25' xlink:href='#g1-111' y='134.884'/>
-<use x='123.749' xlink:href='#g1-114' y='134.884'/>
-<use x='125.556' xlink:href='#g1-101' y='134.884'/>
-<use x='129.673' xlink:href='#g1-73' y='134.884'/>
-<use x='131.143' xlink:href='#g1-110' y='134.884'/>
-<use x='133.876' xlink:href='#g1-116' y='134.884'/>
-<use x='135.787' xlink:href='#g1-101' y='134.884'/>
-<use x='138.14' xlink:href='#g1-108' y='134.884'/>
-<use x='141.166' xlink:href='#g1-88' y='134.884'/>
-<use x='144.695' xlink:href='#g1-69' y='134.884'/>
-<use x='147.869' xlink:href='#g1-79' y='134.884'/>
-<use x='151.778' xlink:href='#g1-78' y='134.884'/>
-<use x='157.278' xlink:href='#g1-64' y='134.884'/>
-<use x='160.807' xlink:href='#g1-50' y='134.884'/>
-<use x='163.453' xlink:href='#g1-46' y='134.884'/>
-<use x='164.923' xlink:href='#g1-55' y='134.884'/>
-<use x='167.57' xlink:href='#g1-71' y='134.884'/>
-<use x='171.098' xlink:href='#g1-104' y='134.884'/>
-<use x='173.831' xlink:href='#g1-122' y='134.884'/>
-<use x='114.487' xlink:href='#g1-85' y='140.503'/>
-<use x='118.119' xlink:href='#g1-98' y='140.503'/>
-<use x='120.852' xlink:href='#g1-117' y='140.503'/>
-<use x='123.585' xlink:href='#g1-110' y='140.503'/>
-<use x='126.317' xlink:href='#g1-116' y='140.503'/>
-<use x='128.229' xlink:href='#g1-117' y='140.503'/>
-<use x='132.726' xlink:href='#g1-49' y='140.503'/>
-<use x='135.372' xlink:href='#g1-56' y='140.503'/>
-<use x='138.018' xlink:href='#g1-46' y='140.503'/>
-<use x='139.489' xlink:href='#g1-48' y='140.503'/>
-<use x='142.135' xlink:href='#g1-52' y='140.503'/>
-<use x='144.781' xlink:href='#g1-46' y='140.503'/>
-<use x='146.252' xlink:href='#g1-49' y='140.503'/>
-<use x='148.898' xlink:href='#g1-44' y='140.503'/>
-<use x='152.132' xlink:href='#g1-71' y='140.503'/>
-<use x='155.661' xlink:href='#g1-67' y='140.503'/>
-<use x='159.042' xlink:href='#g1-67' y='140.503'/>
-<use x='164.188' xlink:href='#g1-55' y='140.503'/>
-<use x='166.834' xlink:href='#g1-46' y='140.503'/>
-<use x='168.305' xlink:href='#g1-52' y='140.503'/>
-<use x='170.951' xlink:href='#g1-46' y='140.503'/>
-<use x='172.421' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -50.186 231.913)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 4.724 231.913)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 59.633 231.913)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 114.543 231.913)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -44.955 211.999)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-51' y='140.503'/>
-<use x='121.25' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 9.954 234.23)'>
-<use x='114.487' xlink:href='#g1-48' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-57' y='140.503'/>
-<use x='121.25' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 64.864 232.665)'>
-<use x='114.487' xlink:href='#g1-48' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-57' y='140.503'/>
-<use x='121.25' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 119.773 231.537)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -39.725 231.788)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 15.185 232.289)'>
-<use x='114.487' xlink:href='#g1-48' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-57' y='140.503'/>
-<use x='121.25' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 70.094 232.665)'>
-<use x='114.487' xlink:href='#g1-48' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-57' y='140.503'/>
-<use x='121.25' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 125.004 231.6)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -34.494 231.913)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 20.415 234.23)'>
-<use x='114.487' xlink:href='#g1-48' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-57' y='140.503'/>
-<use x='121.25' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 75.325 233.854)'>
-<use x='114.487' xlink:href='#g1-48' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-57' y='140.503'/>
-<use x='121.25' xlink:href='#g1-55' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 130.234 230.911)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -29.264 231.162)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 25.646 225.651)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-49' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 80.555 213.189)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-51' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 135.465 231.224)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -24.033 232.038)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 30.876 228.156)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 85.786 231.099)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 140.695 230.911)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -18.803 231.036)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 36.107 225.713)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-49' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 91.016 213.94)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-50' y='140.503'/>
-<use x='121.25' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 145.926 230.348)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -13.572 215.068)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-50' y='140.503'/>
-<use x='121.25' xlink:href='#g1-55' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 41.337 231.162)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 96.247 230.911)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 151.156 230.473)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -8.342 229.095)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-52' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 46.568 230.535)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 101.477 228.156)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 156.387 231.85)'>
-<use x='114.487' xlink:href='#g1-49' y='140.503'/>
-<use x='117.133' xlink:href='#g1-46' y='140.503'/>
-<use x='118.603' xlink:href='#g1-48' y='140.503'/>
-<use x='121.25' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -81.143 293.197)'>
-<use x='114.487' xlink:href='#g0-82' y='140.503'/>
-<use x='120.457' xlink:href='#g0-101' y='140.503'/>
-<use x='124.553' xlink:href='#g0-108' y='140.503'/>
-<use x='126.753' xlink:href='#g0-97' y='140.503'/>
-<use x='131.181' xlink:href='#g0-116' y='140.503'/>
-<use x='134.509' xlink:href='#g0-105' y='140.503'/>
-<use x='136.709' xlink:href='#g0-118' y='140.503'/>
-<use x='140.957' xlink:href='#g0-101' y='140.503'/>
-<use x='148.124' xlink:href='#g0-116' y='140.503'/>
-<use x='151.452' xlink:href='#g0-105' y='140.503'/>
-<use x='153.652' xlink:href='#g0-109' y='140.503'/>
-<use x='160.972' xlink:href='#g0-101' y='140.503'/>
-<use x='168.139' xlink:href='#g2-40' y='140.503'/>
-<use x='171.432' xlink:href='#g2-108' y='140.503'/>
-<use x='173.453' xlink:href='#g2-111' y='140.503'/>
-<use x='177.452' xlink:href='#g2-119' y='140.503'/>
-<use x='183' xlink:href='#g2-101' y='140.503'/>
-<use x='186.764' xlink:href='#g2-114' y='140.503'/>
-<use x='192.479' xlink:href='#g2-105' y='140.503'/>
-<use x='194.499' xlink:href='#g2-115' y='140.503'/>
-<use x='200.568' xlink:href='#g2-98' y='140.503'/>
-<use x='205.176' xlink:href='#g2-101' y='140.503'/>
-<use x='208.94' xlink:href='#g2-116' y='140.503'/>
-<use x='211.998' xlink:href='#g2-116' y='140.503'/>
-<use x='215.056' xlink:href='#g2-101' y='140.503'/>
-<use x='218.819' xlink:href='#g2-114' y='140.503'/>
-<use x='221.711' xlink:href='#g2-41' y='140.503'/>
-</g>
-<path d='M82.348 231.446H323.027V214.453H82.348Z' fill='#ffffff'/>
-<path d='M82.348 231.446H323.027V214.453H82.348Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path d='M85.535 224.941H88.523V216.972H85.535ZM91.516 224.941H94.504V218.964H91.516Z' fill='#e0e0f0'/>
-<path d='M85.535 224.941H88.523V216.972H85.535ZM91.516 224.941H94.504V218.964H91.516Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -33.522 84.43)'>
-<use x='131.213' xlink:href='#g2-109' y='140.503'/>
-<use x='137.938' xlink:href='#g2-105' y='140.503'/>
-</g>
-<path d='M109.625 224.941H112.613V216.973H109.625ZM115.602 224.941H118.59V218.965H115.602Z' fill='#c2c2e1'/>
-<path d='M109.625 224.941H112.613V216.972H109.625ZM115.602 224.941H118.59V218.964H115.602Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.56 83.976)'>
-<use x='154.339' xlink:href='#g2-116' y='140.503'/>
-<use x='157.397' xlink:href='#g2-99' y='140.503'/>
-</g>
-<path d='M131.789 224.941H134.777V216.973H131.789ZM137.766 224.941H140.754V218.965H137.766Z' fill='#a3a3d1'/>
-<path d='M131.789 224.941H134.777V216.972H131.789ZM137.766 224.941H140.754V218.964H137.766Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.159 84.43)'>
-<use x='176.102' xlink:href='#g2-106' y='140.503'/>
-<use x='178.357' xlink:href='#g2-101' y='140.503'/>
-</g>
-<path d='M153.152 224.941H156.141V216.973H153.152ZM159.129 224.941H162.117V218.965H159.129Z' fill='#8585c2'/>
-<path d='M153.152 224.941H156.141V216.972H153.152ZM159.129 224.941H162.117V218.964H159.129Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.958 83.47)'>
-<use x='198.263' xlink:href='#g2-115' y='140.503'/>
-<use x='201.509' xlink:href='#g2-110' y='140.503'/>
-</g>
-<path d='M176.113 224.941H179.102V216.973H176.113ZM182.09 224.941H185.078V218.965H182.09Z' fill='#6666b3'/>
-<path d='M176.113 224.941H179.102V216.972H176.113ZM182.09 224.941H185.078V218.964H182.09Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.781 83.47)'>
-<use x='221.047' xlink:href='#g2-114' y='140.503'/>
-<use x='223.939' xlink:href='#g2-112' y='140.503'/>
-</g>
-<path d='M198.719 224.941H201.707V216.973H198.719ZM204.695 224.941H207.684V218.965H204.695Z' fill='#4747a4'/>
-<path d='M198.719 224.941H201.707V216.972H198.719ZM204.695 224.941H207.684V218.964H204.695Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -39.001 84.467)'>
-<use x='249.874' xlink:href='#g2-104' y='140.503'/>
-<use x='254.246' xlink:href='#g2-111' y='140.503'/>
-<use x='258.481' xlink:href='#g2-97' y='140.503'/>
-<use x='262.314' xlink:href='#g2-114' y='140.503'/>
-<use x='265.206' xlink:href='#g2-100' y='140.503'/>
-</g>
-<path d='M233.766 224.941H236.754V216.973H233.766ZM239.742 224.941H242.731V218.965H239.742Z' fill='#292994'/>
-<path d='M233.766 224.941H236.754V216.972H233.766ZM239.742 224.941H242.731V218.964H239.742Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.472 84.467)'>
-<use x='283.392' xlink:href='#g2-103' y='140.503'/>
-<use x='287.626' xlink:href='#g2-108' y='140.503'/>
-<use x='289.646' xlink:href='#g2-105' y='140.503'/>
-<use x='291.666' xlink:href='#g2-98' y='140.503'/>
-<use x='296.274' xlink:href='#g2-99' y='140.503'/>
-</g>
-<path d='M265.754 224.941H268.742V216.973H265.754ZM271.73 224.941H274.719V218.965H271.73Z' fill='#0a0a85'/>
-<path d='M265.754 224.941H268.742V216.972H265.754ZM271.73 224.941H274.719V218.964H271.73Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.051 84.467)'>
-<use x='312.959' xlink:href='#g2-116' y='140.503'/>
-<use x='316.017' xlink:href='#g2-98' y='140.503'/>
-<use x='320.389' xlink:href='#g2-98' y='140.503'/>
-</g>
-<path d='M292.898 224.941H295.887V216.973H292.898ZM298.879 224.941H301.867V218.965H298.879Z' fill='#000076'/>
-<path d='M292.898 224.941H295.887V216.972H292.898ZM298.879 224.941H301.867V218.964H298.879Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.145 84.43)'>
-<use x='340.198' xlink:href='#g2-115' y='140.503'/>
-<use x='343.444' xlink:href='#g2-109' y='140.503'/>
-<use x='350.169' xlink:href='#g2-105' y='140.503'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-1.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-1.svg
deleted file mode 100644
index dacd8ab..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-1.svg
+++ /dev/null
@@ -1,890 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='164.687pt' version='1.1' viewBox='52.938 54.996 381.625 164.687' width='381.625pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<defs>
-<clipPath id='clip3'>
-<path d='M82.148 203.937H434.164V78.691H82.148Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-78' transform='scale(1.6)' xlink:href='#g1-78'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-102' transform='scale(1.6)' xlink:href='#g1-102'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M0.946 -1.898H1.514V-2.212H0.932V-2.785C0.932 -3.128 1.245 -3.178 1.41 -3.178C1.514 -3.178 1.649 -3.163 1.833 -3.093V-3.457C1.704 -3.487 1.549 -3.507 1.415 -3.507C0.902 -3.507 0.528 -3.138 0.528 -2.645V-2.212H0.144V-1.898H0.528V0H0.946V-1.898Z' id='g1-102'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g3-1'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M6.581 -2.663C6.581 -3.327 6.402 -4.08 5.317 -4.08C4.564 -4.08 4.142 -3.622 3.927 -3.344C3.865 -3.524 3.676 -4.08 2.762 -4.08C2.053 -4.08 1.623 -3.667 1.417 -3.398V-4.035H0.726V0H1.47V-2.188C1.47 -2.78 1.704 -3.497 2.385 -3.497C3.282 -3.497 3.282 -2.86 3.282 -2.6V0H4.026V-2.188C4.026 -2.78 4.259 -3.497 4.94 -3.497C5.837 -3.497 5.837 -2.86 5.837 -2.6V0H6.581V-2.663Z' id='g0-109'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page3'>
-<path d='M140.82 212.793V203.937M199.488 212.793V203.937M258.156 212.793V203.937M316.824 212.793V203.937M375.496 212.793V203.937M140.82 69.836V78.691M199.488 69.836V78.691M258.156 69.836V78.691M316.824 69.836V78.691M375.496 69.836V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M111.484 208.191V203.937M170.152 208.191V203.937M228.824 208.191V203.937M287.492 208.191V203.937M346.16 208.191V203.937M404.828 208.191V203.937M111.484 74.441V78.691M170.152 74.441V78.691M228.824 74.441V78.691M287.492 74.441V78.691M346.16 74.441V78.691M404.828 74.441V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937H86.402M82.148 172.625H86.402M82.148 141.316H86.402M82.148 110.004H86.402M82.148 78.691H86.402M434.164 203.937H429.91M434.164 172.625H429.91M434.164 141.316H429.91M434.164 110.004H429.91M434.164 78.691H429.91' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937V78.691H434.164V203.937H82.148Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -11.54 33.989)'>
-<use x='114.487' xlink:href='#g2-99' y='183.949'/>
-<use x='118.25' xlink:href='#g2-102' y='183.949'/>
-<use x='120.838' xlink:href='#g2-114' y='183.949'/>
-<use x='123.73' xlink:href='#g2-97' y='183.949'/>
-<use x='127.798' xlink:href='#g2-99' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 41.401 33.989)'>
-<use x='114.487' xlink:href='#g2-101' y='183.949'/>
-<use x='118.25' xlink:href='#g2-115' y='183.949'/>
-<use x='121.497' xlink:href='#g2-112' y='183.949'/>
-<use x='125.634' xlink:href='#g2-114' y='183.949'/>
-<use x='128.526' xlink:href='#g2-101' y='183.949'/>
-<use x='132.29' xlink:href='#g2-115' y='183.949'/>
-<use x='135.536' xlink:href='#g2-115' y='183.949'/>
-<use x='138.782' xlink:href='#g2-111' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 103.095 33.989)'>
-<use x='114.487' xlink:href='#g2-98' y='183.949'/>
-<use x='118.859' xlink:href='#g2-97' y='183.949'/>
-<use x='122.692' xlink:href='#g2-114' y='183.949'/>
-<use x='125.584' xlink:href='#g2-110' y='183.949'/>
-<use x='129.957' xlink:href='#g2-101' y='183.949'/>
-<use x='133.72' xlink:href='#g2-115' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 162.903 33.989)'>
-<use x='114.487' xlink:href='#g2-108' y='183.949'/>
-<use x='116.507' xlink:href='#g2-101' y='183.949'/>
-<use x='120.271' xlink:href='#g2-97' y='183.949'/>
-<use x='124.339' xlink:href='#g2-110' y='183.949'/>
-<use x='128.711' xlink:href='#g2-78' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 223.526 33.989)'>
-<use x='114.487' xlink:href='#g2-114' y='183.949'/>
-<use x='117.379' xlink:href='#g2-101' y='183.949'/>
-<use x='121.142' xlink:href='#g2-100' y='183.949'/>
-<use x='125.515' xlink:href='#g2-105' y='183.949'/>
-<use x='127.535' xlink:href='#g2-115' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 277.054 33.989)'>
-<use x='114.487' xlink:href='#g2-108' y='183.949'/>
-<use x='116.507' xlink:href='#g2-97' y='183.949'/>
-<use x='120.34' xlink:href='#g2-114' y='183.949'/>
-<use x='123.232' xlink:href='#g2-115' y='183.949'/>
-<use x='126.478' xlink:href='#g2-111' y='183.949'/>
-<use x='130.712' xlink:href='#g2-110' y='183.949'/>
-<use x='135.085' xlink:href='#g2-78' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 21.624)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -9.688)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -40.999)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -72.311)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -103.622)'>
-<use x='114.487' xlink:href='#g1-50' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<path clip-path='url(#clip3)' d='M82.148 141.316H434.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M86.328 203.937H89.566V141.316H86.328ZM144.996 203.937H148.234V141.316H144.996ZM203.668 203.937H206.902V141.316H203.668ZM262.336 203.937H265.574V141.316H262.336ZM321.004 203.937H324.242V141.316H321.004ZM379.672 203.937H382.91V141.316H379.672Z' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M86.328 203.937H89.566V141.316H86.328ZM144.996 203.937H148.234V141.316H144.996ZM203.668 203.937H206.902V141.316H203.668ZM262.336 203.937H265.574V141.316H262.336ZM321.004 203.937H324.242V141.316H321.004ZM379.672 203.937H382.91V141.316H379.672Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M87.949 141.316V141.004' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M87.949 141.316V141.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M85.953 141.004H89.938' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M87.949 141.316V141.629' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M87.949 141.316V141.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M89.941 141.629H85.957' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M146.617 141.316V138.937' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M146.617 141.316V138.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M144.625 138.938H148.61' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M146.617 141.316V143.695' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M146.617 141.316V143.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M148.61 143.695H144.625' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M205.285 141.316V141.066' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M205.285 141.316V141.066' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M203.293 141.067H207.277' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M205.285 141.316V141.566' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M205.285 141.316V141.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M207.278 141.567H203.293' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M263.953 141.316V141.066' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M263.953 141.316V141.066' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M261.961 141.067H265.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M263.953 141.316V141.566' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M263.953 141.316V141.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M265.949 141.567H261.961' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M322.625 141.316V140.812' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M322.625 141.316V140.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M320.629 140.812H324.617' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M322.625 141.316V141.816' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M322.625 141.316V141.816' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M324.617 141.816H320.633' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M381.293 141.316V140' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M381.293 141.316V140' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M379.301 140H383.285' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M381.293 141.316V142.629' fill='#e0e0f0'/>
-<path clip-path='url(#clip3)' d='M381.293 141.316V142.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M383.285 142.629H379.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M91.559 203.937H94.797V139.562H91.559ZM150.227 203.937H153.465V138.621H150.227ZM208.899 203.937H212.133V141.441H208.899ZM267.567 203.937H270.805V138.683H267.567ZM326.234 203.937H329.473V137.871H326.234ZM384.902 203.937H388.141V129.855H384.902Z' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M91.559 203.937H94.797V139.562H91.559ZM150.227 203.937H153.465V138.621H150.227ZM208.899 203.937H212.133V141.441H208.899ZM267.567 203.937H270.805V138.683H267.567ZM326.234 203.937H329.473V137.871H326.234ZM384.902 203.937H388.141V129.855H384.902Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M93.18 139.562V139.562' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M91.184 139.563H95.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M93.18 139.562V139.562' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M91.184 139.563H95.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M151.848 138.621V138.621' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M149.855 138.621H153.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M151.848 138.621V138.621' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M149.855 138.621H153.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M210.516 141.441V141.254' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M210.516 141.441V141.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M208.523 141.254H212.507' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M210.516 141.441V141.629' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M210.516 141.441V141.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M212.508 141.629H208.523' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M269.184 138.683V138.621' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M269.184 138.683V138.621' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M267.191 138.621H271.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M269.184 138.683V138.746' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M269.184 138.683V138.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M271.179 138.746H267.191' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M327.856 137.871V137.558' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M327.856 137.871V137.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M325.859 137.559H329.847' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M327.856 137.871V138.183' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M327.856 137.871V138.183' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M329.847 138.183H325.863' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M386.524 129.855V129.543' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M386.524 129.855V129.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M384.531 129.543H388.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M386.524 129.855V130.168' fill='#c2c2e1'/>
-<path clip-path='url(#clip3)' d='M386.524 129.855V130.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M388.515 130.168H384.531' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M96.789 203.937H100.027V138.746H96.789ZM155.457 203.937H158.695V135.867H155.457ZM214.129 203.937H217.363V141.379H214.129ZM272.797 203.937H276.035V140.25H272.797ZM331.465 203.937H334.703V130.918H331.465ZM390.133 203.937H393.371V115.515H390.133Z' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M96.789 203.937H100.027V138.746H96.789ZM155.457 203.937H158.695V135.867H155.457ZM214.129 203.937H217.363V141.379H214.129ZM272.797 203.937H276.035V140.25H272.797ZM331.465 203.937H334.703V130.918H331.465ZM390.133 203.937H393.371V115.515H390.133Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M98.41 138.746V138.558' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M98.41 138.746V138.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M96.414 138.559H100.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M98.41 138.746V138.937' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M98.41 138.746V138.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M100.402 138.938H96.418' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M157.078 135.867V135.867' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M155.086 135.867H159.071' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M157.078 135.867V135.867' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M155.086 135.867H159.071' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M215.746 141.379V141.129' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M215.746 141.379V141.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M213.754 141.128H217.739' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M215.746 141.379V141.629' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M215.746 141.379V141.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M217.739 141.629H213.754' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M274.414 140.25V140.187' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M274.414 140.25V140.187' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M272.422 140.187H276.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M274.414 140.25V140.312' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M274.414 140.25V140.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M276.41 140.312H272.422' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M333.086 130.918V130.73' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M333.086 130.918V130.73' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M331.09 130.73H335.078' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M333.086 130.918V131.109' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M333.086 130.918V131.109' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M335.078 131.11H331.094' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M391.754 115.515V114.636' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M391.754 115.515V114.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M389.762 114.637H393.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M391.754 115.515V116.39' fill='#a3a3d1'/>
-<path clip-path='url(#clip3)' d='M391.754 115.515V116.39' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M393.746 116.39H389.762' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M102.02 203.937H105.258V130.293H102.02ZM160.688 203.937H163.926V133.176H160.688ZM219.359 203.937H222.594V141.066H219.359ZM278.027 203.937H281.266V139.312H278.027ZM336.695 203.937H339.934V136.679H336.695ZM395.363 203.937H398.602V96.789H395.363Z' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M102.02 203.937H105.258V130.293H102.02ZM160.688 203.937H163.926V133.176H160.688ZM219.359 203.937H222.594V141.066H219.359ZM278.027 203.937H281.266V139.312H278.027ZM336.695 203.937H339.934V136.679H336.695ZM395.363 203.937H398.602V96.789H395.363Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M103.641 130.293V129.98' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M103.641 130.293V129.98' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M101.644 129.981H105.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M103.641 130.293V130.605' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M103.641 130.293V130.605' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M105.633 130.606H101.648' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M162.309 133.176V133.176' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M160.316 133.176H164.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M162.309 133.176V133.176' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M160.316 133.176H164.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M220.977 141.066V140.941' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M220.977 141.066V140.941' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M218.984 140.942H222.969' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M220.977 141.066V141.191' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M220.977 141.066V141.191' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M222.969 141.191H218.984' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M279.645 139.312V139.125' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M279.645 139.312V139.125' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M277.652 139.125H281.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M279.645 139.312V139.5' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M279.645 139.312V139.5' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M281.64 139.5H277.652' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M338.317 136.679V136.554' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M338.317 136.679V136.554' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M336.32 136.555H340.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M338.317 136.679V136.804' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M338.317 136.679V136.804' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M340.308 136.804H336.324' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M396.984 96.789V96.164' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M396.984 96.789V96.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M394.992 96.164H398.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M396.984 96.789V97.418' fill='#8585c2'/>
-<path clip-path='url(#clip3)' d='M396.984 96.789V97.418' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M398.976 97.418H394.992' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M107.25 203.937H110.488V138.621H107.25ZM165.918 203.937H169.156V137.683H165.918ZM224.59 203.937H227.824V141.254H224.59ZM283.258 203.937H286.496V131.859H283.258ZM341.926 203.937H345.164V132.988H341.926ZM400.594 203.937H403.832V124.844H400.594Z' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M107.25 203.937H110.488V138.621H107.25ZM165.918 203.937H169.156V137.683H165.918ZM224.59 203.937H227.824V141.254H224.59ZM283.258 203.937H286.496V131.859H283.258ZM341.926 203.937H345.164V132.988H341.926ZM400.594 203.937H403.832V124.844H400.594Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M108.871 138.621V138.433' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M108.871 138.621V138.433' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M106.875 138.434H110.86' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M108.871 138.621V138.808' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M108.871 138.621V138.808' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M110.864 138.808H106.879' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M167.539 137.683V136.429' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M167.539 137.683V136.429' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M165.547 136.43H169.532' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M167.539 137.683V138.937' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M167.539 137.683V138.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M169.532 138.938H165.547' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M226.207 141.254V141.066' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M226.207 141.254V141.066' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M224.215 141.067H228.2' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M226.207 141.254V141.441' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M226.207 141.254V141.441' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M228.2 141.442H224.215' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M284.875 131.859V131.609' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M284.875 131.859V131.609' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M282.883 131.61H286.868' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M284.875 131.859V132.109' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M284.875 131.859V132.109' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M286.868 132.11H282.883' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M343.547 132.988V132.988' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M341.551 132.988H345.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M343.547 132.988V132.988' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M341.551 132.988H345.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M402.215 124.844V124.844' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M400.223 124.843H404.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M402.215 124.844V124.844' fill='#6666b3'/>
-<path clip-path='url(#clip3)' d='M400.223 124.843H404.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M112.481 203.937H115.719V136.179H112.481ZM171.149 203.937H174.387V133.176H171.149ZM229.82 203.937H233.055V140.941H229.82ZM288.488 203.937H291.727V134.051H288.488ZM347.156 203.937H350.395V109.129H347.156ZM405.824 203.937H409.063V123.469H405.824Z' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M112.481 203.937H115.719V136.179H112.481ZM171.149 203.937H174.387V133.176H171.149ZM229.82 203.937H233.055V140.941H229.82ZM288.488 203.937H291.727V134.051H288.488ZM347.156 203.937H350.395V109.129H347.156ZM405.824 203.937H409.063V123.469H405.824Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M114.098 136.179V135.867' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M114.098 136.179V135.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M112.105 135.867H116.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M114.098 136.179V136.492' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M114.098 136.179V136.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M116.094 136.492H112.109' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M172.77 133.176V133.176' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M170.777 133.176H174.762' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M172.77 133.176V133.176' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M170.777 133.176H174.762' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M231.438 140.941V140.687' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M231.438 140.941V140.687' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M229.445 140.687H233.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M231.438 140.941V141.191' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M231.438 140.941V141.191' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M233.43 141.191H229.445' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M290.106 134.051V133.926' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M290.106 134.051V133.926' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M288.113 133.926H292.098' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M290.106 134.051V134.176' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M290.106 134.051V134.176' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M292.098 134.176H288.113' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M348.777 109.129V108.937' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M348.777 109.129V108.937' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M346.781 108.937H350.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M348.777 109.129V109.316' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M348.777 109.129V109.316' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M350.769 109.316H346.785' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M407.445 123.469V122.465' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M407.445 123.469V122.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M405.453 122.465H409.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M407.445 123.469V124.469' fill='#4747a4'/>
-<path clip-path='url(#clip3)' d='M407.445 123.469V124.469' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M409.437 124.469H405.453' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M117.711 203.937H120.949V139.062H117.711ZM176.379 203.937H179.617V133.176H176.379ZM235.051 203.937H238.285V140.941H235.051ZM293.719 203.937H296.957V131.734H293.719ZM352.387 203.937H355.625V133.238H352.387ZM411.055 203.937H414.293V124.781H411.055Z' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M117.711 203.937H120.949V139.062H117.711ZM176.379 203.937H179.617V133.176H176.379ZM235.051 203.937H238.285V140.941H235.051ZM293.719 203.937H296.957V131.734H293.719ZM352.387 203.937H355.625V133.238H352.387ZM411.055 203.937H414.293V124.781H411.055Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M119.328 139.062V138.871' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M119.328 139.062V138.871' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M117.336 138.871H121.321' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M119.328 139.062V139.25' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M119.328 139.062V139.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M121.325 139.25H117.34' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M178 133.176V133.176' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M176.008 133.176H179.993' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M178 133.176V133.176' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M176.008 133.176H179.993' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M236.668 140.941V140.5' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M236.668 140.941V140.5' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M234.676 140.5H238.661' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M236.668 140.941V141.379' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M236.668 140.941V141.379' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M238.66 141.379H234.675' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M295.336 131.734V131.672' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M295.336 131.734V131.672' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M293.344 131.672H297.329' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M295.336 131.734V131.797' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M295.336 131.734V131.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M297.328 131.797H293.343' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M354.008 133.238V133.176' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M354.008 133.238V133.176' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M352.012 133.175H356' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M354.008 133.238V133.301' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M354.008 133.238V133.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M355.999 133.301H352.015' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M412.676 124.781V124.719' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M412.676 124.781V124.719' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M410.684 124.719H414.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M412.676 124.781V124.844' fill='#292994'/>
-<path clip-path='url(#clip3)' d='M412.676 124.781V124.844' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M414.667 124.843H410.683' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M122.941 203.937H126.18V127.601H122.941ZM181.609 203.937H184.848V131.797H181.609ZM240.281 203.937H243.516V141.316H240.281ZM298.949 203.937H302.188V140H298.949ZM357.617 203.937H360.856V109.691H357.617ZM416.285 203.937H419.524V105.308H416.285Z' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M122.941 203.937H126.18V127.601H122.941ZM181.609 203.937H184.848V131.797H181.609ZM240.281 203.937H243.516V141.316H240.281ZM298.949 203.937H302.188V140H298.949ZM357.617 203.937H360.856V109.691H357.617ZM416.285 203.937H419.524V105.308H416.285Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M124.559 127.601V127.351' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M124.559 127.601V127.351' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M122.566 127.351H126.551' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M124.559 127.601V127.851' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M124.559 127.601V127.851' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M126.555 127.851H122.57' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M183.231 131.797V129.418' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M183.231 131.797V129.418' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M181.238 129.418H185.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M183.231 131.797V134.176' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M183.231 131.797V134.176' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M185.223 134.176H181.238' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M241.899 141.316V141.129' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M241.899 141.316V141.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M239.906 141.128H243.891' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M241.899 141.316V141.504' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M241.899 141.316V141.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M243.891 141.504H239.906' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M300.567 140V139.875' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M300.567 140V139.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M298.574 139.875H302.559' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M300.567 140V140.125' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M300.567 140V140.125' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M302.559 140.125H298.574' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M359.238 109.691V108.812' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M359.238 109.691V108.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M357.242 108.813H361.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M359.238 109.691V110.566' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M359.238 109.691V110.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M361.23 110.566H357.246' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M417.906 105.308V104.554' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M417.906 105.308V104.554' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M415.914 104.555H419.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M417.906 105.308V106.058' fill='#0a0a85'/>
-<path clip-path='url(#clip3)' d='M417.906 105.308V106.058' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M419.898 106.059H415.914' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M128.172 203.937H131.41V116.828H128.172ZM186.84 203.937H190.078V126.785H186.84ZM245.512 203.937H248.746V144.195H245.512ZM362.848 203.937H366.086V117.582H362.848ZM421.516 203.937H424.754V78.691H421.516Z' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M128.172 203.937H131.41V116.828H128.172ZM186.84 203.937H190.078V126.785H186.84ZM245.512 203.937H248.746V144.195H245.512ZM362.848 203.937H366.086V117.582H362.848ZM421.516 203.937H424.754V78.691H421.516Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M129.789 116.828V116.515' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M129.789 116.828V116.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M127.797 116.516H131.782' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M129.789 116.828V117.144' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M129.789 116.828V117.144' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M131.785 117.145H127.8' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M188.461 126.785V124.219' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M188.461 126.785V124.219' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M186.469 124.219H190.454' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M188.461 126.785V129.355' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M188.461 126.785V129.355' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M190.453 129.355H186.468' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M247.129 144.195V144.07' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M247.129 144.195V144.07' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M245.137 144.071H249.122' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M247.129 144.195V144.32' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M247.129 144.195V144.32' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M249.121 144.32H245.136' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M364.469 117.582V117.269' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M364.469 117.582V117.269' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M362.473 117.269H366.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M364.469 117.582V117.894' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M364.469 117.582V117.894' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M366.46 117.894H362.476' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M423.137 78.691V78.691' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M421.144 78.691H425.128' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M423.137 78.691V78.691' fill='#000076'/>
-<path clip-path='url(#clip3)' d='M421.144 78.691H425.128' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M133.402 203.937H136.641V140.5H133.402ZM192.07 203.937H195.309V138.621H192.07ZM250.742 203.937H253.977V140.875H250.742ZM309.41 203.937H312.649V140.625H309.41ZM368.078 203.937H371.317V141.066H368.078ZM426.746 203.937H429.984V142.629H426.746Z' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M133.402 203.937H136.641V140.5H133.402ZM192.07 203.937H195.309V138.621H192.07ZM250.742 203.937H253.977V140.875H250.742ZM309.41 203.937H312.649V140.625H309.41ZM368.078 203.937H371.317V141.066H368.078ZM426.746 203.937H429.984V142.629H426.746Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M135.02 140.5V140.187' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M135.02 140.5V140.187' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M133.027 140.187H137.012' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M135.02 140.5V140.812' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M135.02 140.5V140.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M137.016 140.812H133.031' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M193.692 138.621V138.621' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M191.699 138.621H195.684' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M193.692 138.621V138.621' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M191.699 138.621H195.684' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M252.359 140.875V140.5' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M252.359 140.875V140.5' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M250.367 140.5H254.352' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M252.359 140.875V141.254' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M252.359 140.875V141.254' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M254.352 141.254H250.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M311.027 140.625V140.375' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M311.027 140.625V140.375' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M309.035 140.375H313.02' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M311.027 140.625V140.875' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M311.027 140.625V140.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M313.02 140.875H309.035' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M369.699 141.066V140.812' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M369.699 141.066V140.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M367.703 140.812H371.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M369.699 141.066V141.316' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M369.699 141.066V141.316' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M371.692 141.316H367.707' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M428.367 142.629V140.062' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M428.367 142.629V140.062' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M426.375 140.063H430.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M428.367 142.629V145.199' fill='#000067'/>
-<path clip-path='url(#clip3)' d='M428.367 142.629V145.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip3)' d='M430.359 145.199H426.375' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(0 -1 1 0 -94.367 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -35.698 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 22.971 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 81.64 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 140.309 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 198.978 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -89.137 248.024)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -30.468 247.085)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 28.201 249.903)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 86.87 247.147)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 145.539 246.333)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 204.208 238.318)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -83.906 247.21)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -25.237 244.329)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 33.432 249.84)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.101 248.713)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 150.77 239.382)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-55' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 209.439 223.977)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-52' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.676 238.756)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -20.007 241.637)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 38.662 249.527)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 97.331 247.774)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 156 245.143)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-55' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 214.669 205.253)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-55' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -73.445 247.085)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -14.776 246.145)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 43.893 249.715)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 102.562 240.321)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 161.231 241.449)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 219.9 233.308)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -68.215 244.642)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -9.546 241.637)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.123 249.402)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 107.792 242.513)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 166.461 217.589)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.13 231.93)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -62.984 247.523)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -4.315 241.637)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 54.354 249.402)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.023 240.196)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 171.692 241.699)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 230.361 233.245)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -57.754 236.063)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 0.915 240.259)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 59.584 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.253 248.462)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 176.922 218.153)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 235.591 213.769)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-55' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -52.524 225.292)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-51' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 6.145 235.249)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 64.814 252.658)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-57' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 182.152 226.043)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-51' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 240.821 187.155)'>
-<use x='109.598' xlink:href='#g3-1' y='183.949'/>
-<use x='113.103' xlink:href='#g3-1' y='183.949'/>
-<use x='116.608' xlink:href='#g3-1' y='183.949'/>
-<use x='120.114' xlink:href='#g1-50' y='183.949'/>
-<use x='122.76' xlink:href='#g1-46' y='183.949'/>
-<use x='124.23' xlink:href='#g1-52' y='183.949'/>
-<use x='126.877' xlink:href='#g1-52' y='183.949'/>
-<use x='129.523' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -47.293 248.963)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 11.376 247.085)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 70.045 249.339)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 128.714 249.089)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 187.383 249.527)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 246.052 251.093)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-57' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -124.589 311.062)'>
-<use x='114.487' xlink:href='#g0-82' y='183.949'/>
-<use x='120.457' xlink:href='#g0-101' y='183.949'/>
-<use x='124.553' xlink:href='#g0-108' y='183.949'/>
-<use x='126.753' xlink:href='#g0-97' y='183.949'/>
-<use x='131.181' xlink:href='#g0-116' y='183.949'/>
-<use x='134.509' xlink:href='#g0-105' y='183.949'/>
-<use x='136.709' xlink:href='#g0-118' y='183.949'/>
-<use x='140.957' xlink:href='#g0-101' y='183.949'/>
-<use x='148.124' xlink:href='#g0-116' y='183.949'/>
-<use x='151.452' xlink:href='#g0-105' y='183.949'/>
-<use x='153.652' xlink:href='#g0-109' y='183.949'/>
-<use x='160.972' xlink:href='#g0-101' y='183.949'/>
-<use x='168.139' xlink:href='#g2-40' y='183.949'/>
-<use x='171.432' xlink:href='#g2-108' y='183.949'/>
-<use x='173.453' xlink:href='#g2-111' y='183.949'/>
-<use x='177.452' xlink:href='#g2-119' y='183.949'/>
-<use x='183' xlink:href='#g2-101' y='183.949'/>
-<use x='186.764' xlink:href='#g2-114' y='183.949'/>
-<use x='192.479' xlink:href='#g2-105' y='183.949'/>
-<use x='194.499' xlink:href='#g2-115' y='183.949'/>
-<use x='200.568' xlink:href='#g2-98' y='183.949'/>
-<use x='205.176' xlink:href='#g2-101' y='183.949'/>
-<use x='208.94' xlink:href='#g2-116' y='183.949'/>
-<use x='211.998' xlink:href='#g2-116' y='183.949'/>
-<use x='215.056' xlink:href='#g2-101' y='183.949'/>
-<use x='218.819' xlink:href='#g2-114' y='183.949'/>
-<use x='221.711' xlink:href='#g2-41' y='183.949'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-2.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-2.svg
deleted file mode 100644
index 9990cdc..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-2.svg
+++ /dev/null
@@ -1,1146 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='243.704pt' version='1.1' viewBox='106.737 54.995 381.623 243.704' width='381.623pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<defs>
-<clipPath id='clip4'>
-<path d='M135.949 249.281H487.961V81.515H135.949Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-45' transform='scale(1.6)' xlink:href='#g1-45'/>
-<use id='g2-49' transform='scale(1.6)' xlink:href='#g1-49'/>
-<use id='g2-54' transform='scale(1.6)' xlink:href='#g1-54'/>
-<use id='g2-56' transform='scale(1.6)' xlink:href='#g1-56'/>
-<use id='g2-78' transform='scale(1.6)' xlink:href='#g1-78'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-103' transform='scale(1.6)' xlink:href='#g1-103'/>
-<use id='g2-104' transform='scale(1.6)' xlink:href='#g1-104'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-106' transform='scale(1.6)' xlink:href='#g1-106'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-109' transform='scale(1.6)' xlink:href='#g1-109'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<use id='g2-120' transform='scale(1.6)' xlink:href='#g1-120'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.005V-0.448H0.508V0H0.648L0.503 0.638H0.727L0.956 -0.005Z' id='g1-44'/>
-<path d='M1.465 -0.951V-1.265H0.06V-0.951H1.465Z' id='g1-45'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M2.959 -0.438C2.884 -0.438 2.874 -0.438 2.834 -0.418C2.59 -0.334 2.336 -0.279 2.072 -0.279C1.27 -0.279 0.697 -0.956 0.697 -1.729C0.697 -2.565 1.345 -3.178 2.042 -3.178C2.182 -3.178 2.511 -3.143 2.675 -2.745C2.535 -2.824 2.381 -2.859 2.252 -2.859C1.719 -2.859 1.27 -2.361 1.27 -1.729C1.27 -1.081 1.733 -0.598 2.247 -0.598C2.635 -0.598 3.228 -0.912 3.228 -1.798C3.228 -2.301 3.193 -3.507 2.047 -3.507C1.101 -3.507 0.294 -2.725 0.294 -1.729C0.294 -0.742 1.091 0.05 2.052 0.05C2.511 0.05 2.939 -0.139 3.228 -0.438H2.959ZM2.252 -0.927C1.943 -0.927 1.674 -1.27 1.674 -1.729C1.674 -2.202 1.953 -2.531 2.247 -2.531C2.555 -2.531 2.824 -2.187 2.824 -1.729C2.824 -1.255 2.545 -0.927 2.252 -0.927Z' id='g1-64'/>
-<path d='M3.083 -0.608C2.735 -0.394 2.575 -0.299 2.077 -0.299C1.305 -0.299 0.837 -1.021 0.837 -1.738C0.837 -2.476 1.35 -3.168 2.077 -3.168C2.406 -3.168 2.745 -3.064 2.974 -2.889L3.054 -3.342C2.705 -3.472 2.426 -3.512 2.062 -3.512C1.076 -3.512 0.339 -2.695 0.339 -1.733C0.339 -0.707 1.121 0.05 2.092 0.05C2.58 0.05 2.785 -0.05 3.113 -0.229L3.083 -0.608Z' id='g1-67'/>
-<path d='M2.725 -1.624V-1.953H0.986V-3.098H1.714C1.773 -3.098 1.833 -3.093 1.893 -3.093H2.874V-3.442H0.483V0H2.949V-0.389H2.501C2.082 -0.389 1.664 -0.379 1.245 -0.379H0.986V-1.624H2.725Z' id='g1-69'/>
-<path d='M3.173 -1.489H2.057V-1.161H2.735V-0.399C2.516 -0.344 2.301 -0.299 2.077 -0.299C1.31 -0.299 0.837 -1.021 0.837 -1.733C0.837 -2.416 1.3 -3.168 2.052 -3.168C2.511 -3.168 2.8 -3.029 3.049 -2.819L3.128 -3.273C2.785 -3.437 2.481 -3.517 2.102 -3.517C1.096 -3.517 0.339 -2.73 0.339 -1.733C0.339 -0.762 1.091 0.05 2.072 0.05C2.431 0.05 2.854 -0.03 3.173 -0.194V-1.489Z' id='g1-71'/>
-<path d='M3.248 -3.457H2.745V-1.963H0.986V-3.457H0.483V0H0.986V-1.634H2.745V0H3.248V-3.457Z' id='g1-72'/>
-<path d='M0.986 -3.457H0.483V0H0.986V-3.457Z' id='g1-73'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M3.611 -1.714C3.611 -2.745 2.854 -3.562 1.953 -3.562S0.294 -2.745 0.294 -1.714S1.061 0.105 1.953 0.105C2.849 0.105 3.611 -0.687 3.611 -1.714ZM1.953 -0.249C1.35 -0.249 0.797 -0.852 0.797 -1.793C0.797 -2.675 1.355 -3.218 1.953 -3.218S3.108 -2.675 3.108 -1.793C3.108 -0.847 2.555 -0.249 1.953 -0.249Z' id='g1-79'/>
-<path d='M1.868 -1.42C2.511 -1.42 3.083 -1.873 3.083 -2.446C3.083 -2.979 2.555 -3.457 1.833 -3.457H0.488V0H0.991V-1.42H1.868ZM1.709 -3.163C2.271 -3.163 2.63 -2.864 2.63 -2.446C2.63 -2.037 2.291 -1.729 1.709 -1.729H0.976V-3.163H1.709Z' id='g1-80'/>
-<path d='M3.143 -3.457H2.71V-1.161C2.71 -0.493 2.262 -0.189 1.833 -0.189S0.986 -0.498 0.986 -1.156V-3.457H0.483V-1.166C0.483 -0.433 1.111 0.105 1.828 0.105C2.54 0.105 3.143 -0.438 3.143 -1.166V-3.457Z' id='g1-85'/>
-<path d='M1.968 -1.823L3.228 -3.457H2.685L1.724 -2.182L0.742 -3.457H0.149L1.479 -1.823L0.075 0H0.618L1.724 -1.499L2.854 0H3.447L1.968 -1.823Z' id='g1-88'/>
-<path d='M2.934 -3.238V-3.457H0.369V-3.123H1.41C1.479 -3.123 1.539 -3.128 1.609 -3.128H2.291L0.294 -0.229V0H2.964V-0.354H2.466C1.958 -0.354 1.45 -0.344 0.941 -0.344L2.934 -3.238Z' id='g1-90'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M2.506 -2.262C2.396 -2.262 2.062 -2.257 1.684 -2.112L1.674 -2.107C1.494 -2.227 1.32 -2.262 1.176 -2.262C0.687 -2.262 0.324 -1.878 0.324 -1.45C0.324 -1.275 0.384 -1.096 0.498 -0.956C0.428 -0.872 0.354 -0.732 0.354 -0.543C0.354 -0.349 0.433 -0.224 0.478 -0.164C0.204 -0.005 0.149 0.224 0.149 0.344C0.149 0.722 0.672 1.021 1.32 1.021C1.973 1.021 2.491 0.722 2.491 0.344C2.491 -0.359 1.619 -0.359 1.405 -0.359H0.941C0.862 -0.359 0.648 -0.359 0.648 -0.618C0.648 -0.717 0.682 -0.767 0.687 -0.777C0.862 -0.667 1.036 -0.633 1.171 -0.633C1.659 -0.633 2.022 -1.016 2.022 -1.445C2.022 -1.604 1.978 -1.748 1.888 -1.883C1.868 -1.913 1.868 -1.918 1.868 -1.923C1.868 -1.943 2.167 -1.943 2.192 -1.943C2.197 -1.943 2.386 -1.943 2.565 -1.923L2.506 -2.262ZM1.176 -0.941C0.907 -0.941 0.707 -1.111 0.707 -1.445C0.707 -1.833 0.956 -1.953 1.171 -1.953C1.44 -1.953 1.639 -1.783 1.639 -1.45C1.639 -1.061 1.39 -0.941 1.176 -0.941ZM1.41 0.03C1.524 0.03 2.112 0.03 2.112 0.349C2.112 0.563 1.738 0.712 1.32 0.712S0.528 0.563 0.528 0.349C0.528 0.324 0.528 0.03 0.932 0.03H1.41Z' id='g1-103'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.161 -2.262 0.932 -2.012 0.832 -1.908V-3.457H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-104'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.986 -3.417H0.483V-2.914H0.986V-3.417ZM-0.324 0.847C-0.095 0.971 0.13 1.016 0.319 1.016C0.663 1.016 0.986 0.752 0.986 0.294V-2.212H0.568V0.329C0.568 0.418 0.568 0.498 0.463 0.583C0.349 0.667 0.209 0.667 0.164 0.667C-0.045 0.667 -0.174 0.573 -0.234 0.518L-0.324 0.847Z' id='g1-106'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M3.786 -1.474C3.786 -1.863 3.671 -2.262 3.059 -2.262C2.64 -2.262 2.381 -2.017 2.262 -1.858C2.212 -1.993 2.087 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.21C2.316 -1.539 2.456 -1.933 2.839 -1.933C3.352 -1.933 3.352 -1.584 3.352 -1.44V0H3.786V-1.474Z' id='g1-109'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M2.316 -2.212H1.883V-0.767C1.883 -0.369 1.544 -0.244 1.255 -0.244C0.887 -0.244 0.847 -0.344 0.847 -0.573V-2.212H0.413V-0.543C0.413 -0.1 0.608 0.05 0.956 0.05C1.161 0.05 1.599 0.01 1.898 -0.229V0H2.316V-2.212Z' id='g1-117'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M2.112 -2.002V-2.212H0.219V-1.893H0.951C1.011 -1.893 1.071 -1.898 1.131 -1.898H1.519L0.149 -0.219V0H2.127V-0.334H1.355C1.295 -0.334 1.235 -0.329 1.176 -0.329H0.742L2.112 -2.002Z' id='g1-122'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g3-1'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M6.581 -2.663C6.581 -3.327 6.402 -4.08 5.317 -4.08C4.564 -4.08 4.142 -3.622 3.927 -3.344C3.865 -3.524 3.676 -4.08 2.762 -4.08C2.053 -4.08 1.623 -3.667 1.417 -3.398V-4.035H0.726V0H1.47V-2.188C1.47 -2.78 1.704 -3.497 2.385 -3.497C3.282 -3.497 3.282 -2.86 3.282 -2.6V0H4.026V-2.188C4.026 -2.78 4.259 -3.497 4.94 -3.497C5.837 -3.497 5.837 -2.86 5.837 -2.6V0H6.581V-2.663Z' id='g0-109'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page4'>
-<path d='M194.617 258.136V249.281M253.285 258.136V249.281M311.953 258.136V249.281M370.625 258.136V249.281M429.293 258.136V249.281M194.617 72.66V81.515M253.285 72.66V81.515M311.953 72.66V81.515M370.625 72.66V81.515M429.293 72.66V81.515' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M165.281 253.535V249.281M223.953 253.535V249.281M282.621 253.535V249.281M341.289 253.535V249.281M399.957 253.535V249.281M458.629 253.535V249.281M165.281 77.265V81.515M223.953 77.265V81.515M282.621 77.265V81.515M341.289 77.265V81.515M399.957 77.265V81.515M458.629 77.265V81.515' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 249.281H140.199M135.949 215.73H140.199M135.949 182.176H140.199M135.949 148.625H140.199M135.949 115.07H140.199M135.949 81.515H140.199M487.961 249.281H483.711M487.961 215.73H483.711M487.961 182.176H483.711M487.961 148.625H483.711M487.961 115.07H483.711M487.961 81.515H483.711' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 249.281V81.515H487.961V249.281H135.949Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -21.265 61.588)'>
-<use x='168.285' xlink:href='#g2-97' y='201.694'/>
-<use x='172.353' xlink:href='#g2-108' y='201.694'/>
-<use x='174.373' xlink:href='#g2-108' y='201.694'/>
-<use x='176.393' xlink:href='#g2-111' y='201.694'/>
-<use x='180.863' xlink:href='#g2-99' y='201.694'/>
-<use x='184.627' xlink:href='#g2-45' y='201.694'/>
-<use x='187.449' xlink:href='#g2-116' y='201.694'/>
-<use x='190.507' xlink:href='#g2-101' y='201.694'/>
-<use x='194.271' xlink:href='#g2-115' y='201.694'/>
-<use x='197.517' xlink:href='#g2-116' y='201.694'/>
-<use x='200.575' xlink:href='#g2-49' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 61.588)'>
-<use x='168.285' xlink:href='#g2-97' y='201.694'/>
-<use x='172.353' xlink:href='#g2-108' y='201.694'/>
-<use x='174.373' xlink:href='#g2-108' y='201.694'/>
-<use x='176.393' xlink:href='#g2-111' y='201.694'/>
-<use x='180.863' xlink:href='#g2-99' y='201.694'/>
-<use x='184.627' xlink:href='#g2-45' y='201.694'/>
-<use x='187.449' xlink:href='#g2-116' y='201.694'/>
-<use x='190.507' xlink:href='#g2-101' y='201.694'/>
-<use x='194.271' xlink:href='#g2-115' y='201.694'/>
-<use x='197.517' xlink:href='#g2-116' y='201.694'/>
-<use x='200.575' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 61.588)'>
-<use x='168.285' xlink:href='#g2-115' y='201.694'/>
-<use x='171.531' xlink:href='#g2-104' y='201.694'/>
-<use x='175.904' xlink:href='#g2-54' y='201.694'/>
-<use x='180.138' xlink:href='#g2-98' y='201.694'/>
-<use x='184.746' xlink:href='#g2-101' y='201.694'/>
-<use x='188.509' xlink:href='#g2-110' y='201.694'/>
-<use x='192.882' xlink:href='#g2-99' y='201.694'/>
-<use x='196.646' xlink:href='#g2-104' y='201.694'/>
-<use x='201.018' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 61.588)'>
-<use x='168.285' xlink:href='#g2-115' y='201.694'/>
-<use x='171.531' xlink:href='#g2-104' y='201.694'/>
-<use x='175.904' xlink:href='#g2-56' y='201.694'/>
-<use x='180.138' xlink:href='#g2-98' y='201.694'/>
-<use x='184.746' xlink:href='#g2-101' y='201.694'/>
-<use x='188.509' xlink:href='#g2-110' y='201.694'/>
-<use x='192.882' xlink:href='#g2-99' y='201.694'/>
-<use x='196.646' xlink:href='#g2-104' y='201.694'/>
-<use x='201.018' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 61.588)'>
-<use x='168.285' xlink:href='#g2-120' y='201.694'/>
-<use x='172.187' xlink:href='#g2-109' y='201.694'/>
-<use x='178.912' xlink:href='#g2-97' y='201.694'/>
-<use x='182.98' xlink:href='#g2-108' y='201.694'/>
-<use x='185' xlink:href='#g2-108' y='201.694'/>
-<use x='187.02' xlink:href='#g2-111' y='201.694'/>
-<use x='191.49' xlink:href='#g2-99' y='201.694'/>
-<use x='195.254' xlink:href='#g2-45' y='201.694'/>
-<use x='198.076' xlink:href='#g2-116' y='201.694'/>
-<use x='201.134' xlink:href='#g2-101' y='201.694'/>
-<use x='204.898' xlink:href='#g2-115' y='201.694'/>
-<use x='208.144' xlink:href='#g2-116' y='201.694'/>
-<use x='211.202' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 61.588)'>
-<use x='168.285' xlink:href='#g2-99' y='201.694'/>
-<use x='172.049' xlink:href='#g2-97' y='201.694'/>
-<use x='176.117' xlink:href='#g2-99' y='201.694'/>
-<use x='179.88' xlink:href='#g2-104' y='201.694'/>
-<use x='184.253' xlink:href='#g2-101' y='201.694'/>
-<use x='188.017' xlink:href='#g2-45' y='201.694'/>
-<use x='190.839' xlink:href='#g2-115' y='201.694'/>
-<use x='194.086' xlink:href='#g2-99' y='201.694'/>
-<use x='197.849' xlink:href='#g2-114' y='201.694'/>
-<use x='200.741' xlink:href='#g2-97' y='201.694'/>
-<use x='204.81' xlink:href='#g2-116' y='201.694'/>
-<use x='207.868' xlink:href='#g2-99' y='201.694'/>
-<use x='211.631' xlink:href='#g2-104' y='201.694'/>
-<use x='216.004' xlink:href='#g2-78' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 49.223)'>
-<use x='168.285' xlink:href='#g1-48' y='201.694'/>
-<use x='170.931' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 15.67)'>
-<use x='168.285' xlink:href='#g1-48' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-53' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -17.883)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -51.436)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-53' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -84.989)'>
-<use x='168.285' xlink:href='#g1-50' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -118.543)'>
-<use x='168.285' xlink:href='#g1-50' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-53' y='201.694'/>
-<use x='175.048' xlink:href='#g1-120' y='201.694'/>
-</g>
-<path clip-path='url(#clip4)' d='M135.949 182.176H487.961' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M140.125 249.281H143.363V182.176H140.125ZM198.797 249.281H202.035V182.176H198.797ZM257.465 249.281H260.703V182.176H257.465ZM316.133 249.281H319.371V182.176H316.133ZM374.801 249.281H378.039V182.176H374.801ZM433.473 249.281H436.711V182.176H433.473Z' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M140.125 249.281H143.363V182.176H140.125ZM198.797 249.281H202.035V182.176H198.797ZM257.465 249.281H260.703V182.176H257.465ZM316.133 249.281H319.371V182.176H316.133ZM374.801 249.281H378.039V182.176H374.801ZM433.473 249.281H436.711V182.176H433.473Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M141.746 182.176V181.906' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M141.746 182.176V181.906' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M139.754 181.907H143.738' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M141.746 182.176V182.445' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M141.746 182.176V182.445' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M143.739 182.446H139.754' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M200.414 182.176V181.773' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M200.414 182.176V181.773' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M198.422 181.774H202.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M200.414 182.176V182.578' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M200.414 182.176V182.578' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M202.406 182.578H198.422' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M259.082 182.176V180.297' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M259.082 182.176V180.297' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M257.09 180.297H261.078' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M259.082 182.176V184.054' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M259.082 182.176V184.054' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M261.074 184.055H257.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M317.754 182.176V181.57' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M317.754 182.176V181.57' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M315.762 181.57H319.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M317.754 182.176V182.781' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M317.754 182.176V182.781' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M319.746 182.781H315.758' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M376.422 182.176V181.035' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M376.422 182.176V181.035' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M374.43 181.035H378.414' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M376.422 182.176V183.316' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M376.422 182.176V183.316' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M378.414 183.316H374.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M435.09 182.176V179.156' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M435.09 182.176V179.156' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M433.098 179.156H437.082' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M435.09 182.176V185.195' fill='#e0e0f0'/>
-<path clip-path='url(#clip4)' d='M435.09 182.176V185.195' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M437.082 185.195H433.098' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M145.356 249.281H148.594V181.371H145.356ZM204.028 249.281H207.266V179.492H204.028ZM262.695 249.281H265.934V149.898H262.695ZM321.363 249.281H324.602V81.515H321.363ZM380.031 249.281H383.27V81.515H380.031ZM438.703 249.281H441.942V81.515H438.703Z' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M145.356 249.281H148.594V181.371H145.356ZM204.028 249.281H207.266V179.492H204.028ZM262.695 249.281H265.934V149.898H262.695ZM321.363 249.281H324.602V81.515H321.363ZM380.031 249.281H383.27V81.515H380.031ZM438.703 249.281H441.942V81.515H438.703Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M146.977 181.371V181.238' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M146.977 181.371V181.238' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M144.984 181.239H148.968' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M146.977 181.371V181.504' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M146.977 181.371V181.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M148.969 181.504H144.984' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M205.645 179.492V179.359' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M205.645 179.492V179.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M203.652 179.36H207.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M205.645 179.492V179.625' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M205.645 179.492V179.625' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M207.636 179.625H203.652' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M264.313 149.898V149.359' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M264.313 149.898V149.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M262.32 149.359H266.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M264.313 149.898V150.433' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M264.313 149.898V150.433' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M266.304 150.434H262.32' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M322.984 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M320.992 81.516H324.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M322.984 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M320.992 81.516H324.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M381.652 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M379.66 81.516H383.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M381.652 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M379.66 81.516H383.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M440.32 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M438.328 81.516H442.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M440.32 81.515V81.515' fill='#c2c2e1'/>
-<path clip-path='url(#clip4)' d='M438.328 81.516H442.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M150.586 249.281H153.824V178.687H150.586ZM209.258 249.281H212.496V177.679H209.258ZM267.926 249.281H271.164V81.515H267.926ZM326.594 249.281H329.832V133.39H326.594ZM385.262 249.281H388.5V110.91H385.262ZM443.934 249.281H447.172V81.515H443.934Z' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M150.586 249.281H153.824V178.687H150.586ZM209.258 249.281H212.496V177.679H209.258ZM267.926 249.281H271.164V81.515H267.926ZM326.594 249.281H329.832V133.39H326.594ZM385.262 249.281H388.5V110.91H385.262ZM443.934 249.281H447.172V81.515H443.934Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M152.207 178.687V178.418' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M152.207 178.687V178.418' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M150.215 178.418H154.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M152.207 178.687V178.953' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M152.207 178.687V178.953' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M154.2 178.953H150.215' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M210.875 177.679V177.547' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M210.875 177.679V177.547' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M208.883 177.547H212.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M210.875 177.679V177.812' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M210.875 177.679V177.812' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M212.867 177.812H208.883' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M269.543 81.515V81.515' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M267.551 81.516H271.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M269.543 81.515V81.515' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M267.551 81.516H271.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M328.215 133.39V131.176' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M328.215 133.39V131.176' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M326.223 131.176H330.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M328.215 133.39V135.605' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M328.215 133.39V135.605' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M330.207 135.606H326.219' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M386.883 110.91V110.371' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M386.883 110.91V110.371' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M384.891 110.371H388.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M386.883 110.91V111.445' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M386.883 110.91V111.445' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M388.875 111.445H384.891' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M445.551 81.515V81.515' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M443.559 81.516H447.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M445.551 81.515V81.515' fill='#a3a3d1'/>
-<path clip-path='url(#clip4)' d='M443.559 81.516H447.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M155.817 249.281H159.055V161.91H155.817ZM214.488 249.281H217.727V158.219H214.488ZM273.156 249.281H276.395V81.515H273.156ZM331.824 249.281H335.063V150.097H331.824ZM390.492 249.281H393.731V162.445H390.492ZM449.164 249.281H452.402V181.101H449.164Z' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M155.817 249.281H159.055V161.91H155.817ZM214.488 249.281H217.727V158.219H214.488ZM273.156 249.281H276.395V81.515H273.156ZM331.824 249.281H335.063V150.097H331.824ZM390.492 249.281H393.731V162.445H390.492ZM449.164 249.281H452.402V181.101H449.164Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M157.438 161.91V161.777' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M157.438 161.91V161.777' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M155.445 161.777H159.429' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M157.438 161.91V162.043' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M157.438 161.91V162.043' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M159.43 162.043H155.445' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M216.106 158.219V158.019' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M216.106 158.219V158.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M214.113 158.02H218.097' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M216.106 158.219V158.422' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M216.106 158.219V158.422' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M218.098 158.422H214.113' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M274.774 81.515V81.515' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M272.781 81.516H276.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M274.774 81.515V81.515' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M272.781 81.516H276.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M333.445 150.097V149.496' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M333.445 150.097V149.496' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M331.453 149.496H335.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M333.445 150.097V150.703' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M333.445 150.097V150.703' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M335.437 150.703H331.449' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M392.113 162.445V162.179' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M392.113 162.445V162.179' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M390.121 162.18H394.105' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M392.113 162.445V162.715' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M392.113 162.445V162.715' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M394.105 162.714H390.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M450.781 181.101V177.41' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M450.781 181.101V177.41' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M448.789 177.411H452.773' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M450.781 181.101V184.793' fill='#8585c2'/>
-<path clip-path='url(#clip4)' d='M450.781 181.101V184.793' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M452.773 184.793H448.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M161.047 249.281H164.285V169.023H161.047ZM219.719 249.281H222.957V168.152H219.719ZM278.387 249.281H281.625V81.515H278.387ZM337.055 249.281H340.293V81.515H337.055ZM395.723 249.281H398.961V81.515H395.723ZM454.395 249.281H457.633V81.515H454.395Z' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M161.047 249.281H164.285V169.023H161.047ZM219.719 249.281H222.957V168.152H219.719ZM278.387 249.281H281.625V81.515H278.387ZM337.055 249.281H340.293V81.515H337.055ZM395.723 249.281H398.961V81.515H395.723ZM454.395 249.281H457.633V81.515H454.395Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M162.668 169.023V168.957' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M162.668 169.023V168.957' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M160.676 168.957H164.66' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M162.668 169.023V169.09' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M162.668 169.023V169.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M164.661 169.089H160.676' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M221.336 168.152V168.015' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M221.336 168.152V168.015' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M219.344 168.016H223.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M221.336 168.152V168.285' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M221.336 168.152V168.285' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M223.329 168.285H219.344' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M280.004 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M278.012 81.516H282' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M280.004 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M278.012 81.516H282' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M338.676 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M336.684 81.516H340.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M338.676 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M336.684 81.516H340.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M397.344 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M395.352 81.516H399.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M397.344 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M395.352 81.516H399.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M456.012 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M454.02 81.516H458.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M456.012 81.515V81.515' fill='#6666b3'/>
-<path clip-path='url(#clip4)' d='M454.02 81.516H458.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M166.278 249.281H169.516V175.734H166.278ZM224.949 249.281H228.188V169.023H224.949ZM283.617 249.281H286.856V107.488H283.617ZM342.285 249.281H345.524V81.515H342.285ZM400.953 249.281H404.192V81.515H400.953ZM459.625 249.281H462.863V81.515H459.625Z' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M166.278 249.281H169.516V175.734H166.278ZM224.949 249.281H228.188V169.023H224.949ZM283.617 249.281H286.856V107.488H283.617ZM342.285 249.281H345.524V81.515H342.285ZM400.953 249.281H404.192V81.515H400.953ZM459.625 249.281H462.863V81.515H459.625Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M167.899 175.734V175.465' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M167.899 175.734V175.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M165.906 175.465H169.89' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M167.899 175.734V176.004' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M167.899 175.734V176.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M169.891 176.004H165.906' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M226.567 169.023V168.554' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M226.567 169.023V168.554' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M224.574 168.555H228.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M226.567 169.023V169.492' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M226.567 169.023V169.492' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M228.559 169.492H224.574' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M285.234 107.488V107.015' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M285.234 107.488V107.015' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M283.242 107.015H287.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M285.234 107.488V107.957' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M285.234 107.488V107.957' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M287.227 107.957H283.242' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M343.906 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M341.914 81.516H345.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M343.906 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M341.914 81.516H345.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M402.574 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M400.582 81.516H404.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M402.574 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M400.582 81.516H404.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M461.242 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M459.25 81.516H463.234' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M461.242 81.515V81.515' fill='#4747a4'/>
-<path clip-path='url(#clip4)' d='M459.25 81.516H463.234' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M171.508 249.281H174.746V168.82H171.508ZM230.18 249.281H233.414V168.621H230.18ZM288.848 249.281H292.086V81.515H288.848ZM347.516 249.281H350.754V81.515H347.516ZM406.184 249.281H409.422V81.515H406.184ZM464.856 249.281H468.094V81.515H464.856Z' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M171.508 249.281H174.746V168.82H171.508ZM230.18 249.281H233.414V168.621H230.18ZM288.848 249.281H292.086V81.515H288.848ZM347.516 249.281H350.754V81.515H347.516ZM406.184 249.281H409.422V81.515H406.184ZM464.856 249.281H468.094V81.515H464.856Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M173.129 168.82V168.554' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M173.129 168.82V168.554' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M171.137 168.555H175.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M173.129 168.82V169.09' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M173.129 168.82V169.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M175.122 169.089H171.137' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M231.797 168.621V168.554' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M231.797 168.621V168.554' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M229.805 168.555H233.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M231.797 168.621V168.687' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M231.797 168.621V168.687' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M233.79 168.688H229.805' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M290.465 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M288.473 81.516H292.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M290.465 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M288.473 81.516H292.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M349.137 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M347.145 81.516H351.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M349.137 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M347.145 81.516H351.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M407.805 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M405.813 81.516H409.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M407.805 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M405.813 81.516H409.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M466.473 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M464.481 81.516H468.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M466.473 81.515V81.515' fill='#292994'/>
-<path clip-path='url(#clip4)' d='M464.481 81.516H468.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M411.414 249.281H414.652V133.59H411.414ZM176.738 249.281H179.977V162.113H176.738ZM235.41 249.281H238.645V162.648H235.41ZM294.078 249.281H297.317V81.515H294.078ZM352.746 249.281H355.984V125.875H352.746ZM470.086 249.281H473.324V181.035H470.086Z' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M411.414 249.281H414.652V133.59H411.414ZM176.738 249.281H179.977V162.113H176.738ZM235.41 249.281H238.645V162.648H235.41ZM294.078 249.281H297.317V81.515H294.078ZM352.746 249.281H355.984V125.875H352.746ZM470.086 249.281H473.324V181.035H470.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M413.035 133.59V126.211' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M413.035 133.59V126.211' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M411.043 126.211H415.027' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M413.035 133.59V140.972' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M413.035 133.59V140.972' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M415.027 140.973H411.043' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M178.36 162.113V161.777' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M178.36 162.113V161.777' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M176.367 161.777H180.351' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M178.36 162.113V162.445' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M178.36 162.113V162.445' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M180.352 162.445H176.367' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M237.027 162.648V162.515' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M237.027 162.648V162.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M235.035 162.516H239.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M237.027 162.648V162.781' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M237.027 162.648V162.781' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M239.02 162.781H235.035' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M295.695 81.515V81.515' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M293.703 81.516H297.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M295.695 81.515V81.515' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M293.703 81.516H297.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M354.367 125.875V125.672' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M354.367 125.875V125.672' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M352.375 125.672H356.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M354.367 125.875V126.074' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M354.367 125.875V126.074' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M356.359 126.074H352.371' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M471.703 181.035V178.219' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M471.703 181.035V178.219' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M469.711 178.219H473.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M471.703 181.035V183.855' fill='#0a0a85'/>
-<path clip-path='url(#clip4)' d='M471.703 181.035V183.855' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M473.695 183.856H469.711' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M181.969 249.281H185.207V154.594H181.969ZM240.641 249.281H243.875V149.695H240.641ZM299.309 249.281H302.547V81.515H299.309ZM357.977 249.281H361.215V81.515H357.977ZM475.317 249.281H478.555V81.515H475.317Z' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M181.969 249.281H185.207V154.594H181.969ZM240.641 249.281H243.875V149.695H240.641ZM299.309 249.281H302.547V81.515H299.309ZM357.977 249.281H361.215V81.515H357.977ZM475.317 249.281H478.555V81.515H475.317Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M183.59 154.594V154.461' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M183.59 154.594V154.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M181.598 154.461H185.583' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M183.59 154.594V154.73' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M183.59 154.594V154.73' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M185.582 154.731H181.597' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M242.258 149.695V149.562' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M242.258 149.695V149.562' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M240.266 149.563H244.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M242.258 149.695V149.832' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M242.258 149.695V149.832' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M244.25 149.832H240.265' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M300.926 81.515V81.515' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M298.933 81.516H302.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M300.926 81.515V81.515' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M298.933 81.516H302.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M359.598 81.515V81.515' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M357.606 81.516H361.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M359.598 81.515V81.515' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M357.606 81.516H361.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M476.934 81.515V81.515' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M474.942 81.516H478.926' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M476.934 81.515V81.515' fill='#000076'/>
-<path clip-path='url(#clip4)' d='M474.942 81.516H478.926' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M187.199 249.281H190.438V181.64H187.199ZM245.871 249.281H249.106V181.64H245.871ZM304.539 249.281H307.777V164.258H304.539ZM363.207 249.281H366.445V151.105H363.207ZM421.875 249.281H425.113V179.828H421.875ZM480.547 249.281H483.785V181.371H480.547Z' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M187.199 249.281H190.438V181.64H187.199ZM245.871 249.281H249.106V181.64H245.871ZM304.539 249.281H307.777V164.258H304.539ZM363.207 249.281H366.445V151.105H363.207ZM421.875 249.281H425.113V179.828H421.875ZM480.547 249.281H483.785V181.371H480.547Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M188.82 181.64V181.57' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M188.82 181.64V181.57' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M186.828 181.57H190.813' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M188.82 181.64V181.707' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M188.82 181.64V181.707' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M190.813 181.707H186.828' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M247.488 181.64V181.437' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M247.488 181.64V181.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M245.496 181.437H249.481' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M247.488 181.64V181.84' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M247.488 181.64V181.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M249.481 181.84H245.496' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M306.156 164.258V163.992' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M306.156 164.258V163.992' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M304.164 163.992H308.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M306.156 164.258V164.527' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M306.156 164.258V164.527' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M308.149 164.527H304.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M364.828 151.105V150.168' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M364.828 151.105V150.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M362.836 150.168H366.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M364.828 151.105V152.047' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M364.828 151.105V152.047' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M366.82 152.047H362.832' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M423.496 179.828V179.09' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M423.496 179.828V179.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M421.504 179.09H425.488' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M423.496 179.828V180.566' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M423.496 179.828V180.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M425.488 180.567H421.504' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M482.164 181.371V178.148' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M482.164 181.371V178.148' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M480.172 178.149H484.156' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M482.164 181.371V184.594' fill='#000067'/>
-<path clip-path='url(#clip4)' d='M482.164 181.371V184.594' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M484.156 184.594H480.172' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip4)' d='M419.477 298.301H487.762V276.324H419.477Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 254.512 92.648)'>
-<use x='168.285' xlink:href='#g1-72' y='190.457'/>
-<use x='172.021' xlink:href='#g1-80' y='190.457'/>
-<use x='175.402' xlink:href='#g1-45' y='190.457'/>
-<use x='177.167' xlink:href='#g1-90' y='190.457'/>
-<use x='180.401' xlink:href='#g1-52' y='190.457'/>
-<use x='183.047' xlink:href='#g1-45' y='190.457'/>
-<use x='184.812' xlink:href='#g1-71' y='190.457'/>
-<use x='188.34' xlink:href='#g1-52' y='190.457'/>
-<use x='190.987' xlink:href='#g1-44' y='190.457'/>
-<use x='194.221' xlink:href='#g1-49' y='190.457'/>
-<use x='196.867' xlink:href='#g1-54' y='190.457'/>
-<use x='199.514' xlink:href='#g1-71' y='190.457'/>
-<use x='203.042' xlink:href='#g1-98' y='190.457'/>
-<use x='168.285' xlink:href='#g1-56' y='196.075'/>
-<use x='170.931' xlink:href='#g1-45' y='196.075'/>
-<use x='172.695' xlink:href='#g1-99' y='196.075'/>
-<use x='175.048' xlink:href='#g1-111' y='196.075'/>
-<use x='177.547' xlink:href='#g1-114' y='196.075'/>
-<use x='179.355' xlink:href='#g1-101' y='196.075'/>
-<use x='183.471' xlink:href='#g1-73' y='196.075'/>
-<use x='184.941' xlink:href='#g1-110' y='196.075'/>
-<use x='187.674' xlink:href='#g1-116' y='196.075'/>
-<use x='189.585' xlink:href='#g1-101' y='196.075'/>
-<use x='191.938' xlink:href='#g1-108' y='196.075'/>
-<use x='194.965' xlink:href='#g1-88' y='196.075'/>
-<use x='198.493' xlink:href='#g1-69' y='196.075'/>
-<use x='201.667' xlink:href='#g1-79' y='196.075'/>
-<use x='205.576' xlink:href='#g1-78' y='196.075'/>
-<use x='211.076' xlink:href='#g1-64' y='196.075'/>
-<use x='214.605' xlink:href='#g1-50' y='196.075'/>
-<use x='217.251' xlink:href='#g1-46' y='196.075'/>
-<use x='218.721' xlink:href='#g1-55' y='196.075'/>
-<use x='221.368' xlink:href='#g1-71' y='196.075'/>
-<use x='224.896' xlink:href='#g1-104' y='196.075'/>
-<use x='227.629' xlink:href='#g1-122' y='196.075'/>
-<use x='168.285' xlink:href='#g1-85' y='201.694'/>
-<use x='171.917' xlink:href='#g1-98' y='201.694'/>
-<use x='174.65' xlink:href='#g1-117' y='201.694'/>
-<use x='177.383' xlink:href='#g1-110' y='201.694'/>
-<use x='180.116' xlink:href='#g1-116' y='201.694'/>
-<use x='182.027' xlink:href='#g1-117' y='201.694'/>
-<use x='186.524' xlink:href='#g1-49' y='201.694'/>
-<use x='189.17' xlink:href='#g1-56' y='201.694'/>
-<use x='191.817' xlink:href='#g1-46' y='201.694'/>
-<use x='193.287' xlink:href='#g1-48' y='201.694'/>
-<use x='195.933' xlink:href='#g1-52' y='201.694'/>
-<use x='198.58' xlink:href='#g1-46' y='201.694'/>
-<use x='200.05' xlink:href='#g1-49' y='201.694'/>
-<use x='202.696' xlink:href='#g1-44' y='201.694'/>
-<use x='205.931' xlink:href='#g1-71' y='201.694'/>
-<use x='209.459' xlink:href='#g1-67' y='201.694'/>
-<use x='212.841' xlink:href='#g1-67' y='201.694'/>
-<use x='217.986' xlink:href='#g1-55' y='201.694'/>
-<use x='220.633' xlink:href='#g1-46' y='201.694'/>
-<use x='222.103' xlink:href='#g1-52' y='201.694'/>
-<use x='224.749' xlink:href='#g1-46' y='201.694'/>
-<use x='226.219' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -58.314 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 0.355 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 59.024 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 117.693 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 176.362 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 235.031 344.257)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -53.084 343.452)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-49' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 5.585 341.573)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-52' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 64.254 311.979)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-52' y='201.694'/>
-<use x='175.048' xlink:href='#g1-56' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 122.923 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-50' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-54' y='201.694'/>
-<use x='180.675' xlink:href='#g1-53' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 181.592 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-53' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-48' y='201.694'/>
-<use x='180.675' xlink:href='#g1-54' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 240.261 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-49' y='201.694'/>
-<use x='176.558' xlink:href='#g1-49' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-56' y='201.694'/>
-<use x='183.321' xlink:href='#g1-51' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -47.853 340.768)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-53' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 10.816 339.761)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-55' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 69.485 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-51' y='201.694'/>
-<use x='180.675' xlink:href='#g1-54' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 128.154 295.471)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-55' y='201.694'/>
-<use x='175.048' xlink:href='#g1-51' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 186.823 272.99)'>
-<use x='168.285' xlink:href='#g1-50' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-54' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 245.492 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-49' y='201.694'/>
-<use x='176.558' xlink:href='#g1-50' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-48' y='201.694'/>
-<use x='183.321' xlink:href='#g1-55' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -42.623 323.991)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 16.046 320.3)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-54' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 74.715 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-50' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-56' y='201.694'/>
-<use x='180.675' xlink:href='#g1-57' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 133.384 312.18)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-52' y='201.694'/>
-<use x='175.048' xlink:href='#g1-56' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 192.053 324.528)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-57' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 250.722 343.183)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-50' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -37.392 331.104)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 21.277 330.232)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-49' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 79.946 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-50' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-54' y='201.694'/>
-<use x='180.675' xlink:href='#g1-53' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 138.615 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-53' y='201.694'/>
-<use x='180.675' xlink:href='#g1-49' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 197.284 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-53' y='201.694'/>
-<use x='180.675' xlink:href='#g1-49' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 255.953 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-54' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-49' y='201.694'/>
-<use x='180.675' xlink:href='#g1-56' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -32.162 337.815)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-49' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 26.507 331.104)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 85.176 269.568)'>
-<use x='168.285' xlink:href='#g1-50' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-49' y='201.694'/>
-<use x='175.048' xlink:href='#g1-49' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 143.845 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-49' y='201.694'/>
-<use x='176.558' xlink:href='#g1-48' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-50' y='201.694'/>
-<use x='183.321' xlink:href='#g1-50' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 202.514 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-49' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-52' y='201.694'/>
-<use x='183.321' xlink:href='#g1-50' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 261.183 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-55' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-48' y='201.694'/>
-<use x='180.675' xlink:href='#g1-49' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -26.931 330.903)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 31.738 330.702)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 90.407 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-50' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-54' y='201.694'/>
-<use x='180.675' xlink:href='#g1-55' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 149.076 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-54' y='201.694'/>
-<use x='180.675' xlink:href='#g1-48' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 207.745 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-53' y='201.694'/>
-<use x='180.675' xlink:href='#g1-49' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 266.414 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-53' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-55' y='201.694'/>
-<use x='180.675' xlink:href='#g1-54' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 212.975 295.672)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-55' y='201.694'/>
-<use x='175.048' xlink:href='#g1-50' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -21.701 324.192)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-51' y='201.694'/>
-<use x='175.048' xlink:href='#g1-48' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 36.968 324.729)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-57' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 95.637 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-51' y='201.694'/>
-<use x='180.675' xlink:href='#g1-55' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 154.306 287.955)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-56' y='201.694'/>
-<use x='175.048' xlink:href='#g1-52' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 271.644 343.116)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-50' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -16.471 316.676)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-52' y='201.694'/>
-<use x='175.048' xlink:href='#g1-49' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 42.198 311.778)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-52' y='201.694'/>
-<use x='175.048' xlink:href='#g1-56' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 100.867 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-54' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-48' y='201.694'/>
-<use x='180.675' xlink:href='#g1-54' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 159.536 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-51' y='201.694'/>
-<use x='176.558' xlink:href='#g1-46' y='201.694'/>
-<use x='178.029' xlink:href='#g1-49' y='201.694'/>
-<use x='180.675' xlink:href='#g1-52' y='201.694'/>
-<use x='183.321' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 276.874 243.598)'>
-<use x='163.396' xlink:href='#g3-1' y='201.694'/>
-<use x='166.901' xlink:href='#g3-1' y='201.694'/>
-<use x='170.407' xlink:href='#g3-1' y='201.694'/>
-<use x='173.912' xlink:href='#g1-49' y='201.694'/>
-<use x='176.558' xlink:href='#g1-49' y='201.694'/>
-<use x='179.205' xlink:href='#g1-46' y='201.694'/>
-<use x='180.675' xlink:href='#g1-56' y='201.694'/>
-<use x='183.321' xlink:href='#g1-56' y='201.694'/>
-<use x='185.968' xlink:href='#g1-120' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -11.24 343.72)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-49' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 47.429 343.72)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-49' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 106.098 326.34)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-50' y='201.694'/>
-<use x='175.048' xlink:href='#g1-55' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 164.767 313.187)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-52' y='201.694'/>
-<use x='175.048' xlink:href='#g1-54' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 223.436 341.908)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-51' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 282.105 343.452)'>
-<use x='168.285' xlink:href='#g1-49' y='201.694'/>
-<use x='170.931' xlink:href='#g1-46' y='201.694'/>
-<use x='172.401' xlink:href='#g1-48' y='201.694'/>
-<use x='175.048' xlink:href='#g1-49' y='201.694'/>
-</g>
-<g transform='matrix(0 -1 1 0 -88.536 388.944)'>
-<use x='168.285' xlink:href='#g0-82' y='201.694'/>
-<use x='174.255' xlink:href='#g0-101' y='201.694'/>
-<use x='178.351' xlink:href='#g0-108' y='201.694'/>
-<use x='180.551' xlink:href='#g0-97' y='201.694'/>
-<use x='184.979' xlink:href='#g0-116' y='201.694'/>
-<use x='188.307' xlink:href='#g0-105' y='201.694'/>
-<use x='190.507' xlink:href='#g0-118' y='201.694'/>
-<use x='194.755' xlink:href='#g0-101' y='201.694'/>
-<use x='201.922' xlink:href='#g0-116' y='201.694'/>
-<use x='205.25' xlink:href='#g0-105' y='201.694'/>
-<use x='207.45' xlink:href='#g0-109' y='201.694'/>
-<use x='214.77' xlink:href='#g0-101' y='201.694'/>
-<use x='221.937' xlink:href='#g2-40' y='201.694'/>
-<use x='225.231' xlink:href='#g2-108' y='201.694'/>
-<use x='227.251' xlink:href='#g2-111' y='201.694'/>
-<use x='231.25' xlink:href='#g2-119' y='201.694'/>
-<use x='236.799' xlink:href='#g2-101' y='201.694'/>
-<use x='240.562' xlink:href='#g2-114' y='201.694'/>
-<use x='246.277' xlink:href='#g2-105' y='201.694'/>
-<use x='248.297' xlink:href='#g2-115' y='201.694'/>
-<use x='254.366' xlink:href='#g2-98' y='201.694'/>
-<use x='258.974' xlink:href='#g2-101' y='201.694'/>
-<use x='262.738' xlink:href='#g2-116' y='201.694'/>
-<use x='265.796' xlink:href='#g2-116' y='201.694'/>
-<use x='268.854' xlink:href='#g2-101' y='201.694'/>
-<use x='272.618' xlink:href='#g2-114' y='201.694'/>
-<use x='275.51' xlink:href='#g2-41' y='201.694'/>
-</g>
-<path d='M136.149 296.672H402.137V279.679H136.149Z' fill='#ffffff'/>
-<path d='M136.149 296.672H402.137V279.679H136.149Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path d='M139.336 290.168H142.324V282.199H139.336ZM145.313 290.168H148.301V284.191H145.313Z' fill='#e0e0f0'/>
-<path d='M139.336 290.168H142.324V282.199H139.336ZM145.313 290.168H148.301V284.191H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -33.522 88.465)'>
-<use x='185.011' xlink:href='#g2-109' y='201.694'/>
-<use x='191.736' xlink:href='#g2-105' y='201.694'/>
-</g>
-<path d='M163.422 290.168H166.41V282.199H163.422ZM169.398 290.168H172.391V284.191H169.398Z' fill='#c2c2e1'/>
-<path d='M163.422 290.168H166.41V282.199H163.422ZM169.398 290.168H172.391V284.191H169.398Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.56 88.011)'>
-<use x='208.137' xlink:href='#g2-116' y='201.694'/>
-<use x='211.195' xlink:href='#g2-99' y='201.694'/>
-</g>
-<path d='M185.586 290.168H188.574V282.199H185.586ZM191.563 290.168H194.555V284.191H191.563Z' fill='#a3a3d1'/>
-<path d='M185.586 290.168H188.574V282.199H185.586ZM191.563 290.168H194.555V284.191H191.563Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.159 88.465)'>
-<use x='229.9' xlink:href='#g2-106' y='201.694'/>
-<use x='232.155' xlink:href='#g2-101' y='201.694'/>
-</g>
-<path d='M206.949 290.168H209.938V282.199H206.949ZM212.926 290.168H215.914V284.191H212.926Z' fill='#8585c2'/>
-<path d='M206.949 290.168H209.938V282.199H206.949ZM212.926 290.168H215.914V284.191H212.926Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.958 87.505)'>
-<use x='252.061' xlink:href='#g2-115' y='201.694'/>
-<use x='255.307' xlink:href='#g2-110' y='201.694'/>
-</g>
-<path d='M229.91 290.168H232.898V282.199H229.91ZM235.887 290.168H238.875V284.191H235.887Z' fill='#6666b3'/>
-<path d='M229.91 290.168H232.898V282.199H229.91ZM235.887 290.168H238.875V284.191H235.887Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.781 87.505)'>
-<use x='274.845' xlink:href='#g2-114' y='201.694'/>
-<use x='277.737' xlink:href='#g2-112' y='201.694'/>
-</g>
-<path d='M252.516 290.168H255.504V282.199H252.516ZM258.496 290.168H261.484V284.191H258.496Z' fill='#4747a4'/>
-<path d='M252.516 290.168H255.504V282.199H252.516ZM258.496 290.168H261.484V284.191H258.496Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -39.001 88.501)'>
-<use x='303.672' xlink:href='#g2-104' y='201.694'/>
-<use x='308.045' xlink:href='#g2-111' y='201.694'/>
-<use x='312.279' xlink:href='#g2-97' y='201.694'/>
-<use x='316.112' xlink:href='#g2-114' y='201.694'/>
-<use x='319.004' xlink:href='#g2-100' y='201.694'/>
-</g>
-<path d='M287.563 290.168H290.551V282.199H287.563ZM293.543 290.168H296.531V284.191H293.543Z' fill='#292994'/>
-<path d='M287.563 290.168H290.551V282.199H287.563ZM293.543 290.168H296.531V284.191H293.543Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.472 88.501)'>
-<use x='337.19' xlink:href='#g2-103' y='201.694'/>
-<use x='341.424' xlink:href='#g2-108' y='201.694'/>
-<use x='343.444' xlink:href='#g2-105' y='201.694'/>
-<use x='345.464' xlink:href='#g2-98' y='201.694'/>
-<use x='350.072' xlink:href='#g2-99' y='201.694'/>
-</g>
-<path d='M319.551 290.168H322.539V282.199H319.551ZM325.527 290.168H328.52V284.191H325.527Z' fill='#0a0a85'/>
-<path d='M319.551 290.168H322.539V282.199H319.551ZM325.527 290.168H328.52V284.191H325.527Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.051 88.501)'>
-<use x='366.757' xlink:href='#g2-116' y='201.694'/>
-<use x='369.815' xlink:href='#g2-98' y='201.694'/>
-<use x='374.187' xlink:href='#g2-98' y='201.694'/>
-</g>
-<path d='M346.699 290.168H349.688V282.199H346.699ZM352.676 290.168H355.664V284.191H352.676Z' fill='#000076'/>
-<path d='M346.699 290.168H349.688V282.199H346.699ZM352.676 290.168H355.664V284.191H352.676Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -34.135 87.505)'>
-<use x='392.986' xlink:href='#g2-115' y='201.694'/>
-<use x='396.233' xlink:href='#g2-109' y='201.694'/>
-</g>
-<path d='M372.012 290.168H375V282.199H372.012ZM377.988 290.168H380.977V284.191H377.988Z' fill='#000067'/>
-<path d='M372.012 290.168H375V282.199H372.012ZM377.988 290.168H380.977V284.191H377.988Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.145 88.465)'>
-<use x='419.31' xlink:href='#g2-115' y='201.694'/>
-<use x='422.556' xlink:href='#g2-109' y='201.694'/>
-<use x='429.281' xlink:href='#g2-105' y='201.694'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-rss-1.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-rss-1.svg
deleted file mode 100644
index 891f7d6..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-rss-1.svg
+++ /dev/null
@@ -1,796 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='164.687pt' version='1.1' viewBox='52.938 54.996 381.625 164.687' width='381.625pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<defs>
-<clipPath id='clip9'>
-<path d='M82.148 203.937H434.164V78.691H82.148Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-78' transform='scale(1.6)' xlink:href='#g1-78'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-102' transform='scale(1.6)' xlink:href='#g1-102'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M0.946 -1.898H1.514V-2.212H0.932V-2.785C0.932 -3.128 1.245 -3.178 1.41 -3.178C1.514 -3.178 1.649 -3.163 1.833 -3.093V-3.457C1.704 -3.487 1.549 -3.507 1.415 -3.507C0.902 -3.507 0.528 -3.138 0.528 -2.645V-2.212H0.144V-1.898H0.528V0H0.946V-1.898Z' id='g1-102'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M1.445 -1.245C1.445 -1.41 1.305 -1.549 1.141 -1.549S0.837 -1.41 0.837 -1.245S0.976 -0.941 1.141 -0.941S1.445 -1.081 1.445 -1.245Z' id='g3-1'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M1.462 -1.91C1.462 -2.851 2.197 -3.425 3.013 -3.434V-4.08C2.367 -4.071 1.775 -3.748 1.408 -3.219V-4.035H0.744V0H1.462V-1.91Z' id='g0-114'/>
-<path d='M3.165 -3.847C2.609 -4.098 2.197 -4.133 1.829 -4.133C1.623 -4.133 0.305 -4.133 0.305 -2.95C0.305 -2.52 0.565 -2.251 0.664 -2.152C1.004 -1.856 1.237 -1.811 1.847 -1.695C2.134 -1.641 2.645 -1.542 2.645 -1.085C2.645 -0.502 1.919 -0.502 1.802 -0.502C1.273 -0.502 0.762 -0.681 0.377 -0.95L0.26 -0.296C0.798 -0.009 1.345 0.099 1.802 0.099C2.385 0.099 3.318 -0.09 3.318 -1.157C3.318 -1.47 3.192 -1.784 2.878 -2.053C2.573 -2.313 2.304 -2.367 1.748 -2.475C1.426 -2.537 0.977 -2.618 0.977 -3.04C0.977 -3.569 1.614 -3.569 1.748 -3.569C2.403 -3.569 2.789 -3.362 3.049 -3.219L3.165 -3.847Z' id='g0-115'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page9'>
-<path d='M140.82 212.793V203.937M199.488 212.793V203.937M258.156 212.793V203.937M316.824 212.793V203.937M375.496 212.793V203.937M140.82 69.836V78.691M199.488 69.836V78.691M258.156 69.836V78.691M316.824 69.836V78.691M375.496 69.836V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M111.484 208.191V203.937M170.152 208.191V203.937M228.824 208.191V203.937M287.492 208.191V203.937M346.16 208.191V203.937M404.828 208.191V203.937M111.484 74.441V78.691M170.152 74.441V78.691M228.824 74.441V78.691M287.492 74.441V78.691M346.16 74.441V78.691M404.828 74.441V78.691' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937H86.402M82.148 172.625H86.402M82.148 141.316H86.402M82.148 110.004H86.402M82.148 78.691H86.402M434.164 203.937H429.91M434.164 172.625H429.91M434.164 141.316H429.91M434.164 110.004H429.91M434.164 78.691H429.91' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M82.148 203.937V78.691H434.164V203.937H82.148Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -11.54 33.989)'>
-<use x='114.487' xlink:href='#g2-99' y='183.949'/>
-<use x='118.25' xlink:href='#g2-102' y='183.949'/>
-<use x='120.838' xlink:href='#g2-114' y='183.949'/>
-<use x='123.73' xlink:href='#g2-97' y='183.949'/>
-<use x='127.798' xlink:href='#g2-99' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 41.401 33.989)'>
-<use x='114.487' xlink:href='#g2-101' y='183.949'/>
-<use x='118.25' xlink:href='#g2-115' y='183.949'/>
-<use x='121.497' xlink:href='#g2-112' y='183.949'/>
-<use x='125.634' xlink:href='#g2-114' y='183.949'/>
-<use x='128.526' xlink:href='#g2-101' y='183.949'/>
-<use x='132.29' xlink:href='#g2-115' y='183.949'/>
-<use x='135.536' xlink:href='#g2-115' y='183.949'/>
-<use x='138.782' xlink:href='#g2-111' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 103.095 33.989)'>
-<use x='114.487' xlink:href='#g2-98' y='183.949'/>
-<use x='118.859' xlink:href='#g2-97' y='183.949'/>
-<use x='122.692' xlink:href='#g2-114' y='183.949'/>
-<use x='125.584' xlink:href='#g2-110' y='183.949'/>
-<use x='129.957' xlink:href='#g2-101' y='183.949'/>
-<use x='133.72' xlink:href='#g2-115' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 162.903 33.989)'>
-<use x='114.487' xlink:href='#g2-108' y='183.949'/>
-<use x='116.507' xlink:href='#g2-101' y='183.949'/>
-<use x='120.271' xlink:href='#g2-97' y='183.949'/>
-<use x='124.339' xlink:href='#g2-110' y='183.949'/>
-<use x='128.711' xlink:href='#g2-78' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 223.526 33.989)'>
-<use x='114.487' xlink:href='#g2-114' y='183.949'/>
-<use x='117.379' xlink:href='#g2-101' y='183.949'/>
-<use x='121.142' xlink:href='#g2-100' y='183.949'/>
-<use x='125.515' xlink:href='#g2-105' y='183.949'/>
-<use x='127.535' xlink:href='#g2-115' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 277.054 33.989)'>
-<use x='114.487' xlink:href='#g2-108' y='183.949'/>
-<use x='116.507' xlink:href='#g2-97' y='183.949'/>
-<use x='120.34' xlink:href='#g2-114' y='183.949'/>
-<use x='123.232' xlink:href='#g2-115' y='183.949'/>
-<use x='126.478' xlink:href='#g2-111' y='183.949'/>
-<use x='130.712' xlink:href='#g2-110' y='183.949'/>
-<use x='135.085' xlink:href='#g2-78' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 21.624)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -9.688)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -40.999)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -72.311)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -103.622)'>
-<use x='114.487' xlink:href='#g1-50' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-120' y='183.949'/>
-</g>
-<path clip-path='url(#clip9)' d='M82.148 141.316H434.164' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M86.328 203.937H89.566V141.316H86.328ZM144.996 203.937H148.234V141.316H144.996ZM203.668 203.937H206.902V141.316H203.668ZM262.336 203.937H265.574V141.316H262.336ZM321.004 203.937H324.242V141.316H321.004ZM379.672 203.937H382.91V141.316H379.672Z' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M86.328 203.937H89.566V141.316H86.328ZM144.996 203.937H148.234V141.316H144.996ZM203.668 203.937H206.902V141.316H203.668ZM262.336 203.937H265.574V141.316H262.336ZM321.004 203.937H324.242V141.316H321.004ZM379.672 203.937H382.91V141.316H379.672Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M87.949 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M85.953 141.316H89.938' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M87.949 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M85.953 141.316H89.938' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M146.617 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M144.625 141.316H148.61' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M146.617 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M144.625 141.316H148.61' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M205.285 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M203.293 141.316H207.277' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M205.285 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M203.293 141.316H207.277' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M263.953 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M261.961 141.316H265.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M263.953 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M261.961 141.316H265.945' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M322.625 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M320.629 141.316H324.617' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M322.625 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M320.629 141.316H324.617' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M381.293 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M379.301 141.316H383.285' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M381.293 141.316V141.316' fill='#f0e0f0'/>
-<path clip-path='url(#clip9)' d='M379.301 141.316H383.285' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M91.559 203.937H94.797V93.156H91.559ZM150.227 203.937H153.465V78.691H150.227ZM208.899 203.937H212.133V138.246H208.899ZM267.567 203.937H270.805V145.949H267.567ZM326.234 203.937H329.473V130.23H326.234ZM384.902 203.937H388.141V140.25H384.902Z' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M91.559 203.937H94.797V93.156H91.559ZM150.227 203.937H153.465V78.691H150.227ZM208.899 203.937H212.133V138.246H208.899ZM267.567 203.937H270.805V145.949H267.567ZM326.234 203.937H329.473V130.23H326.234ZM384.902 203.937H388.141V140.25H384.902Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M93.18 93.156V93.156' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M91.184 93.156H95.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M93.18 93.156V93.156' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M91.184 93.156H95.168' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M151.848 78.691V78.691' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M149.855 78.691H153.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M151.848 78.691V78.691' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M149.855 78.691H153.84' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M210.516 138.246V138.246' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M208.523 138.246H212.507' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M210.516 138.246V138.246' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M208.523 138.246H212.507' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M269.184 145.949V145.949' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M267.191 145.949H271.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M269.184 145.949V145.949' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M267.191 145.949H271.175' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M327.856 130.23V130.23' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M325.859 130.23H329.847' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M327.856 130.23V130.23' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M325.859 130.23H329.847' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M386.524 140.25V140.25' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M384.531 140.25H388.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M386.524 140.25V140.25' fill='#e1c2e1'/>
-<path clip-path='url(#clip9)' d='M384.531 140.25H388.515' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M96.789 203.937H100.027V110.816H96.789ZM155.457 203.937H158.695V104.679H155.457ZM214.129 203.937H217.363V139.75H214.129ZM272.797 203.937H276.035V141.254H272.797ZM331.465 203.937H334.703V137.496H331.465ZM390.133 203.937H393.371V132.109H390.133Z' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M96.789 203.937H100.027V110.816H96.789ZM155.457 203.937H158.695V104.679H155.457ZM214.129 203.937H217.363V139.75H214.129ZM272.797 203.937H276.035V141.254H272.797ZM331.465 203.937H334.703V137.496H331.465ZM390.133 203.937H393.371V132.109H390.133Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M98.41 110.816V110.816' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M96.414 110.817H100.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M98.41 110.816V110.816' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M96.414 110.817H100.399' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M157.078 104.679V104.679' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M155.086 104.68H159.071' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M157.078 104.679V104.679' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M155.086 104.68H159.071' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M215.746 139.75V139.75' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M213.754 139.75H217.739' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M215.746 139.75V139.75' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M213.754 139.75H217.739' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M274.414 141.254V141.254' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M272.422 141.254H276.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M274.414 141.254V141.254' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M272.422 141.254H276.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M333.086 137.496V137.496' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M331.09 137.496H335.078' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M333.086 137.496V137.496' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M331.09 137.496H335.078' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M391.754 132.109V132.109' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M389.762 132.11H393.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M391.754 132.109V132.109' fill='#d1a3d1'/>
-<path clip-path='url(#clip9)' d='M389.762 132.11H393.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M102.02 203.937H105.258V121.777H102.02ZM160.688 203.937H163.926V110.066H160.688ZM219.359 203.937H222.594V140.312H219.359ZM278.027 203.937H281.266V140.437H278.027ZM336.695 203.937H339.934V138.058H336.695ZM395.363 203.937H398.602V125.16H395.363Z' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M102.02 203.937H105.258V121.777H102.02ZM160.688 203.937H163.926V110.066H160.688ZM219.359 203.937H222.594V140.312H219.359ZM278.027 203.937H281.266V140.437H278.027ZM336.695 203.937H339.934V138.058H336.695ZM395.363 203.937H398.602V125.16H395.363Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M103.641 121.777V121.777' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M101.644 121.777H105.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M103.641 121.777V121.777' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M101.644 121.777H105.629' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M162.309 110.066V110.066' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M160.316 110.066H164.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M162.309 110.066V110.066' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M160.316 110.066H164.301' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M220.977 140.312V140.312' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M218.984 140.312H222.969' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M220.977 140.312V140.312' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M218.984 140.312H222.969' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M279.645 140.437V140.437' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M277.652 140.438H281.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M279.645 140.437V140.437' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M277.652 140.438H281.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M338.317 138.058V138.058' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M336.32 138.059H340.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M338.317 138.058V138.058' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M336.32 138.059H340.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M396.984 125.16V125.16' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M394.992 125.161H398.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M396.984 125.16V125.16' fill='#c285c2'/>
-<path clip-path='url(#clip9)' d='M394.992 125.161H398.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M107.25 203.937H110.488V138.433H107.25ZM165.918 203.937H169.156V141.754H165.918ZM224.59 203.937H227.824V141.379H224.59ZM283.258 203.937H286.496V131.172H283.258ZM341.926 203.937H345.164V140.5H341.926ZM400.594 203.937H403.832V134.238H400.594Z' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M107.25 203.937H110.488V138.433H107.25ZM165.918 203.937H169.156V141.754H165.918ZM224.59 203.937H227.824V141.379H224.59ZM283.258 203.937H286.496V131.172H283.258ZM341.926 203.937H345.164V140.5H341.926ZM400.594 203.937H403.832V134.238H400.594Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M108.871 138.433V138.433' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M106.875 138.434H110.86' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M108.871 138.433V138.433' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M106.875 138.434H110.86' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M167.539 141.754V141.754' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M165.547 141.754H169.532' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M167.539 141.754V141.754' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M165.547 141.754H169.532' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M226.207 141.379V141.379' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M224.215 141.379H228.2' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M226.207 141.379V141.379' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M224.215 141.379H228.2' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M284.875 131.172V131.172' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M282.883 131.172H286.868' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M284.875 131.172V131.172' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M282.883 131.172H286.868' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M343.547 140.5V140.5' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M341.551 140.5H345.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M343.547 140.5V140.5' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M341.551 140.5H345.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M402.215 134.238V134.238' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M400.223 134.238H404.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M402.215 134.238V134.238' fill='#b366b3'/>
-<path clip-path='url(#clip9)' d='M400.223 134.238H404.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M112.481 203.937H115.719V108.687H112.481ZM171.149 203.937H174.387V78.691H171.149ZM229.82 203.937H233.055V139.812H229.82ZM288.488 203.937H291.727V125.785H288.488ZM347.156 203.937H350.395V125.41H347.156ZM405.824 203.937H409.063V131.672H405.824Z' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M112.481 203.937H115.719V108.687H112.481ZM171.149 203.937H174.387V78.691H171.149ZM229.82 203.937H233.055V139.812H229.82ZM288.488 203.937H291.727V125.785H288.488ZM347.156 203.937H350.395V125.41H347.156ZM405.824 203.937H409.063V131.672H405.824Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M114.098 108.687V108.687' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M112.105 108.688H116.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M114.098 108.687V108.687' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M112.105 108.688H116.09' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M172.77 78.691V78.691' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M170.777 78.691H174.762' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M172.77 78.691V78.691' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M170.777 78.691H174.762' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M231.438 139.812V139.812' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M229.445 139.812H233.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M231.438 139.812V139.812' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M229.445 139.812H233.43' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M290.106 125.785V125.785' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M288.113 125.785H292.098' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M290.106 125.785V125.785' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M288.113 125.785H292.098' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M348.777 125.41V125.41' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M346.781 125.41H350.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M348.777 125.41V125.41' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M346.781 125.41H350.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M407.445 131.672V131.672' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M405.453 131.672H409.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M407.445 131.672V131.672' fill='#a447a4'/>
-<path clip-path='url(#clip9)' d='M405.453 131.672H409.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M117.711 203.937H120.949V141.316H117.711ZM176.379 203.937H179.617V153.402H176.379ZM235.051 203.937H238.285V141.566H235.051ZM293.719 203.937H296.957V131.922H293.719ZM352.387 203.937H355.625V140.562H352.387ZM411.055 203.937H414.293V134.613H411.055Z' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M117.711 203.937H120.949V141.316H117.711ZM176.379 203.937H179.617V153.402H176.379ZM235.051 203.937H238.285V141.566H235.051ZM293.719 203.937H296.957V131.922H293.719ZM352.387 203.937H355.625V140.562H352.387ZM411.055 203.937H414.293V134.613H411.055Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M119.328 141.316V141.316' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M117.336 141.316H121.321' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M119.328 141.316V141.316' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M117.336 141.316H121.321' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M178 153.402V153.402' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M176.008 153.403H179.993' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M178 153.402V153.402' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M176.008 153.403H179.993' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M236.668 141.566V141.566' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M234.676 141.567H238.661' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M236.668 141.566V141.566' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M234.676 141.567H238.661' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M295.336 131.922V131.922' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M293.344 131.922H297.329' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M295.336 131.922V131.922' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M293.344 131.922H297.329' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M354.008 140.562V140.562' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M352.012 140.563H356' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M354.008 140.562V140.562' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M352.012 140.563H356' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M412.676 134.613V134.613' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M410.684 134.614H414.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M412.676 134.613V134.613' fill='#942994'/>
-<path clip-path='url(#clip9)' d='M410.684 134.614H414.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M122.941 203.937H126.18V116.765H122.941ZM181.609 203.937H184.848V112.32H181.609ZM240.281 203.937H243.516V140.125H240.281ZM298.949 203.937H302.188V131.734H298.949ZM357.617 203.937H360.856V97.168H357.617ZM416.285 203.937H419.524V136.804H416.285Z' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M122.941 203.937H126.18V116.765H122.941ZM181.609 203.937H184.848V112.32H181.609ZM240.281 203.937H243.516V140.125H240.281ZM298.949 203.937H302.188V131.734H298.949ZM357.617 203.937H360.856V97.168H357.617ZM416.285 203.937H419.524V136.804H416.285Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M124.559 116.765V116.765' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M122.566 116.766H126.551' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M124.559 116.765V116.765' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M122.566 116.766H126.551' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M183.231 112.32V112.32' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M181.238 112.32H185.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M183.231 112.32V112.32' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M181.238 112.32H185.223' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M241.899 140.125V140.125' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M239.906 140.125H243.891' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M241.899 140.125V140.125' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M239.906 140.125H243.891' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M300.567 131.734V131.734' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M298.574 131.734H302.559' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M300.567 131.734V131.734' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M298.574 131.734H302.559' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M359.238 97.168V97.168' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M357.242 97.168H361.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M359.238 97.168V97.168' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M357.242 97.168H361.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M417.906 136.804V136.804' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M415.914 136.804H419.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M417.906 136.804V136.804' fill='#850a85'/>
-<path clip-path='url(#clip9)' d='M415.914 136.804H419.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M128.172 203.937H131.41V104.992H128.172ZM186.84 203.937H190.078V90.09H186.84ZM245.512 203.937H248.746V133.238H245.512ZM362.848 203.937H366.086V124.906H362.848ZM421.516 203.937H424.754V148.453H421.516Z' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M128.172 203.937H131.41V104.992H128.172ZM186.84 203.937H190.078V90.09H186.84ZM245.512 203.937H248.746V133.238H245.512ZM362.848 203.937H366.086V124.906H362.848ZM421.516 203.937H424.754V148.453H421.516Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M129.789 104.992V104.992' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M127.797 104.992H131.782' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M129.789 104.992V104.992' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M127.797 104.992H131.782' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M188.461 90.09V90.09' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M186.469 90.09H190.454' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M188.461 90.09V90.09' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M186.469 90.09H190.454' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M247.129 133.238V133.238' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M245.137 133.238H249.122' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M247.129 133.238V133.238' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M245.137 133.238H249.122' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M364.469 124.906V124.906' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M362.473 124.906H366.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M364.469 124.906V124.906' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M362.473 124.906H366.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M423.137 148.453V148.453' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M421.144 148.453H425.128' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M423.137 148.453V148.453' fill='#760076'/>
-<path clip-path='url(#clip9)' d='M421.144 148.453H425.128' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M133.402 203.937H136.641V138.746H133.402ZM192.07 203.937H195.309V107.058H192.07ZM250.742 203.937H253.977V141.316H250.742ZM309.41 203.937H312.649V129.355H309.41ZM368.078 203.937H371.317V140.125H368.078ZM426.746 203.937H429.984V140.375H426.746Z' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M133.402 203.937H136.641V138.746H133.402ZM192.07 203.937H195.309V107.058H192.07ZM250.742 203.937H253.977V141.316H250.742ZM309.41 203.937H312.649V129.355H309.41ZM368.078 203.937H371.317V140.125H368.078ZM426.746 203.937H429.984V140.375H426.746Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M135.02 138.746V138.746' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M133.027 138.746H137.012' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M135.02 138.746V138.746' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M133.027 138.746H137.012' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M193.692 107.058V107.058' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M191.699 107.058H195.684' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M193.692 107.058V107.058' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M191.699 107.058H195.684' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M252.359 141.316V141.316' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M250.367 141.316H254.352' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M252.359 141.316V141.316' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M250.367 141.316H254.352' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M311.027 129.355V129.355' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M309.035 129.355H313.02' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M311.027 129.355V129.355' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M309.035 129.355H313.02' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M369.699 140.125V140.125' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M367.703 140.125H371.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M369.699 140.125V140.125' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M367.703 140.125H371.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M428.367 140.375V140.375' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M426.375 140.375H430.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip9)' d='M428.367 140.375V140.375' fill='#670067'/>
-<path clip-path='url(#clip9)' d='M426.375 140.375H430.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(0 -1 1 0 -94.367 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -35.698 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 22.971 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 81.64 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 140.309 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 198.978 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -89.137 201.62)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-55' y='183.949'/>
-<use x='121.25' xlink:href='#g1-55' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -30.468 187.155)'>
-<use x='109.598' xlink:href='#g3-1' y='183.949'/>
-<use x='113.103' xlink:href='#g3-1' y='183.949'/>
-<use x='116.608' xlink:href='#g3-1' y='183.949'/>
-<use x='120.114' xlink:href='#g1-50' y='183.949'/>
-<use x='122.76' xlink:href='#g1-46' y='183.949'/>
-<use x='124.23' xlink:href='#g1-49' y='183.949'/>
-<use x='126.877' xlink:href='#g1-52' y='183.949'/>
-<use x='129.523' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 28.201 246.709)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 86.87 254.412)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-57' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 145.539 238.693)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 204.208 248.713)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -83.906 219.28)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-52' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -25.237 213.143)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 33.432 248.212)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.101 249.715)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 150.77 245.958)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 209.439 240.572)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.676 230.239)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-51' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -20.007 218.529)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 38.662 248.776)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 97.331 248.901)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 156 246.521)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 214.669 233.621)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -73.445 246.897)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -14.776 250.216)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-57' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 43.893 249.84)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 102.562 239.633)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 161.231 248.963)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 219.9 242.701)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -68.215 217.151)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -9.546 187.155)'>
-<use x='109.598' xlink:href='#g3-1' y='183.949'/>
-<use x='113.103' xlink:href='#g3-1' y='183.949'/>
-<use x='116.608' xlink:href='#g3-1' y='183.949'/>
-<use x='120.114' xlink:href='#g1-52' y='183.949'/>
-<use x='122.76' xlink:href='#g1-46' y='183.949'/>
-<use x='124.23' xlink:href='#g1-53' y='183.949'/>
-<use x='126.877' xlink:href='#g1-50' y='183.949'/>
-<use x='129.523' xlink:href='#g1-120' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.123 248.275)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 107.792 234.247)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 166.461 233.871)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.13 240.134)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -62.984 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -4.315 261.864)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-56' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 54.354 250.028)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.023 240.384)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 171.692 249.026)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 230.361 243.077)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -57.754 225.229)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-51' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 0.915 220.783)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-52' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 59.584 248.588)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.253 240.196)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 176.922 205.628)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-55' y='183.949'/>
-<use x='121.25' xlink:href='#g1-49' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 235.591 245.269)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-55' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -52.524 213.456)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-56' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 6.145 198.552)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-56' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 64.814 241.699)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-51' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 182.152 233.37)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-50' y='183.949'/>
-<use x='121.25' xlink:href='#g1-54' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 240.821 256.917)'>
-<use x='114.487' xlink:href='#g1-48' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-56' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -47.293 247.21)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-52' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 11.376 215.523)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-53' y='183.949'/>
-<use x='121.25' xlink:href='#g1-53' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 70.045 249.778)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-48' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 128.714 237.817)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-49' y='183.949'/>
-<use x='121.25' xlink:href='#g1-57' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 187.383 248.588)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 246.052 248.838)'>
-<use x='114.487' xlink:href='#g1-49' y='183.949'/>
-<use x='117.133' xlink:href='#g1-46' y='183.949'/>
-<use x='118.603' xlink:href='#g1-48' y='183.949'/>
-<use x='121.25' xlink:href='#g1-50' y='183.949'/>
-</g>
-<g transform='matrix(0 -1 1 0 -124.589 307.697)'>
-<use x='114.487' xlink:href='#g0-82' y='183.949'/>
-<use x='120.457' xlink:href='#g0-101' y='183.949'/>
-<use x='124.553' xlink:href='#g0-108' y='183.949'/>
-<use x='126.753' xlink:href='#g0-97' y='183.949'/>
-<use x='131.181' xlink:href='#g0-116' y='183.949'/>
-<use x='134.509' xlink:href='#g0-105' y='183.949'/>
-<use x='136.709' xlink:href='#g0-118' y='183.949'/>
-<use x='140.957' xlink:href='#g0-101' y='183.949'/>
-<use x='148.124' xlink:href='#g0-114' y='183.949'/>
-<use x='151.272' xlink:href='#g0-115' y='183.949'/>
-<use x='154.805' xlink:href='#g0-115' y='183.949'/>
-<use x='161.409' xlink:href='#g2-40' y='183.949'/>
-<use x='164.702' xlink:href='#g2-108' y='183.949'/>
-<use x='166.722' xlink:href='#g2-111' y='183.949'/>
-<use x='170.721' xlink:href='#g2-119' y='183.949'/>
-<use x='176.27' xlink:href='#g2-101' y='183.949'/>
-<use x='180.034' xlink:href='#g2-114' y='183.949'/>
-<use x='185.749' xlink:href='#g2-105' y='183.949'/>
-<use x='187.769' xlink:href='#g2-115' y='183.949'/>
-<use x='193.838' xlink:href='#g2-98' y='183.949'/>
-<use x='198.446' xlink:href='#g2-101' y='183.949'/>
-<use x='202.209' xlink:href='#g2-116' y='183.949'/>
-<use x='205.267' xlink:href='#g2-116' y='183.949'/>
-<use x='208.325' xlink:href='#g2-101' y='183.949'/>
-<use x='212.089' xlink:href='#g2-114' y='183.949'/>
-<use x='214.981' xlink:href='#g2-41' y='183.949'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-rss-2.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-rss-2.svg
deleted file mode 100644
index f426537..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2020/bench-z4-rss-2.svg
+++ /dev/null
@@ -1,974 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.4.2 -->
-<svg height='182.025pt' version='1.1' viewBox='106.736 51.674 381.623 182.025' width='381.623pt' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
-<defs>
-<clipPath id='clip10'>
-<path d='M135.949 186.074H487.961V60.828H135.949Z'/>
-</clipPath>
-<use id='g2-40' transform='scale(1.6)' xlink:href='#g1-40'/>
-<use id='g2-41' transform='scale(1.6)' xlink:href='#g1-41'/>
-<use id='g2-45' transform='scale(1.6)' xlink:href='#g1-45'/>
-<use id='g2-49' transform='scale(1.6)' xlink:href='#g1-49'/>
-<use id='g2-54' transform='scale(1.6)' xlink:href='#g1-54'/>
-<use id='g2-56' transform='scale(1.6)' xlink:href='#g1-56'/>
-<use id='g2-78' transform='scale(1.6)' xlink:href='#g1-78'/>
-<use id='g2-97' transform='scale(1.6)' xlink:href='#g1-97'/>
-<use id='g2-98' transform='scale(1.6)' xlink:href='#g1-98'/>
-<use id='g2-99' transform='scale(1.6)' xlink:href='#g1-99'/>
-<use id='g2-100' transform='scale(1.6)' xlink:href='#g1-100'/>
-<use id='g2-101' transform='scale(1.6)' xlink:href='#g1-101'/>
-<use id='g2-103' transform='scale(1.6)' xlink:href='#g1-103'/>
-<use id='g2-104' transform='scale(1.6)' xlink:href='#g1-104'/>
-<use id='g2-105' transform='scale(1.6)' xlink:href='#g1-105'/>
-<use id='g2-106' transform='scale(1.6)' xlink:href='#g1-106'/>
-<use id='g2-108' transform='scale(1.6)' xlink:href='#g1-108'/>
-<use id='g2-109' transform='scale(1.6)' xlink:href='#g1-109'/>
-<use id='g2-110' transform='scale(1.6)' xlink:href='#g1-110'/>
-<use id='g2-111' transform='scale(1.6)' xlink:href='#g1-111'/>
-<use id='g2-112' transform='scale(1.6)' xlink:href='#g1-112'/>
-<use id='g2-114' transform='scale(1.6)' xlink:href='#g1-114'/>
-<use id='g2-115' transform='scale(1.6)' xlink:href='#g1-115'/>
-<use id='g2-116' transform='scale(1.6)' xlink:href='#g1-116'/>
-<use id='g2-119' transform='scale(1.6)' xlink:href='#g1-119'/>
-<use id='g2-120' transform='scale(1.6)' xlink:href='#g1-120'/>
-<path d='M1.519 -3.736C1.435 -3.736 1.425 -3.736 1.365 -3.681C0.737 -3.133 0.418 -2.247 0.418 -1.245C0.418 -0.304 0.702 0.603 1.36 1.181C1.425 1.245 1.435 1.245 1.519 1.245H1.758C1.743 1.235 1.26 0.822 1.031 0.045C0.912 -0.344 0.852 -0.752 0.852 -1.245C0.852 -2.969 1.659 -3.651 1.758 -3.736H1.519Z' id='g1-40'/>
-<path d='M0.533 1.245C0.618 1.245 0.628 1.245 0.687 1.191C1.315 0.643 1.634 -0.244 1.634 -1.245C1.634 -2.187 1.35 -3.093 0.692 -3.671C0.628 -3.736 0.618 -3.736 0.533 -3.736H0.294C0.309 -3.726 0.792 -3.313 1.021 -2.535C1.141 -2.147 1.2 -1.738 1.2 -1.245C1.2 0.478 0.394 1.161 0.294 1.245H0.533Z' id='g1-41'/>
-<path d='M0.956 -0.005V-0.448H0.508V0H0.648L0.503 0.638H0.727L0.956 -0.005Z' id='g1-44'/>
-<path d='M1.465 -0.951V-1.265H0.06V-0.951H1.465Z' id='g1-45'/>
-<path d='M0.956 -0.448H0.508V0H0.956V-0.448Z' id='g1-46'/>
-<path d='M2.431 -1.619C2.431 -1.858 2.431 -2.441 2.197 -2.849C1.943 -3.298 1.559 -3.372 1.32 -3.372C1.096 -3.372 0.707 -3.303 0.458 -2.874C0.219 -2.476 0.209 -1.933 0.209 -1.619C0.209 -1.25 0.229 -0.797 0.438 -0.418C0.658 -0.015 1.026 0.105 1.32 0.105C1.818 0.105 2.092 -0.184 2.242 -0.498C2.416 -0.852 2.431 -1.31 2.431 -1.619ZM1.32 -0.224C1.111 -0.224 0.872 -0.344 0.747 -0.702C0.648 -1.006 0.643 -1.32 0.643 -1.684C0.643 -2.142 0.643 -3.044 1.32 -3.044S1.998 -2.142 1.998 -1.684C1.998 -1.355 1.998 -0.981 1.878 -0.663C1.738 -0.304 1.484 -0.224 1.32 -0.224Z' id='g1-48'/>
-<path d='M1.599 -3.372H1.489C1.166 -3.073 0.757 -3.054 0.458 -3.044V-2.73C0.653 -2.735 0.902 -2.745 1.151 -2.844V-0.314H0.488V0H2.262V-0.314H1.599V-3.372Z' id='g1-49'/>
-<path d='M1.41 -0.384C1.35 -0.384 1.29 -0.379 1.23 -0.379H0.663L1.435 -1.061C1.524 -1.141 1.768 -1.325 1.863 -1.405C2.082 -1.604 2.376 -1.863 2.376 -2.296C2.376 -2.859 1.958 -3.372 1.245 -3.372C0.717 -3.372 0.389 -3.088 0.219 -2.58L0.453 -2.286C0.568 -2.705 0.742 -3.029 1.176 -3.029C1.594 -3.029 1.913 -2.735 1.913 -2.286C1.913 -1.873 1.669 -1.639 1.37 -1.355C1.27 -1.255 1.001 -1.031 0.897 -0.932C0.752 -0.802 0.408 -0.468 0.264 -0.344V0H2.376V-0.384H1.41Z' id='g1-50'/>
-<path d='M0.498 -2.555C0.702 -2.954 1.061 -3.064 1.3 -3.064C1.594 -3.064 1.813 -2.894 1.813 -2.61C1.813 -2.346 1.634 -2.022 1.255 -1.958C1.23 -1.953 1.21 -1.953 0.882 -1.928V-1.599H1.27C1.743 -1.599 1.918 -1.225 1.918 -0.912C1.918 -0.523 1.679 -0.224 1.29 -0.224C0.936 -0.224 0.533 -0.394 0.284 -0.712L0.219 -0.389C0.508 -0.065 0.912 0.105 1.3 0.105C1.953 0.105 2.421 -0.384 2.421 -0.907C2.421 -1.315 2.092 -1.644 1.699 -1.758C2.077 -1.953 2.271 -2.286 2.271 -2.61C2.271 -3.034 1.838 -3.372 1.305 -3.372C0.867 -3.372 0.503 -3.143 0.294 -2.844L0.498 -2.555Z' id='g1-51'/>
-<path d='M1.973 -0.832H2.491V-1.161H1.973V-3.268H1.479L0.149 -1.161V-0.832H1.544V0H1.973V-0.832ZM0.573 -1.161C0.722 -1.395 1.579 -2.725 1.579 -3.024V-1.161H0.573Z' id='g1-52'/>
-<path d='M0.817 -2.924H2.197V-3.268H0.418V-1.405H0.782C0.902 -1.674 1.136 -1.793 1.36 -1.793C1.564 -1.793 1.873 -1.654 1.873 -1.021C1.873 -0.369 1.46 -0.224 1.205 -0.224C0.877 -0.224 0.558 -0.399 0.389 -0.682L0.199 -0.384C0.443 -0.08 0.812 0.105 1.205 0.105C1.863 0.105 2.376 -0.403 2.376 -1.011C2.376 -1.629 1.918 -2.122 1.37 -2.122C1.156 -2.122 0.966 -2.047 0.817 -1.923V-2.924Z' id='g1-53'/>
-<path d='M2.187 -3.273C1.918 -3.372 1.729 -3.372 1.634 -3.372C0.877 -3.372 0.219 -2.66 0.219 -1.609C0.219 -0.259 0.827 0.105 1.33 0.105C1.733 0.105 1.943 -0.085 2.097 -0.244C2.416 -0.583 2.421 -0.936 2.421 -1.111C2.421 -1.763 2.067 -2.306 1.584 -2.306C1.096 -2.306 0.832 -2.052 0.687 -1.908C0.752 -2.59 1.101 -3.064 1.639 -3.064C1.738 -3.064 1.938 -3.054 2.187 -2.959V-3.273ZM0.692 -1.096C0.692 -1.126 0.692 -1.2 0.697 -1.225C0.697 -1.564 0.912 -1.978 1.355 -1.978C1.963 -1.978 1.963 -1.28 1.963 -1.111C1.963 -0.922 1.963 -0.712 1.828 -0.503C1.709 -0.324 1.559 -0.224 1.33 -0.224C0.802 -0.224 0.717 -0.877 0.692 -1.096Z' id='g1-54'/>
-<path d='M1.23 -2.884C1.29 -2.884 1.35 -2.889 1.41 -2.889H2.037C1.28 -2.147 0.797 -1.106 0.797 0.05H1.265C1.265 -1.405 1.973 -2.451 2.421 -2.919V-3.268H0.219V-2.884H1.23Z' id='g1-55'/>
-<path d='M1.704 -1.763C2.032 -1.868 2.346 -2.132 2.346 -2.501C2.346 -2.954 1.913 -3.372 1.32 -3.372S0.294 -2.954 0.294 -2.501C0.294 -2.127 0.618 -1.863 0.936 -1.763C0.498 -1.629 0.219 -1.29 0.219 -0.907C0.219 -0.374 0.692 0.105 1.32 0.105S2.421 -0.374 2.421 -0.907C2.421 -1.29 2.137 -1.629 1.704 -1.763ZM1.32 -1.928C0.966 -1.928 0.677 -2.132 0.677 -2.496C0.677 -2.814 0.902 -3.064 1.32 -3.064C1.733 -3.064 1.963 -2.814 1.963 -2.496C1.963 -2.142 1.684 -1.928 1.32 -1.928ZM1.32 -0.224C0.976 -0.224 0.672 -0.443 0.672 -0.912C0.672 -1.36 0.961 -1.599 1.32 -1.599S1.968 -1.355 1.968 -0.912C1.968 -0.443 1.659 -0.224 1.32 -0.224Z' id='g1-56'/>
-<path d='M0.384 -0.125C0.628 0.055 0.852 0.105 1.086 0.105C1.783 0.105 2.421 -0.598 2.421 -1.669C2.421 -3.029 1.818 -3.372 1.34 -3.372C0.897 -3.372 0.692 -3.163 0.548 -3.019C0.229 -2.695 0.219 -2.351 0.219 -2.157C0.219 -1.514 0.568 -0.961 1.056 -0.961C1.619 -0.961 1.928 -1.335 1.953 -1.365C1.883 -0.573 1.494 -0.224 1.086 -0.224C0.827 -0.224 0.667 -0.319 0.553 -0.413L0.384 -0.125ZM1.938 -2.162C1.943 -2.132 1.943 -2.082 1.943 -2.052C1.943 -1.684 1.719 -1.29 1.285 -1.29C1.096 -1.29 0.946 -1.345 0.817 -1.549C0.687 -1.743 0.677 -1.933 0.677 -2.157C0.677 -2.351 0.677 -2.575 0.832 -2.795C0.936 -2.944 1.086 -3.064 1.335 -3.064C1.818 -3.064 1.923 -2.481 1.938 -2.162Z' id='g1-57'/>
-<path d='M2.959 -0.438C2.884 -0.438 2.874 -0.438 2.834 -0.418C2.59 -0.334 2.336 -0.279 2.072 -0.279C1.27 -0.279 0.697 -0.956 0.697 -1.729C0.697 -2.565 1.345 -3.178 2.042 -3.178C2.182 -3.178 2.511 -3.143 2.675 -2.745C2.535 -2.824 2.381 -2.859 2.252 -2.859C1.719 -2.859 1.27 -2.361 1.27 -1.729C1.27 -1.081 1.733 -0.598 2.247 -0.598C2.635 -0.598 3.228 -0.912 3.228 -1.798C3.228 -2.301 3.193 -3.507 2.047 -3.507C1.101 -3.507 0.294 -2.725 0.294 -1.729C0.294 -0.742 1.091 0.05 2.052 0.05C2.511 0.05 2.939 -0.139 3.228 -0.438H2.959ZM2.252 -0.927C1.943 -0.927 1.674 -1.27 1.674 -1.729C1.674 -2.202 1.953 -2.531 2.247 -2.531C2.555 -2.531 2.824 -2.187 2.824 -1.729C2.824 -1.255 2.545 -0.927 2.252 -0.927Z' id='g1-64'/>
-<path d='M3.083 -0.608C2.735 -0.394 2.575 -0.299 2.077 -0.299C1.305 -0.299 0.837 -1.021 0.837 -1.738C0.837 -2.476 1.35 -3.168 2.077 -3.168C2.406 -3.168 2.745 -3.064 2.974 -2.889L3.054 -3.342C2.705 -3.472 2.426 -3.512 2.062 -3.512C1.076 -3.512 0.339 -2.695 0.339 -1.733C0.339 -0.707 1.121 0.05 2.092 0.05C2.58 0.05 2.785 -0.05 3.113 -0.229L3.083 -0.608Z' id='g1-67'/>
-<path d='M2.725 -1.624V-1.953H0.986V-3.098H1.714C1.773 -3.098 1.833 -3.093 1.893 -3.093H2.874V-3.442H0.483V0H2.949V-0.389H2.501C2.082 -0.389 1.664 -0.379 1.245 -0.379H0.986V-1.624H2.725Z' id='g1-69'/>
-<path d='M3.173 -1.489H2.057V-1.161H2.735V-0.399C2.516 -0.344 2.301 -0.299 2.077 -0.299C1.31 -0.299 0.837 -1.021 0.837 -1.733C0.837 -2.416 1.3 -3.168 2.052 -3.168C2.511 -3.168 2.8 -3.029 3.049 -2.819L3.128 -3.273C2.785 -3.437 2.481 -3.517 2.102 -3.517C1.096 -3.517 0.339 -2.73 0.339 -1.733C0.339 -0.762 1.091 0.05 2.072 0.05C2.431 0.05 2.854 -0.03 3.173 -0.194V-1.489Z' id='g1-71'/>
-<path d='M3.248 -3.457H2.745V-1.963H0.986V-3.457H0.483V0H0.986V-1.634H2.745V0H3.248V-3.457Z' id='g1-72'/>
-<path d='M0.986 -3.457H0.483V0H0.986V-3.457Z' id='g1-73'/>
-<path d='M1.176 -3.457H0.498V0H0.917V-3.064H0.922L2.555 0H3.233V-3.457H2.814V-0.394H2.809L1.176 -3.457Z' id='g1-78'/>
-<path d='M3.611 -1.714C3.611 -2.745 2.854 -3.562 1.953 -3.562S0.294 -2.745 0.294 -1.714S1.061 0.105 1.953 0.105C2.849 0.105 3.611 -0.687 3.611 -1.714ZM1.953 -0.249C1.35 -0.249 0.797 -0.852 0.797 -1.793C0.797 -2.675 1.355 -3.218 1.953 -3.218S3.108 -2.675 3.108 -1.793C3.108 -0.847 2.555 -0.249 1.953 -0.249Z' id='g1-79'/>
-<path d='M1.868 -1.42C2.511 -1.42 3.083 -1.873 3.083 -2.446C3.083 -2.979 2.555 -3.457 1.833 -3.457H0.488V0H0.991V-1.42H1.868ZM1.709 -3.163C2.271 -3.163 2.63 -2.864 2.63 -2.446C2.63 -2.037 2.291 -1.729 1.709 -1.729H0.976V-3.163H1.709Z' id='g1-80'/>
-<path d='M3.143 -3.457H2.71V-1.161C2.71 -0.493 2.262 -0.189 1.833 -0.189S0.986 -0.498 0.986 -1.156V-3.457H0.483V-1.166C0.483 -0.433 1.111 0.105 1.828 0.105C2.54 0.105 3.143 -0.438 3.143 -1.166V-3.457Z' id='g1-85'/>
-<path d='M1.968 -1.823L3.228 -3.457H2.685L1.724 -2.182L0.742 -3.457H0.149L1.479 -1.823L0.075 0H0.618L1.724 -1.499L2.854 0H3.447L1.968 -1.823Z' id='g1-88'/>
-<path d='M2.934 -3.238V-3.457H0.369V-3.123H1.41C1.479 -3.123 1.539 -3.128 1.609 -3.128H2.291L0.294 -0.229V0H2.964V-0.354H2.466C1.958 -0.354 1.45 -0.344 0.941 -0.344L2.934 -3.238Z' id='g1-90'/>
-<path d='M2.122 -1.435C2.122 -1.943 1.733 -2.286 1.24 -2.286C0.927 -2.286 0.687 -2.222 0.408 -2.072L0.438 -1.709C0.603 -1.818 0.847 -1.968 1.24 -1.968C1.46 -1.968 1.689 -1.803 1.689 -1.43V-1.23C0.951 -1.205 0.224 -1.051 0.224 -0.588C0.224 -0.339 0.394 0.05 0.832 0.05C1.046 0.05 1.44 0.005 1.704 -0.189V0H2.122V-1.435ZM1.689 -0.707C1.689 -0.608 1.689 -0.478 1.514 -0.374C1.355 -0.284 1.161 -0.279 1.106 -0.279C0.832 -0.279 0.623 -0.403 0.623 -0.593C0.623 -0.912 1.465 -0.941 1.689 -0.951V-0.707Z' id='g1-97'/>
-<path d='M0.842 -3.457H0.423V0H0.857V-0.234C0.966 -0.139 1.205 0.05 1.569 0.05C2.112 0.05 2.55 -0.458 2.55 -1.111C2.55 -1.714 2.207 -2.262 1.709 -2.262C1.395 -2.262 1.091 -2.162 0.842 -1.978V-3.457ZM0.857 -1.569C0.857 -1.649 0.857 -1.709 1.031 -1.823C1.106 -1.868 1.24 -1.933 1.41 -1.933C1.743 -1.933 2.117 -1.709 2.117 -1.111C2.117 -0.503 1.704 -0.279 1.355 -0.279C1.171 -0.279 0.996 -0.364 0.857 -0.588V-1.569Z' id='g1-98'/>
-<path d='M2.167 -0.543C1.918 -0.384 1.649 -0.294 1.34 -0.294C0.882 -0.294 0.613 -0.663 0.613 -1.111C0.613 -1.494 0.812 -1.943 1.355 -1.943C1.694 -1.943 1.853 -1.873 2.107 -1.714L2.172 -2.072C1.873 -2.222 1.743 -2.286 1.355 -2.286C0.608 -2.286 0.179 -1.684 0.179 -1.106C0.179 -0.498 0.658 0.05 1.335 0.05C1.684 0.05 1.983 -0.055 2.197 -0.179L2.167 -0.543Z' id='g1-99'/>
-<path d='M2.306 -3.457H1.888V-1.998C1.569 -2.232 1.245 -2.262 1.101 -2.262C0.578 -2.262 0.179 -1.738 0.179 -1.106S0.573 0.05 1.086 0.05C1.395 0.05 1.684 -0.09 1.873 -0.259V0H2.306V-3.457ZM1.873 -0.618C1.748 -0.413 1.559 -0.279 1.32 -0.279C0.971 -0.279 0.613 -0.523 0.613 -1.101C0.613 -1.724 1.036 -1.933 1.375 -1.933C1.574 -1.933 1.743 -1.848 1.873 -1.679V-0.618Z' id='g1-100'/>
-<path d='M2.142 -0.543C1.863 -0.344 1.549 -0.279 1.335 -0.279C0.902 -0.279 0.573 -0.633 0.558 -1.091H2.192C2.192 -1.32 2.167 -1.654 1.973 -1.938C1.793 -2.192 1.494 -2.286 1.25 -2.286C0.643 -2.286 0.174 -1.753 0.174 -1.121C0.174 -0.483 0.672 0.05 1.33 0.05C1.619 0.05 1.918 -0.035 2.172 -0.189L2.142 -0.543ZM0.593 -1.39C0.707 -1.788 1.001 -1.958 1.25 -1.958C1.469 -1.958 1.793 -1.853 1.888 -1.39H0.593Z' id='g1-101'/>
-<path d='M2.506 -2.262C2.396 -2.262 2.062 -2.257 1.684 -2.112L1.674 -2.107C1.494 -2.227 1.32 -2.262 1.176 -2.262C0.687 -2.262 0.324 -1.878 0.324 -1.45C0.324 -1.275 0.384 -1.096 0.498 -0.956C0.428 -0.872 0.354 -0.732 0.354 -0.543C0.354 -0.349 0.433 -0.224 0.478 -0.164C0.204 -0.005 0.149 0.224 0.149 0.344C0.149 0.722 0.672 1.021 1.32 1.021C1.973 1.021 2.491 0.722 2.491 0.344C2.491 -0.359 1.619 -0.359 1.405 -0.359H0.941C0.862 -0.359 0.648 -0.359 0.648 -0.618C0.648 -0.717 0.682 -0.767 0.687 -0.777C0.862 -0.667 1.036 -0.633 1.171 -0.633C1.659 -0.633 2.022 -1.016 2.022 -1.445C2.022 -1.604 1.978 -1.748 1.888 -1.883C1.868 -1.913 1.868 -1.918 1.868 -1.923C1.868 -1.943 2.167 -1.943 2.192 -1.943C2.197 -1.943 2.386 -1.943 2.565 -1.923L2.506 -2.262ZM1.176 -0.941C0.907 -0.941 0.707 -1.111 0.707 -1.445C0.707 -1.833 0.956 -1.953 1.171 -1.953C1.44 -1.953 1.639 -1.783 1.639 -1.45C1.639 -1.061 1.39 -0.941 1.176 -0.941ZM1.41 0.03C1.524 0.03 2.112 0.03 2.112 0.349C2.112 0.563 1.738 0.712 1.32 0.712S0.528 0.563 0.528 0.349C0.528 0.324 0.528 0.03 0.932 0.03H1.41Z' id='g1-103'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.161 -2.262 0.932 -2.012 0.832 -1.908V-3.457H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-104'/>
-<path d='M0.877 -3.417H0.374V-2.914H0.877V-3.417ZM0.837 -2.212H0.418V0H0.837V-2.212Z' id='g1-105'/>
-<path d='M0.986 -3.417H0.483V-2.914H0.986V-3.417ZM-0.324 0.847C-0.095 0.971 0.13 1.016 0.319 1.016C0.663 1.016 0.986 0.752 0.986 0.294V-2.212H0.568V0.329C0.568 0.418 0.568 0.498 0.463 0.583C0.349 0.667 0.209 0.667 0.164 0.667C-0.045 0.667 -0.174 0.573 -0.234 0.518L-0.324 0.847Z' id='g1-106'/>
-<path d='M0.837 -3.457H0.418V0H0.837V-3.457Z' id='g1-108'/>
-<path d='M3.786 -1.474C3.786 -1.863 3.671 -2.262 3.059 -2.262C2.64 -2.262 2.381 -2.017 2.262 -1.858C2.212 -1.993 2.087 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.21C2.316 -1.539 2.456 -1.933 2.839 -1.933C3.352 -1.933 3.352 -1.584 3.352 -1.44V0H3.786V-1.474Z' id='g1-109'/>
-<path d='M2.316 -1.474C2.316 -1.863 2.202 -2.262 1.589 -2.262C1.305 -2.262 1.031 -2.147 0.812 -1.883V-2.247H0.413V0H0.847V-1.21C0.847 -1.539 0.986 -1.933 1.37 -1.933C1.883 -1.933 1.883 -1.584 1.883 -1.44V0H2.316V-1.474Z' id='g1-110'/>
-<path d='M2.491 -1.091C2.491 -1.748 1.968 -2.286 1.32 -2.286S0.149 -1.743 0.149 -1.091C0.149 -0.458 0.677 0.05 1.32 0.05C1.968 0.05 2.491 -0.458 2.491 -1.091ZM1.32 -0.294C0.927 -0.294 0.583 -0.583 0.583 -1.146S0.951 -1.958 1.32 -1.958C1.694 -1.958 2.057 -1.699 2.057 -1.146C2.057 -0.578 1.704 -0.294 1.32 -0.294Z' id='g1-111'/>
-<path d='M0.857 -0.234C1.121 0.005 1.405 0.05 1.574 0.05C2.102 0.05 2.55 -0.453 2.55 -1.111C2.55 -1.709 2.222 -2.262 1.729 -2.262C1.504 -2.262 1.131 -2.197 0.842 -1.973V-2.212H0.423V0.966H0.857V-0.234ZM0.857 -1.654C0.971 -1.793 1.166 -1.918 1.405 -1.918C1.803 -1.918 2.117 -1.549 2.117 -1.111C2.117 -0.618 1.743 -0.279 1.355 -0.279C1.28 -0.279 1.156 -0.289 1.026 -0.394C0.877 -0.508 0.857 -0.583 0.857 -0.677V-1.654Z' id='g1-112'/>
-<path d='M0.842 -1.061C0.842 -1.599 1.29 -1.888 1.729 -1.893V-2.262C1.31 -2.257 1.006 -2.052 0.807 -1.788V-2.247H0.423V0H0.842V-1.061Z' id='g1-114'/>
-<path d='M1.818 -2.132C1.479 -2.271 1.23 -2.286 1.051 -2.286C0.927 -2.286 0.174 -2.286 0.174 -1.624C0.174 -1.39 0.304 -1.26 0.369 -1.2C0.543 -1.026 0.752 -0.986 1.016 -0.936C1.25 -0.892 1.519 -0.842 1.519 -0.603C1.519 -0.289 1.106 -0.289 1.036 -0.289C0.717 -0.289 0.418 -0.403 0.219 -0.543L0.149 -0.169C0.319 -0.085 0.623 0.05 1.036 0.05C1.26 0.05 1.479 0.015 1.664 -0.12C1.848 -0.259 1.908 -0.478 1.908 -0.648C1.908 -0.737 1.898 -0.932 1.689 -1.121C1.504 -1.285 1.325 -1.32 1.086 -1.365C0.792 -1.42 0.563 -1.465 0.563 -1.684C0.563 -1.968 0.927 -1.968 1.001 -1.968C1.285 -1.968 1.504 -1.908 1.753 -1.778L1.818 -2.132Z' id='g1-115'/>
-<path d='M0.936 -1.898H1.674V-2.212H0.936V-2.844H0.553V-2.212H0.1V-1.898H0.538V-0.638C0.538 -0.304 0.623 0.05 0.981 0.05S1.614 -0.065 1.763 -0.134L1.679 -0.453C1.514 -0.334 1.34 -0.294 1.2 -0.294C0.991 -0.294 0.936 -0.498 0.936 -0.727V-1.898Z' id='g1-116'/>
-<path d='M2.316 -2.212H1.883V-0.767C1.883 -0.369 1.544 -0.244 1.255 -0.244C0.887 -0.244 0.847 -0.344 0.847 -0.573V-2.212H0.413V-0.543C0.413 -0.1 0.608 0.05 0.956 0.05C1.161 0.05 1.599 0.01 1.898 -0.229V0H2.316V-2.212Z' id='g1-117'/>
-<path d='M3.537 -2.212H3.148C3.103 -2.072 2.824 -1.23 2.67 -0.712C2.63 -0.568 2.58 -0.408 2.565 -0.294H2.56C2.531 -0.498 2.356 -1.036 2.346 -1.071L1.978 -2.212H1.599C1.455 -1.783 1.081 -0.667 1.041 -0.304H1.036C0.996 -0.658 0.628 -1.758 0.548 -1.998C0.508 -2.117 0.508 -2.127 0.483 -2.212H0.075L0.802 0H1.22C1.225 -0.02 1.36 -0.413 1.534 -0.966C1.609 -1.21 1.758 -1.689 1.783 -1.908L1.788 -1.913C1.798 -1.808 1.828 -1.699 1.863 -1.574S1.933 -1.315 1.968 -1.2L2.351 0H2.809L3.537 -2.212Z' id='g1-119'/>
-<path d='M1.38 -1.141L2.346 -2.212H1.908L1.2 -1.395L0.478 -2.212H0.03L1.026 -1.141L0 0H0.443L1.2 -0.936L1.988 0H2.436L1.38 -1.141Z' id='g1-120'/>
-<path d='M2.112 -2.002V-2.212H0.219V-1.893H0.951C1.011 -1.893 1.071 -1.898 1.131 -1.898H1.519L0.149 -0.219V0H2.127V-0.334H1.355C1.295 -0.334 1.235 -0.329 1.176 -0.329H0.742L2.112 -2.002Z' id='g1-122'/>
-<path d='M3.891 -2.914C4.806 -3.165 5.452 -3.811 5.452 -4.546C5.452 -5.469 4.411 -6.223 3.129 -6.223H0.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891 -2.914ZM1.704 -3.407V-5.694H3.022C4.062 -5.694 4.671 -5.192 4.671 -4.546C4.671 -3.963 4.125 -3.407 3.022 -3.407H1.704Z' id='g0-82'/>
-<path d='M3.694 -2.591C3.694 -3.479 3.04 -4.133 2.152 -4.133C1.569 -4.133 1.139 -3.981 0.708 -3.739L0.762 -3.102C1.21 -3.434 1.65 -3.569 2.143 -3.569C2.645 -3.569 2.95 -3.165 2.95 -2.582V-2.206C1.408 -2.17 0.395 -1.766 0.395 -1.04C0.395 -0.619 0.672 0.099 1.453 0.099C1.632 0.099 2.412 0.081 2.977 -0.341V0H3.694V-2.591ZM2.95 -1.255C2.95 -1.067 2.95 -0.843 2.627 -0.655C2.403 -0.52 2.107 -0.484 1.928 -0.484C1.47 -0.484 1.085 -0.699 1.085 -1.058C1.085 -1.695 2.833 -1.722 2.95 -1.722V-1.255Z' id='g0-97'/>
-<path d='M3.829 -1.964C3.829 -2.242 3.82 -2.923 3.47 -3.461C3.093 -4.026 2.52 -4.133 2.179 -4.133C1.139 -4.133 0.314 -3.174 0.314 -2.026C0.314 -0.843 1.193 0.099 2.313 0.099C2.744 0.099 3.264 -0.009 3.784 -0.341L3.73 -0.959C3.165 -0.556 2.636 -0.484 2.322 -0.484C1.578 -0.484 1.004 -1.139 0.977 -1.964H3.829ZM1.031 -2.493C1.175 -3.067 1.614 -3.551 2.179 -3.551C2.511 -3.551 3.12 -3.398 3.291 -2.493H1.031Z' id='g0-101'/>
-<path d='M1.524 -6.133H0.664V-5.272H1.524V-6.133ZM1.453 -3.981H0.735V0H1.453V-3.981Z' id='g0-105'/>
-<path d='M1.453 -6.223H0.735V0H1.453V-6.223Z' id='g0-108'/>
-<path d='M1.462 -1.91C1.462 -2.851 2.197 -3.425 3.013 -3.434V-4.08C2.367 -4.071 1.775 -3.748 1.408 -3.219V-4.035H0.744V0H1.462V-1.91Z' id='g0-114'/>
-<path d='M3.165 -3.847C2.609 -4.098 2.197 -4.133 1.829 -4.133C1.623 -4.133 0.305 -4.133 0.305 -2.95C0.305 -2.52 0.565 -2.251 0.664 -2.152C1.004 -1.856 1.237 -1.811 1.847 -1.695C2.134 -1.641 2.645 -1.542 2.645 -1.085C2.645 -0.502 1.919 -0.502 1.802 -0.502C1.273 -0.502 0.762 -0.681 0.377 -0.95L0.26 -0.296C0.798 -0.009 1.345 0.099 1.802 0.099C2.385 0.099 3.318 -0.09 3.318 -1.157C3.318 -1.47 3.192 -1.784 2.878 -2.053C2.573 -2.313 2.304 -2.367 1.748 -2.475C1.426 -2.537 0.977 -2.618 0.977 -3.04C0.977 -3.569 1.614 -3.569 1.748 -3.569C2.403 -3.569 2.789 -3.362 3.049 -3.219L3.165 -3.847Z' id='g0-115'/>
-<path d='M1.623 -3.425H2.914V-3.981H1.623V-5.12H0.959V-3.981H0.17V-3.425H0.933V-1.13C0.933 -0.601 1.049 0.099 1.704 0.099C2.098 0.099 2.564 0.018 3.067 -0.233L2.914 -0.798C2.681 -0.619 2.367 -0.511 2.089 -0.511C1.739 -0.511 1.623 -0.825 1.623 -1.291V-3.425Z' id='g0-116'/>
-<path d='M4.116 -3.981H3.407L2.699 -2.161C2.52 -1.695 2.188 -0.825 2.143 -0.493H2.125C2.107 -0.646 2.08 -0.816 1.587 -2.107C1.318 -2.833 0.879 -3.927 0.861 -3.981H0.126L1.704 0H2.537L4.116 -3.981Z' id='g0-118'/>
-</defs>
-<g id='page10'>
-<path d='M194.617 194.93V186.074M253.285 194.93V186.074M311.953 194.93V186.074M370.625 194.93V186.074M429.293 194.93V186.074M194.617 51.973V60.828M253.285 51.973V60.828M311.953 51.973V60.828M370.625 51.973V60.828M429.293 51.973V60.828' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M165.281 190.324V186.074M223.953 190.324V186.074M282.621 190.324V186.074M341.289 190.324V186.074M399.957 190.324V186.074M458.629 190.324V186.074M165.281 56.574V60.828M223.953 56.574V60.828M282.621 56.574V60.828M341.289 56.574V60.828M399.957 56.574V60.828M458.629 56.574V60.828' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 186.074H140.199M135.949 154.762H140.199M135.949 123.449H140.199M135.949 92.141H140.199M135.949 60.828H140.199M487.961 186.074H483.711M487.961 154.762H483.711M487.961 123.449H483.711M487.961 92.141H483.711M487.961 60.828H483.711' fill='none' stroke='#808080' stroke-miterlimit='10' stroke-width='0.199'/>
-<path d='M135.949 186.074V60.828H487.961V186.074H135.949Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -21.265 59.571)'>
-<use x='168.285' xlink:href='#g2-97' y='140.503'/>
-<use x='172.353' xlink:href='#g2-108' y='140.503'/>
-<use x='174.373' xlink:href='#g2-108' y='140.503'/>
-<use x='176.393' xlink:href='#g2-111' y='140.503'/>
-<use x='180.863' xlink:href='#g2-99' y='140.503'/>
-<use x='184.627' xlink:href='#g2-45' y='140.503'/>
-<use x='187.449' xlink:href='#g2-116' y='140.503'/>
-<use x='190.507' xlink:href='#g2-101' y='140.503'/>
-<use x='194.271' xlink:href='#g2-115' y='140.503'/>
-<use x='197.517' xlink:href='#g2-116' y='140.503'/>
-<use x='200.575' xlink:href='#g2-49' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 59.571)'>
-<use x='168.285' xlink:href='#g2-97' y='140.503'/>
-<use x='172.353' xlink:href='#g2-108' y='140.503'/>
-<use x='174.373' xlink:href='#g2-108' y='140.503'/>
-<use x='176.393' xlink:href='#g2-111' y='140.503'/>
-<use x='180.863' xlink:href='#g2-99' y='140.503'/>
-<use x='184.627' xlink:href='#g2-45' y='140.503'/>
-<use x='187.449' xlink:href='#g2-116' y='140.503'/>
-<use x='190.507' xlink:href='#g2-101' y='140.503'/>
-<use x='194.271' xlink:href='#g2-115' y='140.503'/>
-<use x='197.517' xlink:href='#g2-116' y='140.503'/>
-<use x='200.575' xlink:href='#g2-78' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 59.571)'>
-<use x='168.285' xlink:href='#g2-115' y='140.503'/>
-<use x='171.531' xlink:href='#g2-104' y='140.503'/>
-<use x='175.904' xlink:href='#g2-54' y='140.503'/>
-<use x='180.138' xlink:href='#g2-98' y='140.503'/>
-<use x='184.746' xlink:href='#g2-101' y='140.503'/>
-<use x='188.509' xlink:href='#g2-110' y='140.503'/>
-<use x='192.882' xlink:href='#g2-99' y='140.503'/>
-<use x='196.646' xlink:href='#g2-104' y='140.503'/>
-<use x='201.018' xlink:href='#g2-78' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 59.571)'>
-<use x='168.285' xlink:href='#g2-115' y='140.503'/>
-<use x='171.531' xlink:href='#g2-104' y='140.503'/>
-<use x='175.904' xlink:href='#g2-56' y='140.503'/>
-<use x='180.138' xlink:href='#g2-98' y='140.503'/>
-<use x='184.746' xlink:href='#g2-101' y='140.503'/>
-<use x='188.509' xlink:href='#g2-110' y='140.503'/>
-<use x='192.882' xlink:href='#g2-99' y='140.503'/>
-<use x='196.646' xlink:href='#g2-104' y='140.503'/>
-<use x='201.018' xlink:href='#g2-78' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 59.571)'>
-<use x='168.285' xlink:href='#g2-120' y='140.503'/>
-<use x='172.187' xlink:href='#g2-109' y='140.503'/>
-<use x='178.912' xlink:href='#g2-97' y='140.503'/>
-<use x='182.98' xlink:href='#g2-108' y='140.503'/>
-<use x='185' xlink:href='#g2-108' y='140.503'/>
-<use x='187.02' xlink:href='#g2-111' y='140.503'/>
-<use x='191.49' xlink:href='#g2-99' y='140.503'/>
-<use x='195.254' xlink:href='#g2-45' y='140.503'/>
-<use x='198.076' xlink:href='#g2-116' y='140.503'/>
-<use x='201.134' xlink:href='#g2-101' y='140.503'/>
-<use x='204.898' xlink:href='#g2-115' y='140.503'/>
-<use x='208.144' xlink:href='#g2-116' y='140.503'/>
-<use x='211.202' xlink:href='#g2-78' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 59.571)'>
-<use x='168.285' xlink:href='#g2-99' y='140.503'/>
-<use x='172.049' xlink:href='#g2-97' y='140.503'/>
-<use x='176.117' xlink:href='#g2-99' y='140.503'/>
-<use x='179.88' xlink:href='#g2-104' y='140.503'/>
-<use x='184.253' xlink:href='#g2-101' y='140.503'/>
-<use x='188.017' xlink:href='#g2-45' y='140.503'/>
-<use x='190.839' xlink:href='#g2-115' y='140.503'/>
-<use x='194.086' xlink:href='#g2-99' y='140.503'/>
-<use x='197.849' xlink:href='#g2-114' y='140.503'/>
-<use x='200.741' xlink:href='#g2-97' y='140.503'/>
-<use x='204.81' xlink:href='#g2-116' y='140.503'/>
-<use x='207.868' xlink:href='#g2-99' y='140.503'/>
-<use x='211.631' xlink:href='#g2-104' y='140.503'/>
-<use x='216.004' xlink:href='#g2-78' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 47.205)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 15.894)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-53' y='140.503'/>
-<use x='175.048' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -15.418)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -46.729)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-53' y='140.503'/>
-<use x='175.048' xlink:href='#g1-120' y='140.503'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -78.041)'>
-<use x='168.285' xlink:href='#g1-50' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-120' y='140.503'/>
-</g>
-<path clip-path='url(#clip10)' d='M135.949 123.449H487.961' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M140.125 186.074H143.363V123.449H140.125ZM198.797 186.074H202.035V123.449H198.797ZM257.465 186.074H260.703V123.449H257.465ZM316.133 186.074H319.371V123.449H316.133ZM374.801 186.074H378.039V123.449H374.801ZM433.473 186.074H436.711V123.449H433.473Z' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M140.125 186.074H143.363V123.449H140.125ZM198.797 186.074H202.035V123.449H198.797ZM257.465 186.074H260.703V123.449H257.465ZM316.133 186.074H319.371V123.449H316.133ZM374.801 186.074H378.039V123.449H374.801ZM433.473 186.074H436.711V123.449H433.473Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M141.746 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M139.754 123.449H143.738' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M141.746 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M139.754 123.449H143.738' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M200.414 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M198.422 123.449H202.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M200.414 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M198.422 123.449H202.406' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M259.082 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M257.09 123.449H261.078' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M259.082 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M257.09 123.449H261.078' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M317.754 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M315.762 123.449H319.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M317.754 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M315.762 123.449H319.746' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M376.422 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M374.43 123.449H378.414' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M376.422 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M374.43 123.449H378.414' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M435.09 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M433.098 123.449H437.082' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M435.09 123.449V123.449' fill='#f0e0f0'/>
-<path clip-path='url(#clip10)' d='M433.098 123.449H437.082' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M145.356 186.074H148.594V120.071H145.356ZM204.028 186.074H207.266V121.571H204.028ZM262.695 186.074H265.934V122.699H262.695ZM321.363 186.074H324.602V125.895H321.363ZM380.031 186.074H383.27V173.172H380.031ZM438.703 186.074H441.942V93.391H438.703Z' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M145.356 186.074H148.594V120.071H145.356ZM204.028 186.074H207.266V121.571H204.028ZM262.695 186.074H265.934V122.699H262.695ZM321.363 186.074H324.602V125.895H321.363ZM380.031 186.074H383.27V173.172H380.031ZM438.703 186.074H441.942V93.391H438.703Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M146.977 120.071V120.071' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M144.984 120.07H148.968' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M146.977 120.071V120.071' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M144.984 120.07H148.968' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M205.645 121.571V121.571' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M203.652 121.57H207.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M205.645 121.571V121.571' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M203.652 121.57H207.636' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M264.313 122.699V122.699' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M262.32 122.699H266.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M264.313 122.699V122.699' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M262.32 122.699H266.308' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M322.984 125.895V125.895' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M320.992 125.894H324.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M322.984 125.895V125.895' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M320.992 125.894H324.976' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M381.652 173.172V173.172' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M379.66 173.172H383.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M381.652 173.172V173.172' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M379.66 173.172H383.644' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M440.32 93.391V93.391' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M438.328 93.391H442.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M440.32 93.391V93.391' fill='#e1c2e1'/>
-<path clip-path='url(#clip10)' d='M438.328 93.391H442.312' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M150.586 186.074H153.824V122.699H150.586ZM209.258 186.074H212.496V124.766H209.258ZM267.926 186.074H271.164V121.762H267.926ZM326.594 186.074H329.832V118.692H326.594ZM385.262 186.074H388.5V154.324H385.262ZM443.934 186.074H447.172V111.238H443.934Z' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M150.586 186.074H153.824V122.699H150.586ZM209.258 186.074H212.496V124.766H209.258ZM267.926 186.074H271.164V121.762H267.926ZM326.594 186.074H329.832V118.692H326.594ZM385.262 186.074H388.5V154.324H385.262ZM443.934 186.074H447.172V111.238H443.934Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M152.207 122.699V122.699' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M150.215 122.699H154.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M152.207 122.699V122.699' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M150.215 122.699H154.199' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M210.875 124.766V124.766' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M208.883 124.766H212.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M210.875 124.766V124.766' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M208.883 124.766H212.867' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M269.543 121.762V121.762' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M267.551 121.762H271.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M269.543 121.762V121.762' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M267.551 121.762H271.539' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M328.215 118.692V118.692' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M326.223 118.691H330.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M328.215 118.692V118.692' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M326.223 118.691H330.207' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M386.883 154.324V154.324' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M384.891 154.324H388.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M386.883 154.324V154.324' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M384.891 154.324H388.875' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M445.551 111.238V111.238' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M443.559 111.238H447.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M445.551 111.238V111.238' fill='#d1a3d1'/>
-<path clip-path='url(#clip10)' d='M443.559 111.238H447.543' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M155.817 186.074H159.055V119.696H155.817ZM214.488 186.074H217.727V121.887H214.488ZM273.156 186.074H276.395V113.43H273.156ZM331.824 186.074H335.063V119.004H331.824ZM390.492 186.074H393.731V89.133H390.492ZM449.164 186.074H452.402V120.633H449.164Z' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M155.817 186.074H159.055V119.696H155.817ZM214.488 186.074H217.727V121.887H214.488ZM273.156 186.074H276.395V113.43H273.156ZM331.824 186.074H335.063V119.004H331.824ZM390.492 186.074H393.731V89.133H390.492ZM449.164 186.074H452.402V120.633H449.164Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M157.438 119.696V119.696' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M155.445 119.695H159.429' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M157.438 119.696V119.696' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M155.445 119.695H159.429' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M216.106 121.887V121.887' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M214.113 121.886H218.097' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M216.106 121.887V121.887' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M214.113 121.886H218.097' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M274.774 113.43V113.43' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M272.781 113.43H276.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M274.774 113.43V113.43' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M272.781 113.43H276.769' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M333.445 119.004V119.004' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M331.453 119.004H335.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M333.445 119.004V119.004' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M331.453 119.004H335.437' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M392.113 89.133V89.133' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M390.121 89.133H394.105' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M392.113 89.133V89.133' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M390.121 89.133H394.105' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M450.781 120.633V120.633' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M448.789 120.633H452.773' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M450.781 120.633V120.633' fill='#c285c2'/>
-<path clip-path='url(#clip10)' d='M448.789 120.633H452.773' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M161.047 186.074H164.285V109.738H161.047ZM219.719 186.074H222.957V112.555H219.719ZM278.387 186.074H281.625V86.192H278.387ZM337.055 186.074H340.293V106.543H337.055ZM395.723 186.074H398.961V172.172H395.723ZM454.395 186.074H457.633V122.949H454.395Z' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M161.047 186.074H164.285V109.738H161.047ZM219.719 186.074H222.957V112.555H219.719ZM278.387 186.074H281.625V86.192H278.387ZM337.055 186.074H340.293V106.543H337.055ZM395.723 186.074H398.961V172.172H395.723ZM454.395 186.074H457.633V122.949H454.395Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M162.668 109.738V109.738' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M160.676 109.738H164.66' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M162.668 109.738V109.738' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M160.676 109.738H164.66' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M221.336 112.555V112.555' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M219.344 112.554H223.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M221.336 112.555V112.555' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M219.344 112.554H223.328' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M280.004 86.192V86.192' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M278.012 86.191H282' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M280.004 86.192V86.192' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M278.012 86.191H282' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M338.676 106.543V106.543' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M336.684 106.543H340.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M338.676 106.543V106.543' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M336.684 106.543H340.668' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M397.344 172.172V172.172' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M395.352 172.172H399.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M397.344 172.172V172.172' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M395.352 172.172H399.336' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M456.012 122.949V122.949' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M454.02 122.949H458.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M456.012 122.949V122.949' fill='#b366b3'/>
-<path clip-path='url(#clip10)' d='M454.02 122.949H458.004' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M166.278 186.074H169.516V98.278H166.278ZM224.949 186.074H228.188V94.77H224.949ZM283.617 186.074H286.856V78.051H283.617ZM342.285 186.074H345.524V92.453H342.285ZM400.953 186.074H404.192V154.762H400.953ZM459.625 186.074H462.863V113.242H459.625Z' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M166.278 186.074H169.516V98.278H166.278ZM224.949 186.074H228.188V94.77H224.949ZM283.617 186.074H286.856V78.051H283.617ZM342.285 186.074H345.524V92.453H342.285ZM400.953 186.074H404.192V154.762H400.953ZM459.625 186.074H462.863V113.242H459.625Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M167.899 98.278V98.278' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M165.906 98.277H169.89' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M167.899 98.278V98.278' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M165.906 98.277H169.89' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M226.567 94.77V94.77' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M224.574 94.77H228.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M226.567 94.77V94.77' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M224.574 94.77H228.558' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M285.234 78.051V78.051' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M283.242 78.051H287.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M285.234 78.051V78.051' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M283.242 78.051H287.23' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M343.906 92.453V92.453' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M341.914 92.453H345.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M343.906 92.453V92.453' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M341.914 92.453H345.898' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M402.574 154.762V154.762' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M400.582 154.761H404.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M402.574 154.762V154.762' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M400.582 154.761H404.566' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M461.242 113.242V113.242' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M459.25 113.242H463.234' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M461.242 113.242V113.242' fill='#a447a4'/>
-<path clip-path='url(#clip10)' d='M459.25 113.242H463.234' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M171.508 186.074H174.746V109.172H171.508ZM230.18 186.074H233.414V112.617H230.18ZM288.848 186.074H292.086V86.254H288.848ZM347.516 186.074H350.754V107.418H347.516ZM406.184 186.074H409.422V172.235H406.184ZM464.856 186.074H468.094V124.266H464.856Z' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M171.508 186.074H174.746V109.172H171.508ZM230.18 186.074H233.414V112.617H230.18ZM288.848 186.074H292.086V86.254H288.848ZM347.516 186.074H350.754V107.418H347.516ZM406.184 186.074H409.422V172.235H406.184ZM464.856 186.074H468.094V124.266H464.856Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M173.129 109.172V109.172' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M171.137 109.172H175.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M173.129 109.172V109.172' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M171.137 109.172H175.121' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M231.797 112.617V112.617' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M229.805 112.617H233.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M231.797 112.617V112.617' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M229.805 112.617H233.789' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M290.465 86.254V86.254' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M288.473 86.254H292.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M290.465 86.254V86.254' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M288.473 86.254H292.461' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M349.137 107.418V107.418' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M347.145 107.418H351.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M349.137 107.418V107.418' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M347.145 107.418H351.129' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M407.805 172.235V172.235' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M405.813 172.234H409.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M407.805 172.235V172.235' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M405.813 172.234H409.797' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M466.473 124.266V124.266' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M464.481 124.266H468.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M466.473 124.266V124.266' fill='#942994'/>
-<path clip-path='url(#clip10)' d='M464.481 124.266H468.465' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M411.414 186.074H414.652V151.946H411.414ZM176.738 186.074H179.977V117.375H176.738ZM235.41 186.074H238.645V119.567H235.41ZM294.078 186.074H297.317V116.813H294.078ZM352.746 186.074H355.984V123.891H352.746ZM470.086 186.074H473.324V117.313H470.086Z' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M411.414 186.074H414.652V151.946H411.414ZM176.738 186.074H179.977V117.375H176.738ZM235.41 186.074H238.645V119.567H235.41ZM294.078 186.074H297.317V116.813H294.078ZM352.746 186.074H355.984V123.891H352.746ZM470.086 186.074H473.324V117.313H470.086Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M413.035 151.946V151.946' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M411.043 151.945H415.027' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M413.035 151.946V151.946' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M411.043 151.945H415.027' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M178.36 117.375V117.375' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M176.367 117.375H180.351' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M178.36 117.375V117.375' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M176.367 117.375H180.351' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M237.027 119.567V119.567' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M235.035 119.566H239.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M237.027 119.567V119.567' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M235.035 119.566H239.019' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M295.695 116.813V116.813' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M293.703 116.813H297.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M295.695 116.813V116.813' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M293.703 116.813H297.691' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M354.367 123.891V123.891' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M352.375 123.89H356.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M354.367 123.891V123.891' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M352.375 123.89H356.359' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M471.703 117.313V117.313' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M469.711 117.313H473.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M471.703 117.313V117.313' fill='#850a85'/>
-<path clip-path='url(#clip10)' d='M469.711 117.313H473.695' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M181.969 186.074H185.207V121.762H181.969ZM240.641 186.074H243.875V122.074H240.641ZM299.309 186.074H302.547V122.574H299.309ZM357.977 186.074H361.215V121.949H357.977ZM475.317 186.074H478.555V113.746H475.317Z' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M181.969 186.074H185.207V121.762H181.969ZM240.641 186.074H243.875V122.074H240.641ZM299.309 186.074H302.547V122.574H299.309ZM357.977 186.074H361.215V121.949H357.977ZM475.317 186.074H478.555V113.746H475.317Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M183.59 121.762V121.762' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M181.598 121.762H185.583' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M183.59 121.762V121.762' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M181.598 121.762H185.583' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M242.258 122.074V122.074' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M240.266 122.074H244.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M242.258 122.074V122.074' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M240.266 122.074H244.25' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M300.926 122.574V122.574' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M298.933 122.574H302.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M300.926 122.574V122.574' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M298.933 122.574H302.921' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M359.598 121.949V121.949' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M357.606 121.949H361.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M359.598 121.949V121.949' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M357.606 121.949H361.59' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M476.934 113.746V113.746' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M474.942 113.746H478.926' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M476.934 113.746V113.746' fill='#760076'/>
-<path clip-path='url(#clip10)' d='M474.942 113.746H478.926' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M187.199 186.074H190.438V122.887H187.199ZM245.871 186.074H249.106V122.637H245.871ZM304.539 186.074H307.777V123.387H304.539ZM363.207 186.074H366.445V125.391H363.207ZM421.875 186.074H425.113V169.164H421.875ZM480.547 186.074H483.785V121.571H480.547Z' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M187.199 186.074H190.438V122.887H187.199ZM245.871 186.074H249.106V122.637H245.871ZM304.539 186.074H307.777V123.387H304.539ZM363.207 186.074H366.445V125.391H363.207ZM421.875 186.074H425.113V169.164H421.875ZM480.547 186.074H483.785V121.571H480.547Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M188.82 122.887V122.887' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M186.828 122.886H190.813' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M188.82 122.887V122.887' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M186.828 122.886H190.813' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M247.488 122.637V122.637' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M245.496 122.637H249.481' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M247.488 122.637V122.637' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M245.496 122.637H249.481' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M306.156 123.387V123.387' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M304.164 123.387H308.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M306.156 123.387V123.387' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M304.164 123.387H308.152' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M364.828 125.391V125.391' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M362.836 125.39H366.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M364.828 125.391V125.391' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M362.836 125.39H366.82' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M423.496 169.164V169.164' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M421.504 169.164H425.488' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M423.496 169.164V169.164' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M421.504 169.164H425.488' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M482.164 121.571V121.571' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M480.172 121.57H484.156' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M482.164 121.571V121.571' fill='#670067'/>
-<path clip-path='url(#clip10)' d='M480.172 121.57H484.156' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path clip-path='url(#clip10)' d='M419.477 233.301H487.762V211.324H419.477Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 254.512 88.837)'>
-<use x='168.285' xlink:href='#g1-72' y='129.265'/>
-<use x='172.021' xlink:href='#g1-80' y='129.265'/>
-<use x='175.402' xlink:href='#g1-45' y='129.265'/>
-<use x='177.167' xlink:href='#g1-90' y='129.265'/>
-<use x='180.401' xlink:href='#g1-52' y='129.265'/>
-<use x='183.047' xlink:href='#g1-45' y='129.265'/>
-<use x='184.812' xlink:href='#g1-71' y='129.265'/>
-<use x='188.34' xlink:href='#g1-52' y='129.265'/>
-<use x='190.987' xlink:href='#g1-44' y='129.265'/>
-<use x='194.221' xlink:href='#g1-49' y='129.265'/>
-<use x='196.867' xlink:href='#g1-54' y='129.265'/>
-<use x='199.514' xlink:href='#g1-71' y='129.265'/>
-<use x='203.042' xlink:href='#g1-98' y='129.265'/>
-<use x='168.285' xlink:href='#g1-56' y='134.884'/>
-<use x='170.931' xlink:href='#g1-45' y='134.884'/>
-<use x='172.695' xlink:href='#g1-99' y='134.884'/>
-<use x='175.048' xlink:href='#g1-111' y='134.884'/>
-<use x='177.547' xlink:href='#g1-114' y='134.884'/>
-<use x='179.355' xlink:href='#g1-101' y='134.884'/>
-<use x='183.471' xlink:href='#g1-73' y='134.884'/>
-<use x='184.941' xlink:href='#g1-110' y='134.884'/>
-<use x='187.674' xlink:href='#g1-116' y='134.884'/>
-<use x='189.585' xlink:href='#g1-101' y='134.884'/>
-<use x='191.938' xlink:href='#g1-108' y='134.884'/>
-<use x='194.965' xlink:href='#g1-88' y='134.884'/>
-<use x='198.493' xlink:href='#g1-69' y='134.884'/>
-<use x='201.667' xlink:href='#g1-79' y='134.884'/>
-<use x='205.576' xlink:href='#g1-78' y='134.884'/>
-<use x='211.076' xlink:href='#g1-64' y='134.884'/>
-<use x='214.605' xlink:href='#g1-50' y='134.884'/>
-<use x='217.251' xlink:href='#g1-46' y='134.884'/>
-<use x='218.721' xlink:href='#g1-55' y='134.884'/>
-<use x='221.368' xlink:href='#g1-71' y='134.884'/>
-<use x='224.896' xlink:href='#g1-104' y='134.884'/>
-<use x='227.629' xlink:href='#g1-122' y='134.884'/>
-<use x='168.285' xlink:href='#g1-85' y='140.503'/>
-<use x='171.917' xlink:href='#g1-98' y='140.503'/>
-<use x='174.65' xlink:href='#g1-117' y='140.503'/>
-<use x='177.383' xlink:href='#g1-110' y='140.503'/>
-<use x='180.116' xlink:href='#g1-116' y='140.503'/>
-<use x='182.027' xlink:href='#g1-117' y='140.503'/>
-<use x='186.524' xlink:href='#g1-49' y='140.503'/>
-<use x='189.17' xlink:href='#g1-56' y='140.503'/>
-<use x='191.817' xlink:href='#g1-46' y='140.503'/>
-<use x='193.287' xlink:href='#g1-48' y='140.503'/>
-<use x='195.933' xlink:href='#g1-52' y='140.503'/>
-<use x='198.58' xlink:href='#g1-46' y='140.503'/>
-<use x='200.05' xlink:href='#g1-49' y='140.503'/>
-<use x='202.696' xlink:href='#g1-44' y='140.503'/>
-<use x='205.931' xlink:href='#g1-71' y='140.503'/>
-<use x='209.459' xlink:href='#g1-67' y='140.503'/>
-<use x='212.841' xlink:href='#g1-67' y='140.503'/>
-<use x='217.986' xlink:href='#g1-55' y='140.503'/>
-<use x='220.633' xlink:href='#g1-46' y='140.503'/>
-<use x='222.103' xlink:href='#g1-52' y='140.503'/>
-<use x='224.749' xlink:href='#g1-46' y='140.503'/>
-<use x='226.219' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 2.877 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 61.546 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 120.215 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 178.884 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 237.553 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 296.222 285.711)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 8.107 282.329)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-53' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 66.776 283.832)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-51' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 125.445 284.96)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 184.114 288.153)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 242.783 335.434)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 301.452 255.652)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-52' y='140.503'/>
-<use x='175.048' xlink:href='#g1-56' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 13.338 284.96)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 72.007 287.026)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-56' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 130.676 284.02)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-51' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 189.345 280.952)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-56' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 248.014 316.584)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-53' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 306.683 273.5)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 18.568 281.954)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 77.237 284.146)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-51' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 135.906 275.691)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 194.575 281.265)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-55' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 253.244 251.394)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-53' y='140.503'/>
-<use x='175.048' xlink:href='#g1-53' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 311.913 282.893)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-52' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 23.799 271.997)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 82.468 274.815)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-55' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 141.137 248.45)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-54' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 199.806 268.803)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-55' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 258.475 334.432)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 317.144 285.21)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 29.029 260.537)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-52' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 87.698 257.03)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-52' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 146.367 240.309)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-55' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 205.036 254.713)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-52' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 263.705 317.023)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-53' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 322.374 275.504)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 34.26 271.433)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-51' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.929 274.877)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-55' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 151.598 248.513)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-53' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 210.267 269.68)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 268.936 334.494)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 327.605 286.525)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 274.166 314.205)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-53' y='140.503'/>
-<use x='175.048' xlink:href='#g1-52' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 39.49 279.637)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 98.159 281.828)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 156.828 279.073)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 215.497 286.149)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-57' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 332.835 279.574)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 44.72 284.02)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-51' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 103.389 284.333)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 162.058 284.834)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 220.727 284.208)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-50' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 338.065 276.005)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-49' y='140.503'/>
-<use x='175.048' xlink:href='#g1-54' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.951 285.147)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 108.62 284.897)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-49' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 167.289 285.648)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-48' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.958 287.652)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-57' y='140.503'/>
-<use x='175.048' xlink:href='#g1-55' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 284.627 331.426)'>
-<use x='168.285' xlink:href='#g1-48' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-50' y='140.503'/>
-<use x='175.048' xlink:href='#g1-55' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 343.296 283.832)'>
-<use x='168.285' xlink:href='#g1-49' y='140.503'/>
-<use x='170.931' xlink:href='#g1-46' y='140.503'/>
-<use x='172.401' xlink:href='#g1-48' y='140.503'/>
-<use x='175.048' xlink:href='#g1-51' y='140.503'/>
-</g>
-<g transform='matrix(0 -1 1 0 -27.345 343.63)'>
-<use x='168.285' xlink:href='#g0-82' y='140.503'/>
-<use x='174.255' xlink:href='#g0-101' y='140.503'/>
-<use x='178.351' xlink:href='#g0-108' y='140.503'/>
-<use x='180.551' xlink:href='#g0-97' y='140.503'/>
-<use x='184.979' xlink:href='#g0-116' y='140.503'/>
-<use x='188.307' xlink:href='#g0-105' y='140.503'/>
-<use x='190.507' xlink:href='#g0-118' y='140.503'/>
-<use x='194.755' xlink:href='#g0-101' y='140.503'/>
-<use x='201.922' xlink:href='#g0-114' y='140.503'/>
-<use x='205.07' xlink:href='#g0-115' y='140.503'/>
-<use x='208.603' xlink:href='#g0-115' y='140.503'/>
-<use x='215.207' xlink:href='#g2-40' y='140.503'/>
-<use x='218.5' xlink:href='#g2-108' y='140.503'/>
-<use x='220.521' xlink:href='#g2-111' y='140.503'/>
-<use x='224.52' xlink:href='#g2-119' y='140.503'/>
-<use x='230.068' xlink:href='#g2-101' y='140.503'/>
-<use x='233.832' xlink:href='#g2-114' y='140.503'/>
-<use x='239.547' xlink:href='#g2-105' y='140.503'/>
-<use x='241.567' xlink:href='#g2-115' y='140.503'/>
-<use x='247.636' xlink:href='#g2-98' y='140.503'/>
-<use x='252.244' xlink:href='#g2-101' y='140.503'/>
-<use x='256.008' xlink:href='#g2-116' y='140.503'/>
-<use x='259.066' xlink:href='#g2-116' y='140.503'/>
-<use x='262.124' xlink:href='#g2-101' y='140.503'/>
-<use x='265.887' xlink:href='#g2-114' y='140.503'/>
-<use x='268.779' xlink:href='#g2-41' y='140.503'/>
-</g>
-<path d='M136.149 231.446H402.137V214.453H136.149Z' fill='#ffffff'/>
-<path d='M136.149 231.446H402.137V214.453H136.149Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<path d='M139.336 224.941H142.324V216.972H139.336ZM145.313 224.941H148.301V218.964H145.313Z' fill='#f0e0f0'/>
-<path d='M139.336 224.941H142.324V216.972H139.336ZM145.313 224.941H148.301V218.964H145.313Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -33.522 84.43)'>
-<use x='185.011' xlink:href='#g2-109' y='140.503'/>
-<use x='191.736' xlink:href='#g2-105' y='140.503'/>
-</g>
-<path d='M163.422 224.941H166.41V216.973H163.422ZM169.398 224.941H172.391V218.965H169.398Z' fill='#e1c2e1'/>
-<path d='M163.422 224.941H166.41V216.972H163.422ZM169.398 224.941H172.391V218.964H169.398Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.56 83.976)'>
-<use x='208.137' xlink:href='#g2-116' y='140.503'/>
-<use x='211.195' xlink:href='#g2-99' y='140.503'/>
-</g>
-<path d='M185.586 224.941H188.574V216.973H185.586ZM191.563 224.941H194.555V218.965H191.563Z' fill='#d1a3d1'/>
-<path d='M185.586 224.941H188.574V216.972H185.586ZM191.563 224.941H194.555V218.964H191.563Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.159 84.43)'>
-<use x='229.9' xlink:href='#g2-106' y='140.503'/>
-<use x='232.155' xlink:href='#g2-101' y='140.503'/>
-</g>
-<path d='M206.949 224.941H209.938V216.973H206.949ZM212.926 224.941H215.914V218.965H212.926Z' fill='#c285c2'/>
-<path d='M206.949 224.941H209.938V216.972H206.949ZM212.926 224.941H215.914V218.964H212.926Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.958 83.47)'>
-<use x='252.061' xlink:href='#g2-115' y='140.503'/>
-<use x='255.307' xlink:href='#g2-110' y='140.503'/>
-</g>
-<path d='M229.91 224.941H232.898V216.973H229.91ZM235.887 224.941H238.875V218.965H235.887Z' fill='#b366b3'/>
-<path d='M229.91 224.941H232.898V216.972H229.91ZM235.887 224.941H238.875V218.964H235.887Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -32.781 83.47)'>
-<use x='274.845' xlink:href='#g2-114' y='140.503'/>
-<use x='277.737' xlink:href='#g2-112' y='140.503'/>
-</g>
-<path d='M252.516 224.941H255.504V216.973H252.516ZM258.496 224.941H261.484V218.965H258.496Z' fill='#a447a4'/>
-<path d='M252.516 224.941H255.504V216.972H252.516ZM258.496 224.941H261.484V218.964H258.496Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -39.001 84.467)'>
-<use x='303.672' xlink:href='#g2-104' y='140.503'/>
-<use x='308.045' xlink:href='#g2-111' y='140.503'/>
-<use x='312.279' xlink:href='#g2-97' y='140.503'/>
-<use x='316.112' xlink:href='#g2-114' y='140.503'/>
-<use x='319.004' xlink:href='#g2-100' y='140.503'/>
-</g>
-<path d='M287.563 224.941H290.551V216.973H287.563ZM293.543 224.941H296.531V218.965H293.543Z' fill='#942994'/>
-<path d='M287.563 224.941H290.551V216.972H287.563ZM293.543 224.941H296.531V218.964H293.543Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -37.472 84.467)'>
-<use x='337.19' xlink:href='#g2-103' y='140.503'/>
-<use x='341.424' xlink:href='#g2-108' y='140.503'/>
-<use x='343.444' xlink:href='#g2-105' y='140.503'/>
-<use x='345.464' xlink:href='#g2-98' y='140.503'/>
-<use x='350.072' xlink:href='#g2-99' y='140.503'/>
-</g>
-<path d='M319.551 224.941H322.539V216.973H319.551ZM325.527 224.941H328.52V218.965H325.527Z' fill='#850a85'/>
-<path d='M319.551 224.941H322.539V216.972H319.551ZM325.527 224.941H328.52V218.964H325.527Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.051 84.467)'>
-<use x='366.757' xlink:href='#g2-116' y='140.503'/>
-<use x='369.815' xlink:href='#g2-98' y='140.503'/>
-<use x='374.187' xlink:href='#g2-98' y='140.503'/>
-</g>
-<path d='M346.699 224.941H349.688V216.973H346.699ZM352.676 224.941H355.664V218.965H352.676Z' fill='#760076'/>
-<path d='M346.699 224.941H349.688V216.972H346.699ZM352.676 224.941H355.664V218.964H352.676Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -34.135 83.47)'>
-<use x='392.986' xlink:href='#g2-115' y='140.503'/>
-<use x='396.233' xlink:href='#g2-109' y='140.503'/>
-</g>
-<path d='M372.012 224.941H375V216.973H372.012ZM377.988 224.941H380.977V218.965H377.988Z' fill='#670067'/>
-<path d='M372.012 224.941H375V216.972H372.012ZM377.988 224.941H380.977V218.964H377.988Z' fill='none' stroke='#000000' stroke-miterlimit='10' stroke-width='0.399'/>
-<g transform='matrix(1 0 0 1 -35.145 84.43)'>
-<use x='419.31' xlink:href='#g2-115' y='140.503'/>
-<use x='422.556' xlink:href='#g2-109' y='140.503'/>
-<use x='429.281' xlink:href='#g2-105' y='140.503'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-amd5950x-2021-01-30-a.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-amd5950x-2021-01-30-a.svg
deleted file mode 100644
index 86a97bf..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-amd5950x-2021-01-30-a.svg
+++ /dev/null
@@ -1,952 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.9.1 -->
-<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='381.629pt' height='170.383pt' viewBox='52.934 54.994 381.629 170.383'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip1'>
-<path d='M82.148 209.23H434.164V83.984H82.148Z'/>
-</clipPath>
-<use id='g3-40' xlink:href='#g0-40' transform='scale(1.143)'/>
-<use id='g3-41' xlink:href='#g0-41' transform='scale(1.143)'/>
-<use id='g3-78' xlink:href='#g0-78' transform='scale(1.143)'/>
-<use id='g3-97' xlink:href='#g0-97' transform='scale(1.143)'/>
-<use id='g3-98' xlink:href='#g0-98' transform='scale(1.143)'/>
-<use id='g3-99' xlink:href='#g0-99' transform='scale(1.143)'/>
-<use id='g3-100' xlink:href='#g0-100' transform='scale(1.143)'/>
-<use id='g3-101' xlink:href='#g0-101' transform='scale(1.143)'/>
-<use id='g3-102' xlink:href='#g0-102' transform='scale(1.143)'/>
-<use id='g3-105' xlink:href='#g0-105' transform='scale(1.143)'/>
-<use id='g3-108' xlink:href='#g0-108' transform='scale(1.143)'/>
-<use id='g3-109' xlink:href='#g0-109' transform='scale(1.143)'/>
-<use id='g3-110' xlink:href='#g0-110' transform='scale(1.143)'/>
-<use id='g3-111' xlink:href='#g0-111' transform='scale(1.143)'/>
-<use id='g3-112' xlink:href='#g0-112' transform='scale(1.143)'/>
-<use id='g3-114' xlink:href='#g0-114' transform='scale(1.143)'/>
-<use id='g3-115' xlink:href='#g0-115' transform='scale(1.143)'/>
-<use id='g3-116' xlink:href='#g0-116' transform='scale(1.143)'/>
-<use id='g3-119' xlink:href='#g0-119' transform='scale(1.143)'/>
-<use id='g2-46' xlink:href='#g0-46' transform='scale(.714)'/>
-<use id='g2-48' xlink:href='#g0-48' transform='scale(.714)'/>
-<use id='g2-49' xlink:href='#g0-49' transform='scale(.714)'/>
-<use id='g2-50' xlink:href='#g0-50' transform='scale(.714)'/>
-<use id='g2-51' xlink:href='#g0-51' transform='scale(.714)'/>
-<use id='g2-52' xlink:href='#g0-52' transform='scale(.714)'/>
-<use id='g2-53' xlink:href='#g0-53' transform='scale(.714)'/>
-<use id='g2-54' xlink:href='#g0-54' transform='scale(.714)'/>
-<use id='g2-55' xlink:href='#g0-55' transform='scale(.714)'/>
-<use id='g2-56' xlink:href='#g0-56' transform='scale(.714)'/>
-<use id='g2-57' xlink:href='#g0-57' transform='scale(.714)'/>
-<use id='g2-120' xlink:href='#g0-120' transform='scale(.714)'/>
-<path id='g4-1' d='M1.445-1.245C1.445-1.41 1.305-1.549 1.141-1.549S.837-1.41 .837-1.245S.976-.941 1.141-.941S1.445-1.081 1.445-1.245Z'/>
-<path id='g1-82' d='M3.891-2.914C4.806-3.165 5.452-3.811 5.452-4.546C5.452-5.469 4.411-6.223 3.129-6.223H.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891-2.914ZM1.704-3.407V-5.694H3.022C4.062-5.694 4.671-5.192 4.671-4.546C4.671-3.963 4.125-3.407 3.022-3.407H1.704Z'/>
-<path id='g1-97' d='M3.694-2.591C3.694-3.479 3.04-4.133 2.152-4.133C1.569-4.133 1.139-3.981 .708-3.739L.762-3.102C1.21-3.434 1.65-3.569 2.143-3.569C2.645-3.569 2.95-3.165 2.95-2.582V-2.206C1.408-2.17 .395-1.766 .395-1.04C.395-.619 .672 .099 1.453 .099C1.632 .099 2.412 .081 2.977-.341V0H3.694V-2.591ZM2.95-1.255C2.95-1.067 2.95-.843 2.627-.655C2.403-.52 2.107-.484 1.928-.484C1.47-.484 1.085-.699 1.085-1.058C1.085-1.695 2.833-1.722 2.95-1.722V-1.255Z'/>
-<path id='g1-101' d='M3.829-1.964C3.829-2.242 3.82-2.923 3.47-3.461C3.093-4.026 2.52-4.133 2.179-4.133C1.139-4.133 .314-3.174 .314-2.026C.314-.843 1.193 .099 2.313 .099C2.744 .099 3.264-.009 3.784-.341L3.73-.959C3.165-.556 2.636-.484 2.322-.484C1.578-.484 1.004-1.139 .977-1.964H3.829ZM1.031-2.493C1.175-3.067 1.614-3.551 2.179-3.551C2.511-3.551 3.12-3.398 3.291-2.493H1.031Z'/>
-<path id='g1-105' d='M1.524-6.133H.664V-5.272H1.524V-6.133ZM1.453-3.981H.735V0H1.453V-3.981Z'/>
-<path id='g1-108' d='M1.453-6.223H.735V0H1.453V-6.223Z'/>
-<path id='g1-109' d='M6.581-2.663C6.581-3.327 6.402-4.08 5.317-4.08C4.564-4.08 4.142-3.622 3.927-3.344C3.865-3.524 3.676-4.08 2.762-4.08C2.053-4.08 1.623-3.667 1.417-3.398V-4.035H.726V0H1.47V-2.188C1.47-2.78 1.704-3.497 2.385-3.497C3.282-3.497 3.282-2.86 3.282-2.6V0H4.026V-2.188C4.026-2.78 4.259-3.497 4.94-3.497C5.837-3.497 5.837-2.86 5.837-2.6V0H6.581V-2.663Z'/>
-<path id='g1-116' d='M1.623-3.425H2.914V-3.981H1.623V-5.12H.959V-3.981H.17V-3.425H.933V-1.13C.933-.601 1.049 .099 1.704 .099C2.098 .099 2.564 .018 3.067-.233L2.914-.798C2.681-.619 2.367-.511 2.089-.511C1.739-.511 1.623-.825 1.623-1.291V-3.425Z'/>
-<path id='g1-118' d='M4.116-3.981H3.407L2.699-2.161C2.52-1.695 2.188-.825 2.143-.493H2.125C2.107-.646 2.08-.816 1.587-2.107C1.318-2.833 .879-3.927 .861-3.981H.126L1.704 0H2.537L4.116-3.981Z'/>
-<path id='g0-40' d='M2.127-5.23C2.008-5.23 1.995-5.23 1.911-5.154C1.032-4.387 .586-3.145 .586-1.743C.586-.425 .983 .844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 .063C1.276-.481 1.193-1.053 1.193-1.743C1.193-4.156 2.322-5.112 2.462-5.23H2.127Z'/>
-<path id='g0-41' d='M.746 1.743C.865 1.743 .879 1.743 .962 1.667C1.841 .9 2.287-.342 2.287-1.743C2.287-3.062 1.89-4.331 .969-5.14C.879-5.23 .865-5.23 .746-5.23H.411C.432-5.216 1.109-4.638 1.43-3.55C1.597-3.006 1.681-2.434 1.681-1.743C1.681 .669 .551 1.625 .411 1.743H.746Z'/>
-<path id='g0-46' d='M1.339-.628H.711V0H1.339V-.628Z'/>
-<path id='g0-48' d='M3.403-2.267C3.403-2.601 3.403-3.417 3.075-3.989C2.72-4.617 2.183-4.721 1.848-4.721C1.534-4.721 .99-4.624 .642-4.024C.307-3.466 .293-2.706 .293-2.267C.293-1.75 .321-1.116 .614-.586C.921-.021 1.437 .146 1.848 .146C2.545 .146 2.929-.258 3.138-.697C3.382-1.193 3.403-1.834 3.403-2.267ZM1.848-.314C1.555-.314 1.22-.481 1.046-.983C.907-1.409 .9-1.848 .9-2.357C.9-2.999 .9-4.261 1.848-4.261S2.797-2.999 2.797-2.357C2.797-1.897 2.797-1.374 2.629-.928C2.434-.425 2.078-.314 1.848-.314Z'/>
-<path id='g0-49' d='M2.239-4.721H2.085C1.632-4.303 1.06-4.275 .642-4.261V-3.822C.914-3.829 1.262-3.843 1.611-3.982V-.439H.683V0H3.166V-.439H2.239V-4.721Z'/>
-<path id='g0-50' d='M1.974-.537C1.89-.537 1.806-.53 1.723-.53H.928L2.008-1.485C2.134-1.597 2.476-1.855 2.608-1.967C2.915-2.246 3.327-2.608 3.327-3.215C3.327-4.003 2.741-4.721 1.743-4.721C1.004-4.721 .544-4.324 .307-3.612L.635-3.201C.795-3.787 1.039-4.24 1.646-4.24C2.232-4.24 2.678-3.829 2.678-3.201C2.678-2.622 2.336-2.294 1.918-1.897C1.778-1.757 1.402-1.444 1.255-1.304C1.053-1.123 .572-.656 .37-.481V0H3.327V-.537H1.974Z'/>
-<path id='g0-51' d='M.697-3.578C.983-4.135 1.485-4.289 1.82-4.289C2.232-4.289 2.538-4.052 2.538-3.654C2.538-3.285 2.287-2.831 1.757-2.741C1.723-2.734 1.695-2.734 1.234-2.699V-2.239H1.778C2.441-2.239 2.685-1.716 2.685-1.276C2.685-.732 2.35-.314 1.806-.314C1.311-.314 .746-.551 .398-.997L.307-.544C.711-.091 1.276 .146 1.82 .146C2.734 .146 3.389-.537 3.389-1.269C3.389-1.841 2.929-2.301 2.378-2.462C2.908-2.734 3.18-3.201 3.18-3.654C3.18-4.247 2.573-4.721 1.827-4.721C1.213-4.721 .704-4.4 .411-3.982L.697-3.578Z'/>
-<path id='g0-52' d='M2.762-1.165H3.487V-1.625H2.762V-4.575H2.071L.209-1.625V-1.165H2.162V0H2.762V-1.165ZM.802-1.625C1.011-1.953 2.211-3.815 2.211-4.233V-1.625H.802Z'/>
-<path id='g0-53' d='M1.144-4.094H3.075V-4.575H.586V-1.967H1.095C1.262-2.343 1.59-2.511 1.904-2.511C2.19-2.511 2.622-2.315 2.622-1.43C2.622-.516 2.043-.314 1.688-.314C1.227-.314 .781-.558 .544-.955L.279-.537C.621-.112 1.137 .146 1.688 .146C2.608 .146 3.327-.565 3.327-1.416C3.327-2.28 2.685-2.971 1.918-2.971C1.618-2.971 1.353-2.866 1.144-2.692V-4.094Z'/>
-<path id='g0-54' d='M3.062-4.582C2.685-4.721 2.42-4.721 2.287-4.721C1.227-4.721 .307-3.724 .307-2.253C.307-.363 1.158 .146 1.862 .146C2.427 .146 2.72-.119 2.936-.342C3.382-.816 3.389-1.311 3.389-1.555C3.389-2.469 2.894-3.229 2.218-3.229C1.534-3.229 1.165-2.873 .962-2.671C1.053-3.626 1.541-4.289 2.294-4.289C2.434-4.289 2.713-4.275 3.062-4.142V-4.582ZM.969-1.534C.969-1.576 .969-1.681 .976-1.716C.976-2.19 1.276-2.769 1.897-2.769C2.748-2.769 2.748-1.792 2.748-1.555C2.748-1.29 2.748-.997 2.559-.704C2.392-.453 2.183-.314 1.862-.314C1.123-.314 1.004-1.227 .969-1.534Z'/>
-<path id='g0-55' d='M1.723-4.038C1.806-4.038 1.89-4.045 1.974-4.045H2.852C1.792-3.006 1.116-1.548 1.116 .07H1.771C1.771-1.967 2.762-3.431 3.389-4.087V-4.575H.307V-4.038H1.723Z'/>
-<path id='g0-56' d='M2.385-2.469C2.845-2.615 3.285-2.985 3.285-3.501C3.285-4.135 2.678-4.721 1.848-4.721S.411-4.135 .411-3.501C.411-2.978 .865-2.608 1.311-2.469C.697-2.28 .307-1.806 .307-1.269C.307-.523 .969 .146 1.848 .146S3.389-.523 3.389-1.269C3.389-1.806 2.992-2.28 2.385-2.469ZM1.848-2.699C1.353-2.699 .948-2.985 .948-3.494C.948-3.94 1.262-4.289 1.848-4.289C2.427-4.289 2.748-3.94 2.748-3.494C2.748-2.999 2.357-2.699 1.848-2.699ZM1.848-.314C1.367-.314 .941-.621 .941-1.276C.941-1.904 1.346-2.239 1.848-2.239S2.755-1.897 2.755-1.276C2.755-.621 2.322-.314 1.848-.314Z'/>
-<path id='g0-57' d='M.537-.174C.879 .077 1.193 .146 1.52 .146C2.497 .146 3.389-.837 3.389-2.336C3.389-4.24 2.545-4.721 1.876-4.721C1.255-4.721 .969-4.428 .767-4.226C.321-3.773 .307-3.292 .307-3.02C.307-2.12 .795-1.346 1.478-1.346C2.267-1.346 2.699-1.869 2.734-1.911C2.636-.802 2.092-.314 1.52-.314C1.158-.314 .934-.446 .774-.579L.537-.174ZM2.713-3.027C2.72-2.985 2.72-2.915 2.72-2.873C2.72-2.357 2.406-1.806 1.799-1.806C1.534-1.806 1.325-1.883 1.144-2.169C.962-2.441 .948-2.706 .948-3.02C.948-3.292 .948-3.605 1.165-3.912C1.311-4.122 1.52-4.289 1.869-4.289C2.545-4.289 2.692-3.473 2.713-3.027Z'/>
-<path id='g0-78' d='M1.646-4.84H.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-.551H3.933L1.646-4.84Z'/>
-<path id='g0-97' d='M2.971-2.008C2.971-2.72 2.427-3.201 1.736-3.201C1.297-3.201 .962-3.11 .572-2.901L.614-2.392C.844-2.545 1.186-2.755 1.736-2.755C2.043-2.755 2.364-2.525 2.364-2.001V-1.723C1.332-1.688 .314-1.471 .314-.823C.314-.474 .551 .07 1.165 .07C1.465 .07 2.015 .007 2.385-.265V0H2.971V-2.008ZM2.364-.99C2.364-.851 2.364-.669 2.12-.523C1.897-.398 1.625-.391 1.548-.391C1.165-.391 .872-.565 .872-.83C.872-1.276 2.05-1.318 2.364-1.332V-.99Z'/>
-<path id='g0-98' d='M1.179-4.84H.593V0H1.2V-.328C1.353-.195 1.688 .07 2.197 .07C2.957 .07 3.571-.642 3.571-1.555C3.571-2.399 3.089-3.166 2.392-3.166C1.953-3.166 1.527-3.027 1.179-2.769V-4.84ZM1.2-2.197C1.2-2.308 1.2-2.392 1.444-2.552C1.548-2.615 1.736-2.706 1.974-2.706C2.441-2.706 2.964-2.392 2.964-1.555C2.964-.704 2.385-.391 1.897-.391C1.639-.391 1.395-.509 1.2-.823V-2.197Z'/>
-<path id='g0-99' d='M3.034-.76C2.685-.537 2.308-.411 1.876-.411C1.234-.411 .858-.928 .858-1.555C.858-2.092 1.137-2.72 1.897-2.72C2.371-2.72 2.594-2.622 2.95-2.399L3.041-2.901C2.622-3.11 2.441-3.201 1.897-3.201C.851-3.201 .251-2.357 .251-1.548C.251-.697 .921 .07 1.869 .07C2.357 .07 2.776-.077 3.075-.251L3.034-.76Z'/>
-<path id='g0-100' d='M3.229-4.84H2.643V-2.797C2.197-3.124 1.743-3.166 1.541-3.166C.809-3.166 .251-2.434 .251-1.548S.802 .07 1.52 .07C1.953 .07 2.357-.126 2.622-.363V0H3.229V-4.84ZM2.622-.865C2.448-.579 2.183-.391 1.848-.391C1.36-.391 .858-.732 .858-1.541C.858-2.413 1.451-2.706 1.925-2.706C2.204-2.706 2.441-2.587 2.622-2.35V-.865Z'/>
-<path id='g0-101' d='M2.999-.76C2.608-.481 2.169-.391 1.869-.391C1.262-.391 .802-.886 .781-1.527H3.068C3.068-1.848 3.034-2.315 2.762-2.713C2.511-3.068 2.092-3.201 1.75-3.201C.9-3.201 .244-2.455 .244-1.569C.244-.676 .941 .07 1.862 .07C2.267 .07 2.685-.049 3.041-.265L2.999-.76ZM.83-1.946C.99-2.504 1.402-2.741 1.75-2.741C2.057-2.741 2.511-2.594 2.643-1.946H.83Z'/>
-<path id='g0-102' d='M1.325-2.657H2.12V-3.096H1.304V-3.898C1.304-4.38 1.743-4.449 1.974-4.449C2.12-4.449 2.308-4.428 2.566-4.331V-4.84C2.385-4.882 2.169-4.91 1.981-4.91C1.262-4.91 .739-4.394 .739-3.703V-3.096H.202V-2.657H.739V0H1.325V-2.657Z'/>
-<path id='g0-105' d='M1.227-4.784H.523V-4.08H1.227V-4.784ZM1.172-3.096H.586V0H1.172V-3.096Z'/>
-<path id='g0-108' d='M1.172-4.84H.586V0H1.172V-4.84Z'/>
-<path id='g0-109' d='M5.3-2.064C5.3-2.608 5.14-3.166 4.282-3.166C3.696-3.166 3.333-2.824 3.166-2.601C3.096-2.79 2.922-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-1.695C3.243-2.155 3.438-2.706 3.975-2.706C4.693-2.706 4.693-2.218 4.693-2.015V0H5.3V-2.064Z'/>
-<path id='g0-110' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-111' d='M3.487-1.527C3.487-2.448 2.755-3.201 1.848-3.201S.209-2.441 .209-1.527C.209-.642 .948 .07 1.848 .07C2.755 .07 3.487-.642 3.487-1.527ZM1.848-.411C1.297-.411 .816-.816 .816-1.604S1.332-2.741 1.848-2.741C2.371-2.741 2.88-2.378 2.88-1.604C2.88-.809 2.385-.411 1.848-.411Z'/>
-<path id='g0-112' d='M1.2-.328C1.569 .007 1.967 .07 2.204 .07C2.943 .07 3.571-.635 3.571-1.555C3.571-2.392 3.11-3.166 2.42-3.166C2.106-3.166 1.583-3.075 1.179-2.762V-3.096H.593V1.353H1.2V-.328ZM1.2-2.315C1.36-2.511 1.632-2.685 1.967-2.685C2.525-2.685 2.964-2.169 2.964-1.555C2.964-.865 2.441-.391 1.897-.391C1.792-.391 1.618-.404 1.437-.551C1.227-.711 1.2-.816 1.2-.948V-2.315Z'/>
-<path id='g0-114' d='M1.179-1.485C1.179-2.239 1.806-2.643 2.42-2.65V-3.166C1.834-3.159 1.409-2.873 1.13-2.504V-3.145H.593V0H1.179V-1.485Z'/>
-<path id='g0-115' d='M2.545-2.985C2.071-3.18 1.723-3.201 1.471-3.201C1.297-3.201 .244-3.201 .244-2.273C.244-1.946 .425-1.764 .516-1.681C.76-1.437 1.053-1.381 1.423-1.311C1.75-1.248 2.127-1.179 2.127-.844C2.127-.404 1.548-.404 1.451-.404C1.004-.404 .586-.565 .307-.76L.209-.237C.446-.119 .872 .07 1.451 .07C1.764 .07 2.071 .021 2.329-.167C2.587-.363 2.671-.669 2.671-.907C2.671-1.032 2.657-1.304 2.364-1.569C2.106-1.799 1.855-1.848 1.52-1.911C1.109-1.988 .788-2.05 .788-2.357C.788-2.755 1.297-2.755 1.402-2.755C1.799-2.755 2.106-2.671 2.455-2.49L2.545-2.985Z'/>
-<path id='g0-116' d='M1.311-2.657H2.343V-3.096H1.311V-3.982H.774V-3.096H.139V-2.657H.753V-.893C.753-.425 .872 .07 1.374 .07S2.26-.091 2.469-.188L2.35-.635C2.12-.467 1.876-.411 1.681-.411C1.388-.411 1.311-.697 1.311-1.018V-2.657Z'/>
-<path id='g0-119' d='M4.951-3.096H4.407C4.345-2.901 3.954-1.723 3.738-.997C3.682-.795 3.612-.572 3.592-.411H3.585C3.543-.697 3.299-1.451 3.285-1.499L2.769-3.096H2.239C2.036-2.497 1.513-.934 1.458-.425H1.451C1.395-.921 .879-2.462 .767-2.797C.711-2.964 .711-2.978 .676-3.096H.105L1.123 0H1.709C1.716-.028 1.904-.579 2.148-1.353C2.253-1.695 2.462-2.364 2.497-2.671L2.504-2.678C2.518-2.532 2.559-2.378 2.608-2.204S2.706-1.841 2.755-1.681L3.292 0H3.933L4.951-3.096Z'/>
-<path id='g0-120' d='M1.932-1.597L3.285-3.096H2.671L1.681-1.953L.669-3.096H.042L1.437-1.597L0 0H.621L1.681-1.311L2.783 0H3.41L1.932-1.597Z'/>
-</defs>
-<g id='page1'>
-<path d='M140.82 218.086V209.23M199.488 218.086V209.23M258.156 218.086V209.23M316.824 218.086V209.23M375.496 218.086V209.23M140.82 75.129V83.984M199.488 75.129V83.984M258.156 75.129V83.984M316.824 75.129V83.984M375.496 75.129V83.984' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M111.484 213.484V209.23M170.152 213.484V209.23M228.824 213.484V209.23M287.492 213.484V209.23M346.16 213.484V209.23M404.828 213.484V209.23M111.484 79.734V83.984M170.152 79.734V83.984M228.824 79.734V83.984M287.492 79.734V83.984M346.16 79.734V83.984M404.828 79.734V83.984' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M82.148 209.23H86.402M82.148 177.918H86.402M82.148 146.609H86.402M82.148 115.297H86.402M82.148 83.984H86.402M434.164 209.23H429.91M434.164 177.918H429.91M434.164 146.609H429.91M434.164 115.297H429.91M434.164 83.984H429.91' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M82.148 209.23V83.984H434.164V209.23H82.148Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -11.54 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-99'/>
-<use x='118.25' y='188.674' xlink:href='#g3-102'/>
-<use x='120.838' y='188.674' xlink:href='#g3-114'/>
-<use x='123.73' y='188.674' xlink:href='#g3-97'/>
-<use x='127.798' y='188.674' xlink:href='#g3-99'/>
-</g>
-<g transform='matrix(1 0 0 1 45.565 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-108'/>
-<use x='116.507' y='188.674' xlink:href='#g3-101'/>
-<use x='120.271' y='188.674' xlink:href='#g3-97'/>
-<use x='124.339' y='188.674' xlink:href='#g3-110'/>
-<use x='128.711' y='188.674' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 106.188 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-114'/>
-<use x='117.379' y='188.674' xlink:href='#g3-101'/>
-<use x='121.142' y='188.674' xlink:href='#g3-100'/>
-<use x='125.515' y='188.674' xlink:href='#g3-105'/>
-<use x='127.535' y='188.674' xlink:href='#g3-115'/>
-</g>
-<g transform='matrix(1 0 0 1 159.716 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-108'/>
-<use x='116.507' y='188.674' xlink:href='#g3-97'/>
-<use x='120.34' y='188.674' xlink:href='#g3-114'/>
-<use x='123.232' y='188.674' xlink:href='#g3-115'/>
-<use x='126.478' y='188.674' xlink:href='#g3-111'/>
-<use x='130.712' y='188.674' xlink:href='#g3-110'/>
-<use x='135.085' y='188.674' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 215.596 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-109'/>
-<use x='121.211' y='188.674' xlink:href='#g3-115'/>
-<use x='124.458' y='188.674' xlink:href='#g3-116'/>
-<use x='127.516' y='188.674' xlink:href='#g3-114'/>
-<use x='130.408' y='188.674' xlink:href='#g3-101'/>
-<use x='134.171' y='188.674' xlink:href='#g3-115'/>
-<use x='137.418' y='188.674' xlink:href='#g3-115'/>
-<use x='140.664' y='188.674' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 277.158 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-114'/>
-<use x='117.379' y='188.674' xlink:href='#g3-112'/>
-<use x='121.751' y='188.674' xlink:href='#g3-116'/>
-<use x='124.809' y='188.674' xlink:href='#g3-101'/>
-<use x='128.573' y='188.674' xlink:href='#g3-115'/>
-<use x='131.819' y='188.674' xlink:href='#g3-116'/>
-<use x='134.877' y='188.674' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 22.192)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -9.12)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -40.431)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.743)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -103.054)'>
-<use x='114.487' y='188.674' xlink:href='#g2-50'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-120'/>
-</g>
-<path d='M82.148 146.609H434.164' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M86.328 209.23H89.566V146.609H86.328ZM144.996 209.23H148.234V146.609H144.996ZM203.668 209.23H206.902V146.609H203.668ZM262.336 209.23H265.574V146.609H262.336ZM321.004 209.23H324.242V146.609H321.004ZM379.672 209.23H382.91V146.609H379.672Z' fill='#933' clip-path='url(#clip1)'/>
-<path d='M86.328 209.23H89.566V146.609H86.328ZM144.996 209.23H148.234V146.609H144.996ZM203.668 209.23H206.902V146.609H203.668ZM262.336 209.23H265.574V146.609H262.336ZM321.004 209.23H324.242V146.609H321.004ZM379.672 209.23H382.91V146.609H379.672Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M87.949 146.609V146.484' fill='#933' clip-path='url(#clip1)'/>
-<path d='M87.949 146.609V146.484' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M85.953 146.484H89.938' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M87.949 146.609V146.734' fill='#933' clip-path='url(#clip1)'/>
-<path d='M87.949 146.609V146.734' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M89.941 146.734H85.957' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M146.617 146.609V146.359' fill='#933' clip-path='url(#clip1)'/>
-<path d='M146.617 146.609V146.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M144.625 146.36H148.609' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M146.617 146.609V146.859' fill='#933' clip-path='url(#clip1)'/>
-<path d='M146.617 146.609V146.859' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M148.61 146.86H144.625' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M205.285 146.609V146.297' fill='#933' clip-path='url(#clip1)'/>
-<path d='M205.285 146.609V146.297' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M203.293 146.297H207.277' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M205.285 146.609V146.922' fill='#933' clip-path='url(#clip1)'/>
-<path d='M205.285 146.609V146.922' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M207.278 146.922H203.293' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M263.953 146.609V146.422' fill='#933' clip-path='url(#clip1)'/>
-<path d='M263.953 146.609V146.422' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M261.961 146.422H265.945' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M263.953 146.609V146.797' fill='#933' clip-path='url(#clip1)'/>
-<path d='M263.953 146.609V146.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M265.949 146.797H261.961' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M322.625 146.609V146.168' fill='#933' clip-path='url(#clip1)'/>
-<path d='M322.625 146.609V146.168' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M320.629 146.168H324.617' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M322.625 146.609V147.047' fill='#933' clip-path='url(#clip1)'/>
-<path d='M322.625 146.609V147.047' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M324.617 147.046H320.633' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M381.293 146.609V145.168' fill='#933' clip-path='url(#clip1)'/>
-<path d='M381.293 146.609V145.168' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M379.301 145.168H383.285' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M381.293 146.609V148.047' fill='#933' clip-path='url(#clip1)'/>
-<path d='M381.293 146.609V148.047' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M383.285 148.046H379.301' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M91.559 209.23H94.797V147.172H91.559ZM150.227 209.23H153.465V145.48H150.227ZM208.899 209.23H212.133V146.797H208.899ZM267.567 209.23H270.805V149.051H267.567ZM326.234 209.23H329.473V146.359H326.234ZM384.902 209.23H388.141V132.707H384.902Z' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M91.559 209.23H94.797V147.172H91.559ZM150.227 209.23H153.465V145.48H150.227ZM208.899 209.23H212.133V146.797H208.899ZM267.567 209.23H270.805V149.051H267.567ZM326.234 209.23H329.473V146.359H326.234ZM384.902 209.23H388.141V132.707H384.902Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M93.18 147.172V146.922' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M93.18 147.172V146.922' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M91.184 146.922H95.168' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M93.18 147.172V147.422' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M93.18 147.172V147.422' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M95.172 147.422H91.187' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M151.848 145.48V145.23' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M151.848 145.48V145.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M149.855 145.23H153.84' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M151.848 145.48V145.73' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M151.848 145.48V145.73' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M153.84 145.73H149.855' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M210.516 146.797V146.484' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M210.516 146.797V146.484' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M208.523 146.484H212.507' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M210.516 146.797V147.109' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M210.516 146.797V147.109' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M212.508 147.109H208.523' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M269.184 149.051V148.426' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M269.184 149.051V148.426' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M267.191 148.426H271.175' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M269.184 149.051V149.676' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M269.184 149.051V149.676' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M271.179 149.676H267.191' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M327.856 146.359V144.164' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M327.856 146.359V144.164' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M325.859 144.164H329.847' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M327.856 146.359V148.551' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M327.856 146.359V148.551' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M329.847 148.55H325.863' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M386.524 132.707V129.137' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M386.524 132.707V129.137' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M384.531 129.136H388.515' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M386.524 132.707V136.273' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M386.524 132.707V136.273' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M388.515 136.273H384.531' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M96.789 209.23H100.027V146.359H96.789ZM155.457 209.23H158.695V138.781H155.457ZM214.129 209.23H217.363V142.476H214.129ZM272.797 209.23H276.035V135.086H272.797ZM331.465 209.23H334.703V146.922H331.465ZM390.133 209.23H393.371V83.984H390.133Z' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M96.789 209.23H100.027V146.359H96.789ZM155.457 209.23H158.695V138.781H155.457ZM214.129 209.23H217.363V142.476H214.129ZM272.797 209.23H276.035V135.086H272.797ZM331.465 209.23H334.703V146.922H331.465ZM390.133 209.23H393.371V83.984H390.133Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M98.41 146.359V146.043' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M98.41 146.359V146.043' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M96.414 146.043H100.399' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M98.41 146.359V146.672' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M98.41 146.359V146.672' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M100.402 146.672H96.418' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M157.078 138.781V138.469' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M157.078 138.781V138.469' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M155.086 138.469H159.071' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M157.078 138.781V139.094' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M157.078 138.781V139.094' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M159.071 139.093H155.086' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M215.746 142.476V142.289' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M215.746 142.476V142.289' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M213.754 142.289H217.738' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M215.746 142.476V142.664' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M215.746 142.476V142.664' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M217.739 142.664H213.754' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M274.414 135.086V132.957' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M274.414 135.086V132.957' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M272.422 132.957H276.406' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M274.414 135.086V137.215' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M274.414 135.086V137.215' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M276.41 137.215H272.422' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M333.086 146.922V145.73' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M333.086 146.922V145.73' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M331.09 145.73H335.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M333.086 146.922V148.109' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M333.086 146.922V148.109' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M335.078 148.109H331.094' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M391.754 83.984' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M389.762 83.984H393.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M391.754 83.984' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M389.762 83.984H393.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M102.02 209.23H105.258V142.223H102.02ZM160.688 209.23H163.926V143.851H160.688ZM219.359 209.23H222.594V137.277H219.359ZM278.027 209.23H281.266V131.328H278.027ZM336.695 209.23H339.934V120.934H336.695ZM395.363 209.23H398.602V83.984H395.363Z' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M102.02 209.23H105.258V142.223H102.02ZM160.688 209.23H163.926V143.851H160.688ZM219.359 209.23H222.594V137.277H219.359ZM278.027 209.23H281.266V131.328H278.027ZM336.695 209.23H339.934V120.934H336.695ZM395.363 209.23H398.602V83.984H395.363Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M103.641 142.223V142.098' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M103.641 142.223V142.098' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M101.644 142.097H105.629' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M103.641 142.223V142.351' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M103.641 142.223V142.351' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M105.633 142.352H101.648' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M162.309 143.851V143.101' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M162.309 143.851V143.101' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M160.316 143.101H164.301' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M162.309 143.851V144.605' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M162.309 143.851V144.605' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M164.301 144.605H160.316' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M220.977 137.277V136.902' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M220.977 137.277V136.902' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M218.984 136.903H222.969' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M220.977 137.277V137.652' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M220.977 137.277V137.652' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M222.969 137.652H218.984' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M279.645 131.328V130.516' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M279.645 131.328V130.516' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M277.652 130.516H281.636' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M279.645 131.328V132.141' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M279.645 131.328V132.141' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M281.64 132.14H277.652' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M338.317 120.934V120.305' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M338.317 120.934V120.305' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M336.32 120.304H340.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M338.317 120.934V121.559' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M338.317 120.934V121.559' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M340.308 121.559H336.324' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M396.984 83.984' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M394.992 83.984H398.976' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M396.984 83.984' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M394.992 83.984H398.976' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M107.25 209.23H110.488V120.367H107.25ZM165.918 209.23H169.156V137.777H165.918ZM224.59 209.23H227.824V111.789H224.59ZM283.258 209.23H286.496V92.187H283.258ZM341.926 209.23H345.164V134.019H341.926ZM400.594 209.23H403.832V118.051H400.594Z' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M107.25 209.23H110.488V120.367H107.25ZM165.918 209.23H169.156V137.777H165.918ZM224.59 209.23H227.824V111.789H224.59ZM283.258 209.23H286.496V92.187H283.258ZM341.926 209.23H345.164V134.019H341.926ZM400.594 209.23H403.832V118.051H400.594Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M108.871 120.367V119.992' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M108.871 120.367V119.992' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M106.875 119.992H110.86' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M108.871 120.367V120.746' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M108.871 120.367V120.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M110.864 120.746H106.879' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M167.539 137.777V137.527' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M167.539 137.777V137.527' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M165.547 137.528H169.532' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M167.539 137.777V138.027' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M167.539 137.777V138.027' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M169.532 138.028H165.547' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M226.207 111.789V111.726' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M226.207 111.789V111.726' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M224.215 111.726H228.2' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M226.207 111.789V111.851' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M226.207 111.789V111.851' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M228.2 111.851H224.215' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M284.875 92.187V90.308' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M284.875 92.187V90.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M282.883 90.309H286.868' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M284.875 92.187V94.066' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M284.875 92.187V94.066' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M286.868 94.066H282.883' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M343.547 134.019V132.894' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M343.547 134.019V132.894' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M341.551 132.895H345.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M343.547 134.019V135.148' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M343.547 134.019V135.148' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M345.539 135.148H341.555' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M402.215 118.051V112.289' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M402.215 118.051V112.289' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M400.223 112.289H404.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M402.215 118.051V123.812' fill='#bf80bf' clip-path='url(#clip1)'/>
-<path d='M402.215 118.051V123.812' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M404.207 123.812H400.223' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M112.481 209.23H115.719V145.918H112.481ZM171.149 209.23H174.387V145.105H171.149ZM229.82 209.23H233.055V147.672H229.82ZM288.488 209.23H291.727V149.176H288.488ZM347.156 209.23H350.395V104.211H347.156ZM405.824 209.23H409.063V115.422H405.824Z' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M112.481 209.23H115.719V145.918H112.481ZM171.149 209.23H174.387V145.105H171.149ZM229.82 209.23H233.055V147.672H229.82ZM288.488 209.23H291.727V149.176H288.488ZM347.156 209.23H350.395V104.211H347.156ZM405.824 209.23H409.063V115.422H405.824Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M114.098 145.918V145.793' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M114.098 145.918V145.793' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M112.105 145.793H116.09' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M114.098 145.918V146.043' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M114.098 145.918V146.043' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M116.094 146.043H112.109' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M172.77 145.105V144.793' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M172.77 145.105V144.793' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M170.777 144.793H174.762' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M172.77 145.105V145.418' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M172.77 145.105V145.418' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M174.762 145.418H170.777' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M231.438 147.672V147.422' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M231.438 147.672V147.422' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M229.445 147.422H233.43' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M231.438 147.672V147.922' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M231.438 147.672V147.922' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M233.43 147.922H229.445' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M290.106 149.176V148.738' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M290.106 149.176V148.738' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M288.113 148.738H292.098' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M290.106 149.176V149.613' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M290.106 149.176V149.613' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M292.098 149.613H288.113' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M348.777 104.211V100.582' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M348.777 104.211V100.582' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M346.781 100.582H350.769' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M348.777 104.211V107.844' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M348.777 104.211V107.844' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M350.77 107.843H346.785' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M407.445 115.422V109.848' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M407.445 115.422V109.848' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M405.453 109.847H409.437' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M407.445 115.422V120.996' fill='#c96' clip-path='url(#clip1)'/>
-<path d='M407.445 115.422V120.996' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M409.437 120.996H405.453' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M117.711 209.23H120.949V143.226H117.711ZM176.379 209.23H179.617V132.266H176.379ZM235.051 209.23H238.285V132.644H235.051ZM293.719 209.23H296.957V110.539H293.719ZM352.387 209.23H355.625V83.984H352.387ZM411.055 209.23H414.293V83.984H411.055Z' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M117.711 209.23H120.949V143.226H117.711ZM176.379 209.23H179.617V132.266H176.379ZM235.051 209.23H238.285V132.644H235.051ZM293.719 209.23H296.957V110.539H293.719ZM352.387 209.23H355.625V83.984H352.387ZM411.055 209.23H414.293V83.984H411.055Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M119.328 143.226V142.914' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M119.328 143.226V142.914' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M117.336 142.914H121.321' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M119.328 143.226V143.539' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M119.328 143.226V143.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M121.325 143.539H117.34' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M178 132.266V131.641' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M178 132.266V131.641' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M176.008 131.64H179.993' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M178 132.266V132.894' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M178 132.266V132.894' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M179.993 132.895H176.008' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M236.668 132.644V132.078' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M236.668 132.644V132.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M234.676 132.079H238.661' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M236.668 132.644V133.207' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M236.668 132.644V133.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M238.66 133.207H234.675' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M295.336 110.539V109.785' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M295.336 110.539V109.785' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M293.344 109.785H297.329' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M295.336 110.539V111.289' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M295.336 110.539V111.289' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M297.328 111.289H293.343' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M354.008 83.984' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M352.012 83.984H356' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M354.008 83.984' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M352.012 83.984H356' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M412.676 83.984' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M410.684 83.984H414.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M412.676 83.984' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M410.684 83.984H414.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M122.941 209.23H126.18V136.59H122.941ZM181.609 209.23H184.848V120.242H181.609ZM240.281 209.23H243.516V140.785H240.281ZM298.949 209.23H302.188V83.984H298.949ZM357.617 209.23H360.856V87.117H357.617ZM416.285 209.23H419.524V83.984H416.285Z' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M122.941 209.23H126.18V136.59H122.941ZM181.609 209.23H184.848V120.242H181.609ZM240.281 209.23H243.516V140.785H240.281ZM298.949 209.23H302.188V83.984H298.949ZM357.617 209.23H360.856V87.117H357.617ZM416.285 209.23H419.524V83.984H416.285Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M124.559 136.59V136.465' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M124.559 136.59V136.465' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M122.566 136.465H126.551' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M124.559 136.59V136.715' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M124.559 136.59V136.715' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M126.555 136.715H122.57' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M183.231 120.242V119.305' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M183.231 120.242V119.305' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M181.238 119.304H185.223' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M183.231 120.242V121.184' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M183.231 120.242V121.184' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M185.223 121.183H181.238' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M241.899 140.785V140.41' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M241.899 140.785V140.41' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M239.906 140.41H243.891' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M241.899 140.785V141.16' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M241.899 140.785V141.16' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M243.891 141.16H239.906' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M300.567 83.984' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M298.574 83.984H302.559' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M300.567 83.984' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M298.574 83.984H302.559' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M359.238 87.117V85.363' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M359.238 87.117V85.363' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M357.242 85.363H361.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M359.238 87.117V88.871' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M359.238 87.117V88.871' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M361.231 88.871H357.246' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M417.906 83.984' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M415.914 83.984H419.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M417.906 83.984' fill='#bfbf80' clip-path='url(#clip1)'/>
-<path d='M415.914 83.984H419.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M128.172 209.23H131.41V141.285H128.172ZM186.84 209.23H190.078V131.266H186.84ZM245.512 209.23H248.746V139.781H245.512ZM304.18 209.23H307.418V99.328H304.18ZM362.848 209.23H366.086V105.34H362.848ZM421.516 209.23H424.754V83.984H421.516Z' fill='#399' clip-path='url(#clip1)'/>
-<path d='M128.172 209.23H131.41V141.285H128.172ZM186.84 209.23H190.078V131.266H186.84ZM245.512 209.23H248.746V139.781H245.512ZM304.18 209.23H307.418V99.328H304.18ZM362.848 209.23H366.086V105.34H362.848ZM421.516 209.23H424.754V83.984H421.516Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M129.789 141.285V141.098' fill='#399' clip-path='url(#clip1)'/>
-<path d='M129.789 141.285V141.098' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M127.797 141.097H131.782' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M129.789 141.285V141.473' fill='#399' clip-path='url(#clip1)'/>
-<path d='M129.789 141.285V141.473' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M131.785 141.473H127.8' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M188.461 131.266V130.891' fill='#399' clip-path='url(#clip1)'/>
-<path d='M188.461 131.266V130.891' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M186.469 130.891H190.454' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M188.461 131.266V131.641' fill='#399' clip-path='url(#clip1)'/>
-<path d='M188.461 131.266V131.641' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M190.453 131.64H186.468' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M247.129 139.781V139.594' fill='#399' clip-path='url(#clip1)'/>
-<path d='M247.129 139.781V139.594' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M245.137 139.593H249.122' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M247.129 139.781V139.969' fill='#399' clip-path='url(#clip1)'/>
-<path d='M247.129 139.781V139.969' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M249.121 139.969H245.136' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M305.797 99.328V98.828' fill='#399' clip-path='url(#clip1)'/>
-<path d='M305.797 99.328V98.828' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M303.804 98.828H307.789' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M305.797 99.328V99.828' fill='#399' clip-path='url(#clip1)'/>
-<path d='M305.797 99.328V99.828' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M307.789 99.828H303.804' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M364.469 105.34V103.586' fill='#399' clip-path='url(#clip1)'/>
-<path d='M364.469 105.34V103.586' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M362.473 103.586H366.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M364.469 105.34V107.094' fill='#399' clip-path='url(#clip1)'/>
-<path d='M364.469 105.34V107.094' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M366.461 107.094H362.476' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M423.137 83.984' fill='#399' clip-path='url(#clip1)'/>
-<path d='M421.144 83.984H425.128' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M423.137 83.984' fill='#399' clip-path='url(#clip1)'/>
-<path d='M421.144 83.984H425.128' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M133.402 209.23H136.641V138.656H133.402ZM192.07 209.23H195.309V138.531H192.07ZM250.742 209.23H253.977V143.914H250.742ZM309.41 209.23H312.649V123H309.41ZM368.078 209.23H371.317V141.285H368.078ZM426.746 209.23H429.984V83.984H426.746Z' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M133.402 209.23H136.641V138.656H133.402ZM192.07 209.23H195.309V138.531H192.07ZM250.742 209.23H253.977V143.914H250.742ZM309.41 209.23H312.649V123H309.41ZM368.078 209.23H371.317V141.285H368.078ZM426.746 209.23H429.984V83.984H426.746Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M135.02 138.656V138.531' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M135.02 138.656V138.531' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M133.027 138.531H137.012' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M135.02 138.656V138.781' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M135.02 138.656V138.781' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M137.016 138.781H133.031' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M193.692 138.531V138.215' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M193.692 138.531V138.215' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M191.699 138.215H195.684' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M193.692 138.531V138.844' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M193.692 138.531V138.844' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M195.684 138.844H191.699' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M252.359 143.914V143.539' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M252.359 143.914V143.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M250.367 143.539H254.352' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M252.359 143.914V144.293' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M252.359 143.914V144.293' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M254.352 144.293H250.367' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M311.027 123V122.75' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M311.027 123V122.75' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M309.035 122.75H313.02' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M311.027 123V123.25' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M311.027 123V123.25' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M313.02 123.25H309.035' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M369.699 141.285V140.41' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M369.699 141.285V140.41' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M367.703 140.41H371.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M369.699 141.285V142.16' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M369.699 141.285V142.16' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M371.692 142.16H367.707' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M428.367 83.984' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M426.375 83.984H430.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M428.367 83.984' fill='#d9b3b3' clip-path='url(#clip1)'/>
-<path d='M426.375 83.984H430.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<g transform='matrix(0 -1 1 0 -99.092 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -40.423 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 18.246 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 76.915 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 135.584 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 194.253 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -93.862 255.634)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-57'/>
-<use x='121.25' y='188.674' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 -35.193 253.943)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 23.476 255.258)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 82.145 257.513)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-57'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 140.814 254.82)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 199.483 241.168)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-50'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 -88.631 254.82)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -29.962 247.242)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 28.707 250.937)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 87.376 243.548)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 146.045 255.383)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 204.714 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-57'/>
-<use x='126.877' y='188.674' xlink:href='#g2-49'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -83.401 250.687)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 -24.732 252.315)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 33.937 245.74)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.606 239.79)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-50'/>
-<use x='121.25' y='188.674' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 151.275 229.395)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-52'/>
-<use x='121.25' y='188.674' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 209.944 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-54'/>
-<use x='126.877' y='188.674' xlink:href='#g2-53'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.17 228.831)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-52'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 -19.501 246.241)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 39.168 220.252)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 97.837 200.651)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-56'/>
-<use x='121.25' y='188.674' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 156.506 242.483)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-50'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 215.175 226.514)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-52'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -72.94 254.382)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 -14.271 253.567)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 44.398 256.135)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-57'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 103.067 257.638)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-57'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 161.736 212.675)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-54'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 220.405 223.884)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -67.709 251.689)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 -9.04 240.73)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-50'/>
-<use x='121.25' y='188.674' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.629 241.105)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-50'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 108.298 219)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 166.967 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-49'/>
-<use x='126.877' y='188.674' xlink:href='#g2-57'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.636 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-49'/>
-<use x='126.877' y='188.674' xlink:href='#g2-55'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -62.479 245.051)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -3.81 228.706)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-52'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 54.859 249.246)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.528 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-49'/>
-<use x='122.76' y='188.674' xlink:href='#g2-53'/>
-<use x='125.406' y='188.674' xlink:href='#g2-53'/>
-<use x='128.053' y='188.674' xlink:href='#g2-46'/>
-<use x='129.523' y='188.674' xlink:href='#g2-50'/>
-<use x='132.169' y='188.674' xlink:href='#g2-51'/>
-<use x='134.816' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 172.197 195.579)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-57'/>
-<use x='121.25' y='188.674' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 230.866 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-55'/>
-<use x='126.877' y='188.674' xlink:href='#g2-57'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -57.249 249.747)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 1.42 239.728)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-50'/>
-<use x='121.25' y='188.674' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 60.089 248.244)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.758 207.79)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-55'/>
-<use x='121.25' y='188.674' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 177.427 213.802)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-54'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 236.096 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-51'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-48'/>
-<use x='126.877' y='188.674' xlink:href='#g2-57'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -52.018 247.117)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 6.651 246.992)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 65.32 252.378)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 123.989 231.462)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-51'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 182.658 249.747)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 241.327 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-48'/>
-<use x='126.877' y='188.674' xlink:href='#g2-51'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -129.314 316.355)'>
-<use x='114.487' y='188.674' xlink:href='#g1-82'/>
-<use x='120.457' y='188.674' xlink:href='#g1-101'/>
-<use x='124.553' y='188.674' xlink:href='#g1-108'/>
-<use x='126.753' y='188.674' xlink:href='#g1-97'/>
-<use x='131.181' y='188.674' xlink:href='#g1-116'/>
-<use x='134.509' y='188.674' xlink:href='#g1-105'/>
-<use x='136.709' y='188.674' xlink:href='#g1-118'/>
-<use x='140.957' y='188.674' xlink:href='#g1-101'/>
-<use x='148.124' y='188.674' xlink:href='#g1-116'/>
-<use x='151.452' y='188.674' xlink:href='#g1-105'/>
-<use x='153.652' y='188.674' xlink:href='#g1-109'/>
-<use x='160.972' y='188.674' xlink:href='#g1-101'/>
-<use x='168.139' y='188.674' xlink:href='#g3-40'/>
-<use x='171.432' y='188.674' xlink:href='#g3-108'/>
-<use x='173.453' y='188.674' xlink:href='#g3-111'/>
-<use x='177.452' y='188.674' xlink:href='#g3-119'/>
-<use x='183' y='188.674' xlink:href='#g3-101'/>
-<use x='186.764' y='188.674' xlink:href='#g3-114'/>
-<use x='192.479' y='188.674' xlink:href='#g3-105'/>
-<use x='194.499' y='188.674' xlink:href='#g3-115'/>
-<use x='200.568' y='188.674' xlink:href='#g3-98'/>
-<use x='205.176' y='188.674' xlink:href='#g3-101'/>
-<use x='208.94' y='188.674' xlink:href='#g3-116'/>
-<use x='211.998' y='188.674' xlink:href='#g3-116'/>
-<use x='215.056' y='188.674' xlink:href='#g3-101'/>
-<use x='218.819' y='188.674' xlink:href='#g3-114'/>
-<use x='221.711' y='188.674' xlink:href='#g3-41'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-amd5950x-2021-01-30-b.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-amd5950x-2021-01-30-b.svg
deleted file mode 100644
index c748877..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-amd5950x-2021-01-30-b.svg
+++ /dev/null
@@ -1,1255 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.9.1 -->
-<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='381.628pt' height='255.741pt' viewBox='106.732 54.993 381.628 255.741'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip2'>
-<path d='M135.949 249.281H487.961V81.519H135.949Z'/>
-</clipPath>
-<use id='g3-40' xlink:href='#g0-40' transform='scale(1.143)'/>
-<use id='g3-41' xlink:href='#g0-41' transform='scale(1.143)'/>
-<use id='g3-45' xlink:href='#g0-45' transform='scale(1.143)'/>
-<use id='g3-49' xlink:href='#g0-49' transform='scale(1.143)'/>
-<use id='g3-54' xlink:href='#g0-54' transform='scale(1.143)'/>
-<use id='g3-56' xlink:href='#g0-56' transform='scale(1.143)'/>
-<use id='g3-58' xlink:href='#g0-58' transform='scale(1.143)'/>
-<use id='g3-78' xlink:href='#g0-78' transform='scale(1.143)'/>
-<use id='g3-97' xlink:href='#g0-97' transform='scale(1.143)'/>
-<use id='g3-98' xlink:href='#g0-98' transform='scale(1.143)'/>
-<use id='g3-99' xlink:href='#g0-99' transform='scale(1.143)'/>
-<use id='g3-100' xlink:href='#g0-100' transform='scale(1.143)'/>
-<use id='g3-101' xlink:href='#g0-101' transform='scale(1.143)'/>
-<use id='g3-103' xlink:href='#g0-103' transform='scale(1.143)'/>
-<use id='g3-104' xlink:href='#g0-104' transform='scale(1.143)'/>
-<use id='g3-105' xlink:href='#g0-105' transform='scale(1.143)'/>
-<use id='g3-106' xlink:href='#g0-106' transform='scale(1.143)'/>
-<use id='g3-108' xlink:href='#g0-108' transform='scale(1.143)'/>
-<use id='g3-109' xlink:href='#g0-109' transform='scale(1.143)'/>
-<use id='g3-110' xlink:href='#g0-110' transform='scale(1.143)'/>
-<use id='g3-111' xlink:href='#g0-111' transform='scale(1.143)'/>
-<use id='g3-112' xlink:href='#g0-112' transform='scale(1.143)'/>
-<use id='g3-114' xlink:href='#g0-114' transform='scale(1.143)'/>
-<use id='g3-115' xlink:href='#g0-115' transform='scale(1.143)'/>
-<use id='g3-116' xlink:href='#g0-116' transform='scale(1.143)'/>
-<use id='g3-119' xlink:href='#g0-119' transform='scale(1.143)'/>
-<use id='g3-120' xlink:href='#g0-120' transform='scale(1.143)'/>
-<use id='g2-44' xlink:href='#g0-44' transform='scale(.714)'/>
-<use id='g2-45' xlink:href='#g0-45' transform='scale(.714)'/>
-<use id='g2-46' xlink:href='#g0-46' transform='scale(.714)'/>
-<use id='g2-48' xlink:href='#g0-48' transform='scale(.714)'/>
-<use id='g2-49' xlink:href='#g0-49' transform='scale(.714)'/>
-<use id='g2-50' xlink:href='#g0-50' transform='scale(.714)'/>
-<use id='g2-51' xlink:href='#g0-51' transform='scale(.714)'/>
-<use id='g2-52' xlink:href='#g0-52' transform='scale(.714)'/>
-<use id='g2-53' xlink:href='#g0-53' transform='scale(.714)'/>
-<use id='g2-54' xlink:href='#g0-54' transform='scale(.714)'/>
-<use id='g2-55' xlink:href='#g0-55' transform='scale(.714)'/>
-<use id='g2-56' xlink:href='#g0-56' transform='scale(.714)'/>
-<use id='g2-57' xlink:href='#g0-57' transform='scale(.714)'/>
-<use id='g2-64' xlink:href='#g0-64' transform='scale(.714)'/>
-<use id='g2-65' xlink:href='#g0-65' transform='scale(.714)'/>
-<use id='g2-67' xlink:href='#g0-67' transform='scale(.714)'/>
-<use id='g2-68' xlink:href='#g0-68' transform='scale(.714)'/>
-<use id='g2-71' xlink:href='#g0-71' transform='scale(.714)'/>
-<use id='g2-77' xlink:href='#g0-77' transform='scale(.714)'/>
-<use id='g2-85' xlink:href='#g0-85' transform='scale(.714)'/>
-<use id='g2-97' xlink:href='#g0-97' transform='scale(.714)'/>
-<use id='g2-98' xlink:href='#g0-98' transform='scale(.714)'/>
-<use id='g2-99' xlink:href='#g0-99' transform='scale(.714)'/>
-<use id='g2-100' xlink:href='#g0-100' transform='scale(.714)'/>
-<use id='g2-101' xlink:href='#g0-101' transform='scale(.714)'/>
-<use id='g2-103' xlink:href='#g0-103' transform='scale(.714)'/>
-<use id='g2-104' xlink:href='#g0-104' transform='scale(.714)'/>
-<use id='g2-105' xlink:href='#g0-105' transform='scale(.714)'/>
-<use id='g2-108' xlink:href='#g0-108' transform='scale(.714)'/>
-<use id='g2-109' xlink:href='#g0-109' transform='scale(.714)'/>
-<use id='g2-110' xlink:href='#g0-110' transform='scale(.714)'/>
-<use id='g2-111' xlink:href='#g0-111' transform='scale(.714)'/>
-<use id='g2-114' xlink:href='#g0-114' transform='scale(.714)'/>
-<use id='g2-115' xlink:href='#g0-115' transform='scale(.714)'/>
-<use id='g2-116' xlink:href='#g0-116' transform='scale(.714)'/>
-<use id='g2-117' xlink:href='#g0-117' transform='scale(.714)'/>
-<use id='g2-120' xlink:href='#g0-120' transform='scale(.714)'/>
-<use id='g2-122' xlink:href='#g0-122' transform='scale(.714)'/>
-<path id='g4-1' d='M1.445-1.245C1.445-1.41 1.305-1.549 1.141-1.549S.837-1.41 .837-1.245S.976-.941 1.141-.941S1.445-1.081 1.445-1.245Z'/>
-<path id='g1-82' d='M3.891-2.914C4.806-3.165 5.452-3.811 5.452-4.546C5.452-5.469 4.411-6.223 3.129-6.223H.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891-2.914ZM1.704-3.407V-5.694H3.022C4.062-5.694 4.671-5.192 4.671-4.546C4.671-3.963 4.125-3.407 3.022-3.407H1.704Z'/>
-<path id='g1-97' d='M3.694-2.591C3.694-3.479 3.04-4.133 2.152-4.133C1.569-4.133 1.139-3.981 .708-3.739L.762-3.102C1.21-3.434 1.65-3.569 2.143-3.569C2.645-3.569 2.95-3.165 2.95-2.582V-2.206C1.408-2.17 .395-1.766 .395-1.04C.395-.619 .672 .099 1.453 .099C1.632 .099 2.412 .081 2.977-.341V0H3.694V-2.591ZM2.95-1.255C2.95-1.067 2.95-.843 2.627-.655C2.403-.52 2.107-.484 1.928-.484C1.47-.484 1.085-.699 1.085-1.058C1.085-1.695 2.833-1.722 2.95-1.722V-1.255Z'/>
-<path id='g1-101' d='M3.829-1.964C3.829-2.242 3.82-2.923 3.47-3.461C3.093-4.026 2.52-4.133 2.179-4.133C1.139-4.133 .314-3.174 .314-2.026C.314-.843 1.193 .099 2.313 .099C2.744 .099 3.264-.009 3.784-.341L3.73-.959C3.165-.556 2.636-.484 2.322-.484C1.578-.484 1.004-1.139 .977-1.964H3.829ZM1.031-2.493C1.175-3.067 1.614-3.551 2.179-3.551C2.511-3.551 3.12-3.398 3.291-2.493H1.031Z'/>
-<path id='g1-105' d='M1.524-6.133H.664V-5.272H1.524V-6.133ZM1.453-3.981H.735V0H1.453V-3.981Z'/>
-<path id='g1-108' d='M1.453-6.223H.735V0H1.453V-6.223Z'/>
-<path id='g1-109' d='M6.581-2.663C6.581-3.327 6.402-4.08 5.317-4.08C4.564-4.08 4.142-3.622 3.927-3.344C3.865-3.524 3.676-4.08 2.762-4.08C2.053-4.08 1.623-3.667 1.417-3.398V-4.035H.726V0H1.47V-2.188C1.47-2.78 1.704-3.497 2.385-3.497C3.282-3.497 3.282-2.86 3.282-2.6V0H4.026V-2.188C4.026-2.78 4.259-3.497 4.94-3.497C5.837-3.497 5.837-2.86 5.837-2.6V0H6.581V-2.663Z'/>
-<path id='g1-116' d='M1.623-3.425H2.914V-3.981H1.623V-5.12H.959V-3.981H.17V-3.425H.933V-1.13C.933-.601 1.049 .099 1.704 .099C2.098 .099 2.564 .018 3.067-.233L2.914-.798C2.681-.619 2.367-.511 2.089-.511C1.739-.511 1.623-.825 1.623-1.291V-3.425Z'/>
-<path id='g1-118' d='M4.116-3.981H3.407L2.699-2.161C2.52-1.695 2.188-.825 2.143-.493H2.125C2.107-.646 2.08-.816 1.587-2.107C1.318-2.833 .879-3.927 .861-3.981H.126L1.704 0H2.537L4.116-3.981Z'/>
-<path id='g0-40' d='M2.127-5.23C2.008-5.23 1.995-5.23 1.911-5.154C1.032-4.387 .586-3.145 .586-1.743C.586-.425 .983 .844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 .063C1.276-.481 1.193-1.053 1.193-1.743C1.193-4.156 2.322-5.112 2.462-5.23H2.127Z'/>
-<path id='g0-41' d='M.746 1.743C.865 1.743 .879 1.743 .962 1.667C1.841 .9 2.287-.342 2.287-1.743C2.287-3.062 1.89-4.331 .969-5.14C.879-5.23 .865-5.23 .746-5.23H.411C.432-5.216 1.109-4.638 1.43-3.55C1.597-3.006 1.681-2.434 1.681-1.743C1.681 .669 .551 1.625 .411 1.743H.746Z'/>
-<path id='g0-44' d='M1.339-.007V-.628H.711V0H.907L.704 .893H1.018L1.339-.007Z'/>
-<path id='g0-45' d='M2.05-1.332V-1.771H.084V-1.332H2.05Z'/>
-<path id='g0-46' d='M1.339-.628H.711V0H1.339V-.628Z'/>
-<path id='g0-48' d='M3.403-2.267C3.403-2.601 3.403-3.417 3.075-3.989C2.72-4.617 2.183-4.721 1.848-4.721C1.534-4.721 .99-4.624 .642-4.024C.307-3.466 .293-2.706 .293-2.267C.293-1.75 .321-1.116 .614-.586C.921-.021 1.437 .146 1.848 .146C2.545 .146 2.929-.258 3.138-.697C3.382-1.193 3.403-1.834 3.403-2.267ZM1.848-.314C1.555-.314 1.22-.481 1.046-.983C.907-1.409 .9-1.848 .9-2.357C.9-2.999 .9-4.261 1.848-4.261S2.797-2.999 2.797-2.357C2.797-1.897 2.797-1.374 2.629-.928C2.434-.425 2.078-.314 1.848-.314Z'/>
-<path id='g0-49' d='M2.239-4.721H2.085C1.632-4.303 1.06-4.275 .642-4.261V-3.822C.914-3.829 1.262-3.843 1.611-3.982V-.439H.683V0H3.166V-.439H2.239V-4.721Z'/>
-<path id='g0-50' d='M1.974-.537C1.89-.537 1.806-.53 1.723-.53H.928L2.008-1.485C2.134-1.597 2.476-1.855 2.608-1.967C2.915-2.246 3.327-2.608 3.327-3.215C3.327-4.003 2.741-4.721 1.743-4.721C1.004-4.721 .544-4.324 .307-3.612L.635-3.201C.795-3.787 1.039-4.24 1.646-4.24C2.232-4.24 2.678-3.829 2.678-3.201C2.678-2.622 2.336-2.294 1.918-1.897C1.778-1.757 1.402-1.444 1.255-1.304C1.053-1.123 .572-.656 .37-.481V0H3.327V-.537H1.974Z'/>
-<path id='g0-51' d='M.697-3.578C.983-4.135 1.485-4.289 1.82-4.289C2.232-4.289 2.538-4.052 2.538-3.654C2.538-3.285 2.287-2.831 1.757-2.741C1.723-2.734 1.695-2.734 1.234-2.699V-2.239H1.778C2.441-2.239 2.685-1.716 2.685-1.276C2.685-.732 2.35-.314 1.806-.314C1.311-.314 .746-.551 .398-.997L.307-.544C.711-.091 1.276 .146 1.82 .146C2.734 .146 3.389-.537 3.389-1.269C3.389-1.841 2.929-2.301 2.378-2.462C2.908-2.734 3.18-3.201 3.18-3.654C3.18-4.247 2.573-4.721 1.827-4.721C1.213-4.721 .704-4.4 .411-3.982L.697-3.578Z'/>
-<path id='g0-52' d='M2.762-1.165H3.487V-1.625H2.762V-4.575H2.071L.209-1.625V-1.165H2.162V0H2.762V-1.165ZM.802-1.625C1.011-1.953 2.211-3.815 2.211-4.233V-1.625H.802Z'/>
-<path id='g0-53' d='M1.144-4.094H3.075V-4.575H.586V-1.967H1.095C1.262-2.343 1.59-2.511 1.904-2.511C2.19-2.511 2.622-2.315 2.622-1.43C2.622-.516 2.043-.314 1.688-.314C1.227-.314 .781-.558 .544-.955L.279-.537C.621-.112 1.137 .146 1.688 .146C2.608 .146 3.327-.565 3.327-1.416C3.327-2.28 2.685-2.971 1.918-2.971C1.618-2.971 1.353-2.866 1.144-2.692V-4.094Z'/>
-<path id='g0-54' d='M3.062-4.582C2.685-4.721 2.42-4.721 2.287-4.721C1.227-4.721 .307-3.724 .307-2.253C.307-.363 1.158 .146 1.862 .146C2.427 .146 2.72-.119 2.936-.342C3.382-.816 3.389-1.311 3.389-1.555C3.389-2.469 2.894-3.229 2.218-3.229C1.534-3.229 1.165-2.873 .962-2.671C1.053-3.626 1.541-4.289 2.294-4.289C2.434-4.289 2.713-4.275 3.062-4.142V-4.582ZM.969-1.534C.969-1.576 .969-1.681 .976-1.716C.976-2.19 1.276-2.769 1.897-2.769C2.748-2.769 2.748-1.792 2.748-1.555C2.748-1.29 2.748-.997 2.559-.704C2.392-.453 2.183-.314 1.862-.314C1.123-.314 1.004-1.227 .969-1.534Z'/>
-<path id='g0-55' d='M1.723-4.038C1.806-4.038 1.89-4.045 1.974-4.045H2.852C1.792-3.006 1.116-1.548 1.116 .07H1.771C1.771-1.967 2.762-3.431 3.389-4.087V-4.575H.307V-4.038H1.723Z'/>
-<path id='g0-56' d='M2.385-2.469C2.845-2.615 3.285-2.985 3.285-3.501C3.285-4.135 2.678-4.721 1.848-4.721S.411-4.135 .411-3.501C.411-2.978 .865-2.608 1.311-2.469C.697-2.28 .307-1.806 .307-1.269C.307-.523 .969 .146 1.848 .146S3.389-.523 3.389-1.269C3.389-1.806 2.992-2.28 2.385-2.469ZM1.848-2.699C1.353-2.699 .948-2.985 .948-3.494C.948-3.94 1.262-4.289 1.848-4.289C2.427-4.289 2.748-3.94 2.748-3.494C2.748-2.999 2.357-2.699 1.848-2.699ZM1.848-.314C1.367-.314 .941-.621 .941-1.276C.941-1.904 1.346-2.239 1.848-2.239S2.755-1.897 2.755-1.276C2.755-.621 2.322-.314 1.848-.314Z'/>
-<path id='g0-57' d='M.537-.174C.879 .077 1.193 .146 1.52 .146C2.497 .146 3.389-.837 3.389-2.336C3.389-4.24 2.545-4.721 1.876-4.721C1.255-4.721 .969-4.428 .767-4.226C.321-3.773 .307-3.292 .307-3.02C.307-2.12 .795-1.346 1.478-1.346C2.267-1.346 2.699-1.869 2.734-1.911C2.636-.802 2.092-.314 1.52-.314C1.158-.314 .934-.446 .774-.579L.537-.174ZM2.713-3.027C2.72-2.985 2.72-2.915 2.72-2.873C2.72-2.357 2.406-1.806 1.799-1.806C1.534-1.806 1.325-1.883 1.144-2.169C.962-2.441 .948-2.706 .948-3.02C.948-3.292 .948-3.605 1.165-3.912C1.311-4.122 1.52-4.289 1.869-4.289C2.545-4.289 2.692-3.473 2.713-3.027Z'/>
-<path id='g0-58' d='M1.339-3.096H.711V-2.469H1.339V-3.096ZM.711-.628V0H1.339V-.628H.711Z'/>
-<path id='g0-64' d='M4.142-.614C4.038-.614 4.024-.614 3.968-.586C3.626-.467 3.271-.391 2.901-.391C1.778-.391 .976-1.339 .976-2.42C.976-3.592 1.883-4.449 2.859-4.449C3.055-4.449 3.515-4.4 3.745-3.843C3.55-3.954 3.333-4.003 3.152-4.003C2.406-4.003 1.778-3.306 1.778-2.42C1.778-1.513 2.427-.837 3.145-.837C3.689-.837 4.519-1.276 4.519-2.518C4.519-3.222 4.47-4.91 2.866-4.91C1.541-4.91 .411-3.815 .411-2.42C.411-1.039 1.527 .07 2.873 .07C3.515 .07 4.115-.195 4.519-.614H4.142ZM3.152-1.297C2.72-1.297 2.343-1.778 2.343-2.42C2.343-3.082 2.734-3.543 3.145-3.543C3.578-3.543 3.954-3.062 3.954-2.42C3.954-1.757 3.564-1.297 3.152-1.297Z'/>
-<path id='g0-65' d='M2.803-4.84H2.127L.209 0H.781L1.325-1.381H3.445L3.989 0H4.721L2.803-4.84ZM2.392-4.31L3.271-1.792H1.499L2.392-4.31Z'/>
-<path id='g0-67' d='M4.317-.851C3.829-.551 3.605-.418 2.908-.418C1.827-.418 1.172-1.43 1.172-2.434C1.172-3.466 1.89-4.435 2.908-4.435C3.368-4.435 3.843-4.289 4.163-4.045L4.275-4.679C3.787-4.861 3.396-4.917 2.887-4.917C1.506-4.917 .474-3.773 .474-2.427C.474-.99 1.569 .07 2.929 .07C3.612 .07 3.898-.07 4.359-.321L4.317-.851Z'/>
-<path id='g0-68' d='M.683-4.84V0H2.664C3.919 0 4.931-1.06 4.931-2.378C4.931-3.745 3.912-4.84 2.664-4.84H.683ZM1.367-.411V-4.428H2.476C3.431-4.428 4.247-3.668 4.247-2.385C4.247-1.088 3.396-.411 2.476-.411H1.367Z'/>
-<path id='g0-71' d='M4.442-2.085H2.88V-1.625H3.829V-.558C3.522-.481 3.222-.418 2.908-.418C1.834-.418 1.172-1.43 1.172-2.427C1.172-3.382 1.82-4.435 2.873-4.435C3.515-4.435 3.919-4.24 4.268-3.947L4.38-4.582C3.898-4.812 3.473-4.924 2.943-4.924C1.534-4.924 .474-3.822 .474-2.427C.474-1.067 1.527 .07 2.901 .07C3.403 .07 3.996-.042 4.442-.272V-2.085Z'/>
-<path id='g0-77' d='M3.884-2.42C3.801-2.211 3.299-.983 3.229-.69H3.222C3.173-.893 2.852-1.695 2.783-1.876L1.583-4.84H.732V0H1.318V-4.282H1.325C1.381-4.038 1.743-3.117 1.778-3.041L2.943-.146H3.494L4.533-2.713C4.533-2.72 5.014-3.905 5.133-4.289H5.14V0H5.726V-4.84H4.868L3.884-2.42Z'/>
-<path id='g0-78' d='M1.646-4.84H.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-.551H3.933L1.646-4.84Z'/>
-<path id='g0-85' d='M4.4-4.84H3.794V-1.625C3.794-.69 3.166-.265 2.566-.265S1.381-.697 1.381-1.618V-4.84H.676V-1.632C.676-.607 1.555 .146 2.559 .146C3.557 .146 4.4-.614 4.4-1.632V-4.84Z'/>
-<path id='g0-97' d='M2.971-2.008C2.971-2.72 2.427-3.201 1.736-3.201C1.297-3.201 .962-3.11 .572-2.901L.614-2.392C.844-2.545 1.186-2.755 1.736-2.755C2.043-2.755 2.364-2.525 2.364-2.001V-1.723C1.332-1.688 .314-1.471 .314-.823C.314-.474 .551 .07 1.165 .07C1.465 .07 2.015 .007 2.385-.265V0H2.971V-2.008ZM2.364-.99C2.364-.851 2.364-.669 2.12-.523C1.897-.398 1.625-.391 1.548-.391C1.165-.391 .872-.565 .872-.83C.872-1.276 2.05-1.318 2.364-1.332V-.99Z'/>
-<path id='g0-98' d='M1.179-4.84H.593V0H1.2V-.328C1.353-.195 1.688 .07 2.197 .07C2.957 .07 3.571-.642 3.571-1.555C3.571-2.399 3.089-3.166 2.392-3.166C1.953-3.166 1.527-3.027 1.179-2.769V-4.84ZM1.2-2.197C1.2-2.308 1.2-2.392 1.444-2.552C1.548-2.615 1.736-2.706 1.974-2.706C2.441-2.706 2.964-2.392 2.964-1.555C2.964-.704 2.385-.391 1.897-.391C1.639-.391 1.395-.509 1.2-.823V-2.197Z'/>
-<path id='g0-99' d='M3.034-.76C2.685-.537 2.308-.411 1.876-.411C1.234-.411 .858-.928 .858-1.555C.858-2.092 1.137-2.72 1.897-2.72C2.371-2.72 2.594-2.622 2.95-2.399L3.041-2.901C2.622-3.11 2.441-3.201 1.897-3.201C.851-3.201 .251-2.357 .251-1.548C.251-.697 .921 .07 1.869 .07C2.357 .07 2.776-.077 3.075-.251L3.034-.76Z'/>
-<path id='g0-100' d='M3.229-4.84H2.643V-2.797C2.197-3.124 1.743-3.166 1.541-3.166C.809-3.166 .251-2.434 .251-1.548S.802 .07 1.52 .07C1.953 .07 2.357-.126 2.622-.363V0H3.229V-4.84ZM2.622-.865C2.448-.579 2.183-.391 1.848-.391C1.36-.391 .858-.732 .858-1.541C.858-2.413 1.451-2.706 1.925-2.706C2.204-2.706 2.441-2.587 2.622-2.35V-.865Z'/>
-<path id='g0-101' d='M2.999-.76C2.608-.481 2.169-.391 1.869-.391C1.262-.391 .802-.886 .781-1.527H3.068C3.068-1.848 3.034-2.315 2.762-2.713C2.511-3.068 2.092-3.201 1.75-3.201C.9-3.201 .244-2.455 .244-1.569C.244-.676 .941 .07 1.862 .07C2.267 .07 2.685-.049 3.041-.265L2.999-.76ZM.83-1.946C.99-2.504 1.402-2.741 1.75-2.741C2.057-2.741 2.511-2.594 2.643-1.946H.83Z'/>
-<path id='g0-103' d='M3.508-3.166C3.354-3.166 2.887-3.159 2.357-2.957L2.343-2.95C2.092-3.117 1.848-3.166 1.646-3.166C.962-3.166 .453-2.629 .453-2.029C.453-1.785 .537-1.534 .697-1.339C.6-1.22 .495-1.025 .495-.76C.495-.488 .607-.314 .669-.23C.286-.007 .209 .314 .209 .481C.209 1.011 .941 1.43 1.848 1.43C2.762 1.43 3.487 1.011 3.487 .481C3.487-.502 2.267-.502 1.967-.502H1.318C1.206-.502 .907-.502 .907-.865C.907-1.004 .955-1.074 .962-1.088C1.206-.934 1.451-.886 1.639-.886C2.322-.886 2.831-1.423 2.831-2.022C2.831-2.246 2.769-2.448 2.643-2.636C2.615-2.678 2.615-2.685 2.615-2.692C2.615-2.72 3.034-2.72 3.068-2.72C3.075-2.72 3.34-2.72 3.592-2.692L3.508-3.166ZM1.646-1.318C1.269-1.318 .99-1.555 .99-2.022C.99-2.566 1.339-2.734 1.639-2.734C2.015-2.734 2.294-2.497 2.294-2.029C2.294-1.485 1.946-1.318 1.646-1.318ZM1.974 .042C2.134 .042 2.957 .042 2.957 .488C2.957 .788 2.434 .997 1.848 .997S.739 .788 .739 .488C.739 .453 .739 .042 1.304 .042H1.974Z'/>
-<path id='g0-104' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.625-3.166 1.304-2.817 1.165-2.671V-4.84H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-105' d='M1.227-4.784H.523V-4.08H1.227V-4.784ZM1.172-3.096H.586V0H1.172V-3.096Z'/>
-<path id='g0-106' d='M1.381-4.784H.676V-4.08H1.381V-4.784ZM-.453 1.186C-.133 1.36 .181 1.423 .446 1.423C.928 1.423 1.381 1.053 1.381 .411V-3.096H.795V.46C.795 .586 .795 .697 .649 .816C.488 .934 .293 .934 .23 .934C-.063 .934-.244 .802-.328 .725L-.453 1.186Z'/>
-<path id='g0-108' d='M1.172-4.84H.586V0H1.172V-4.84Z'/>
-<path id='g0-109' d='M5.3-2.064C5.3-2.608 5.14-3.166 4.282-3.166C3.696-3.166 3.333-2.824 3.166-2.601C3.096-2.79 2.922-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-1.695C3.243-2.155 3.438-2.706 3.975-2.706C4.693-2.706 4.693-2.218 4.693-2.015V0H5.3V-2.064Z'/>
-<path id='g0-110' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-111' d='M3.487-1.527C3.487-2.448 2.755-3.201 1.848-3.201S.209-2.441 .209-1.527C.209-.642 .948 .07 1.848 .07C2.755 .07 3.487-.642 3.487-1.527ZM1.848-.411C1.297-.411 .816-.816 .816-1.604S1.332-2.741 1.848-2.741C2.371-2.741 2.88-2.378 2.88-1.604C2.88-.809 2.385-.411 1.848-.411Z'/>
-<path id='g0-112' d='M1.2-.328C1.569 .007 1.967 .07 2.204 .07C2.943 .07 3.571-.635 3.571-1.555C3.571-2.392 3.11-3.166 2.42-3.166C2.106-3.166 1.583-3.075 1.179-2.762V-3.096H.593V1.353H1.2V-.328ZM1.2-2.315C1.36-2.511 1.632-2.685 1.967-2.685C2.525-2.685 2.964-2.169 2.964-1.555C2.964-.865 2.441-.391 1.897-.391C1.792-.391 1.618-.404 1.437-.551C1.227-.711 1.2-.816 1.2-.948V-2.315Z'/>
-<path id='g0-114' d='M1.179-1.485C1.179-2.239 1.806-2.643 2.42-2.65V-3.166C1.834-3.159 1.409-2.873 1.13-2.504V-3.145H.593V0H1.179V-1.485Z'/>
-<path id='g0-115' d='M2.545-2.985C2.071-3.18 1.723-3.201 1.471-3.201C1.297-3.201 .244-3.201 .244-2.273C.244-1.946 .425-1.764 .516-1.681C.76-1.437 1.053-1.381 1.423-1.311C1.75-1.248 2.127-1.179 2.127-.844C2.127-.404 1.548-.404 1.451-.404C1.004-.404 .586-.565 .307-.76L.209-.237C.446-.119 .872 .07 1.451 .07C1.764 .07 2.071 .021 2.329-.167C2.587-.363 2.671-.669 2.671-.907C2.671-1.032 2.657-1.304 2.364-1.569C2.106-1.799 1.855-1.848 1.52-1.911C1.109-1.988 .788-2.05 .788-2.357C.788-2.755 1.297-2.755 1.402-2.755C1.799-2.755 2.106-2.671 2.455-2.49L2.545-2.985Z'/>
-<path id='g0-116' d='M1.311-2.657H2.343V-3.096H1.311V-3.982H.774V-3.096H.139V-2.657H.753V-.893C.753-.425 .872 .07 1.374 .07S2.26-.091 2.469-.188L2.35-.635C2.12-.467 1.876-.411 1.681-.411C1.388-.411 1.311-.697 1.311-1.018V-2.657Z'/>
-<path id='g0-117' d='M3.243-3.096H2.636V-1.074C2.636-.516 2.162-.342 1.757-.342C1.241-.342 1.186-.481 1.186-.802V-3.096H.579V-.76C.579-.139 .851 .07 1.339 .07C1.625 .07 2.239 .014 2.657-.321V0H3.243V-3.096Z'/>
-<path id='g0-119' d='M4.951-3.096H4.407C4.345-2.901 3.954-1.723 3.738-.997C3.682-.795 3.612-.572 3.592-.411H3.585C3.543-.697 3.299-1.451 3.285-1.499L2.769-3.096H2.239C2.036-2.497 1.513-.934 1.458-.425H1.451C1.395-.921 .879-2.462 .767-2.797C.711-2.964 .711-2.978 .676-3.096H.105L1.123 0H1.709C1.716-.028 1.904-.579 2.148-1.353C2.253-1.695 2.462-2.364 2.497-2.671L2.504-2.678C2.518-2.532 2.559-2.378 2.608-2.204S2.706-1.841 2.755-1.681L3.292 0H3.933L4.951-3.096Z'/>
-<path id='g0-120' d='M1.932-1.597L3.285-3.096H2.671L1.681-1.953L.669-3.096H.042L1.437-1.597L0 0H.621L1.681-1.311L2.783 0H3.41L1.932-1.597Z'/>
-<path id='g0-122' d='M2.957-2.803V-3.096H.307V-2.65H1.332C1.416-2.65 1.499-2.657 1.583-2.657H2.127L.209-.307V0H2.978V-.467H1.897C1.813-.467 1.73-.46 1.646-.46H1.039L2.957-2.803Z'/>
-</defs>
-<g id='page2'>
-<path d='M194.617 258.141V249.281M253.285 258.141V249.281M311.953 258.141V249.281M370.625 258.141V249.281M429.293 258.141V249.281M194.617 72.66V81.519M253.285 72.66V81.519M311.953 72.66V81.519M370.625 72.66V81.519M429.293 72.66V81.519' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M165.281 253.535V249.281M223.953 253.535V249.281M282.621 253.535V249.281M341.289 253.535V249.281M399.957 253.535V249.281M458.629 253.535V249.281M165.281 77.266V81.519M223.953 77.266V81.519M282.621 77.266V81.519M341.289 77.266V81.519M399.957 77.266V81.519M458.629 77.266V81.519' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M135.949 249.281H140.199M135.949 215.73H140.199M135.949 182.176H140.199M135.949 148.625H140.199M135.949 115.07H140.199M135.949 81.519H140.199M487.961 249.281H483.711M487.961 215.73H483.711M487.961 182.176H483.711M487.961 148.625H483.711M487.961 115.07H483.711M487.961 81.519H483.711' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M135.949 249.281V81.519H487.961V249.281H135.949Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -21.265 74.992)'>
-<use x='168.285' y='188.688' xlink:href='#g3-97'/>
-<use x='172.353' y='188.688' xlink:href='#g3-108'/>
-<use x='174.373' y='188.688' xlink:href='#g3-108'/>
-<use x='176.393' y='188.688' xlink:href='#g3-111'/>
-<use x='180.863' y='188.688' xlink:href='#g3-99'/>
-<use x='184.627' y='188.688' xlink:href='#g3-45'/>
-<use x='187.449' y='188.688' xlink:href='#g3-116'/>
-<use x='190.507' y='188.688' xlink:href='#g3-101'/>
-<use x='194.271' y='188.688' xlink:href='#g3-115'/>
-<use x='197.517' y='188.688' xlink:href='#g3-116'/>
-<use x='200.575' y='188.688' xlink:href='#g3-49'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 74.992)'>
-<use x='168.285' y='188.688' xlink:href='#g3-97'/>
-<use x='172.353' y='188.688' xlink:href='#g3-108'/>
-<use x='174.373' y='188.688' xlink:href='#g3-108'/>
-<use x='176.393' y='188.688' xlink:href='#g3-111'/>
-<use x='180.863' y='188.688' xlink:href='#g3-99'/>
-<use x='184.627' y='188.688' xlink:href='#g3-45'/>
-<use x='187.449' y='188.688' xlink:href='#g3-116'/>
-<use x='190.507' y='188.688' xlink:href='#g3-101'/>
-<use x='194.271' y='188.688' xlink:href='#g3-115'/>
-<use x='197.517' y='188.688' xlink:href='#g3-116'/>
-<use x='200.575' y='188.688' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 74.992)'>
-<use x='168.285' y='188.688' xlink:href='#g3-115'/>
-<use x='171.531' y='188.688' xlink:href='#g3-104'/>
-<use x='175.904' y='188.688' xlink:href='#g3-54'/>
-<use x='180.138' y='188.688' xlink:href='#g3-98'/>
-<use x='184.746' y='188.688' xlink:href='#g3-101'/>
-<use x='188.509' y='188.688' xlink:href='#g3-110'/>
-<use x='192.882' y='188.688' xlink:href='#g3-99'/>
-<use x='196.646' y='188.688' xlink:href='#g3-104'/>
-<use x='201.018' y='188.688' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 74.992)'>
-<use x='168.285' y='188.688' xlink:href='#g3-115'/>
-<use x='171.531' y='188.688' xlink:href='#g3-104'/>
-<use x='175.904' y='188.688' xlink:href='#g3-56'/>
-<use x='180.138' y='188.688' xlink:href='#g3-98'/>
-<use x='184.746' y='188.688' xlink:href='#g3-101'/>
-<use x='188.509' y='188.688' xlink:href='#g3-110'/>
-<use x='192.882' y='188.688' xlink:href='#g3-99'/>
-<use x='196.646' y='188.688' xlink:href='#g3-104'/>
-<use x='201.018' y='188.688' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 74.992)'>
-<use x='168.285' y='188.688' xlink:href='#g3-120'/>
-<use x='172.187' y='188.688' xlink:href='#g3-109'/>
-<use x='178.912' y='188.688' xlink:href='#g3-97'/>
-<use x='182.98' y='188.688' xlink:href='#g3-108'/>
-<use x='185' y='188.688' xlink:href='#g3-108'/>
-<use x='187.02' y='188.688' xlink:href='#g3-111'/>
-<use x='191.49' y='188.688' xlink:href='#g3-99'/>
-<use x='195.254' y='188.688' xlink:href='#g3-45'/>
-<use x='198.076' y='188.688' xlink:href='#g3-116'/>
-<use x='201.134' y='188.688' xlink:href='#g3-101'/>
-<use x='204.898' y='188.688' xlink:href='#g3-115'/>
-<use x='208.144' y='188.688' xlink:href='#g3-116'/>
-<use x='211.202' y='188.688' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 74.992)'>
-<use x='168.285' y='188.688' xlink:href='#g3-99'/>
-<use x='172.049' y='188.688' xlink:href='#g3-97'/>
-<use x='176.117' y='188.688' xlink:href='#g3-99'/>
-<use x='179.88' y='188.688' xlink:href='#g3-104'/>
-<use x='184.253' y='188.688' xlink:href='#g3-101'/>
-<use x='188.017' y='188.688' xlink:href='#g3-45'/>
-<use x='190.839' y='188.688' xlink:href='#g3-115'/>
-<use x='194.086' y='188.688' xlink:href='#g3-99'/>
-<use x='197.849' y='188.688' xlink:href='#g3-114'/>
-<use x='200.741' y='188.688' xlink:href='#g3-97'/>
-<use x='204.81' y='188.688' xlink:href='#g3-116'/>
-<use x='207.868' y='188.688' xlink:href='#g3-99'/>
-<use x='211.631' y='188.688' xlink:href='#g3-104'/>
-<use x='216.004' y='188.688' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 62.23)'>
-<use x='168.285' y='188.688' xlink:href='#g2-48'/>
-<use x='170.931' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 28.677)'>
-<use x='168.285' y='188.688' xlink:href='#g2-48'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-53'/>
-<use x='175.048' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -4.876)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -38.43)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-53'/>
-<use x='175.048' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.983)'>
-<use x='168.285' y='188.688' xlink:href='#g2-50'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -105.536)'>
-<use x='168.285' y='188.688' xlink:href='#g2-50'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-53'/>
-<use x='175.048' y='188.688' xlink:href='#g2-120'/>
-</g>
-<path d='M135.949 182.176H487.961' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M140.125 249.281H143.363V182.176H140.125ZM198.797 249.281H202.035V182.176H198.797ZM257.465 249.281H260.703V182.176H257.465ZM316.133 249.281H319.371V182.176H316.133ZM374.801 249.281H378.039V182.176H374.801ZM433.473 249.281H436.711V182.176H433.473Z' fill='#933' clip-path='url(#clip2)'/>
-<path d='M140.125 249.281H143.363V182.176H140.125ZM198.797 249.281H202.035V182.176H198.797ZM257.465 249.281H260.703V182.176H257.465ZM316.133 249.281H319.371V182.176H316.133ZM374.801 249.281H378.039V182.176H374.801ZM433.473 249.281H436.711V182.176H433.473Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M141.746 182.176V181.773' fill='#933' clip-path='url(#clip2)'/>
-<path d='M141.746 182.176V181.773' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M139.754 181.773H143.738' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M141.746 182.176V182.578' fill='#933' clip-path='url(#clip2)'/>
-<path d='M141.746 182.176V182.578' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M143.738 182.578H139.754' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M200.414 182.176V181.508' fill='#933' clip-path='url(#clip2)'/>
-<path d='M200.414 182.176V181.508' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M198.422 181.508H202.406' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M200.414 182.176V182.848' fill='#933' clip-path='url(#clip2)'/>
-<path d='M200.414 182.176V182.848' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M202.406 182.848H198.422' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M259.082 182.176' fill='#933' clip-path='url(#clip2)'/>
-<path d='M257.09 182.176H261.074' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M259.082 182.176' fill='#933' clip-path='url(#clip2)'/>
-<path d='M257.09 182.176H261.074' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M317.754 182.176V179.695' fill='#933' clip-path='url(#clip2)'/>
-<path d='M317.754 182.176V179.695' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M315.758 179.695H319.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M317.754 182.176V184.66' fill='#933' clip-path='url(#clip2)'/>
-<path d='M317.754 182.176V184.66' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M319.746 184.66H315.762' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M376.422 182.176V180.363' fill='#933' clip-path='url(#clip2)'/>
-<path d='M376.422 182.176V180.363' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M374.43 180.363H378.414' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M376.422 182.176V183.988' fill='#933' clip-path='url(#clip2)'/>
-<path d='M376.422 182.176V183.988' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M378.414 183.988H374.43' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M435.09 182.176V179.629' fill='#933' clip-path='url(#clip2)'/>
-<path d='M435.09 182.176V179.629' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M433.098 179.629H437.082' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M435.09 182.176V184.727' fill='#933' clip-path='url(#clip2)'/>
-<path d='M435.09 182.176V184.727' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M437.082 184.727H433.098' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M145.356 249.281H148.594V182.312H145.356ZM204.028 249.281H207.266V182.648H204.028ZM262.695 249.281H265.934V167.816H262.695ZM321.363 249.281H324.602V183.922H321.363ZM380.031 249.281H383.27V176.605H380.031ZM438.703 249.281H441.942V180.699H438.703Z' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M145.356 249.281H148.594V182.312H145.356ZM204.028 249.281H207.266V182.648H204.028ZM262.695 249.281H265.934V167.816H262.695ZM321.363 249.281H324.602V183.922H321.363ZM380.031 249.281H383.27V176.605H380.031ZM438.703 249.281H441.942V180.699H438.703Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M146.977 182.312V182.043' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M146.977 182.312V182.043' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M144.984 182.043H148.968' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M146.977 182.312V182.578' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M146.977 182.312V182.578' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M148.968 182.578H144.984' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M205.645 182.648V182.379' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M205.645 182.648V182.379' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M203.652 182.379H207.636' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M205.645 182.648V182.914' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M205.645 182.648V182.914' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M207.636 182.914H203.652' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M264.313 167.816V163.051' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M264.313 167.816V163.051' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M262.32 163.051H266.304' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M264.313 167.816V172.582' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M264.313 167.816V172.582' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M266.308 172.582H262.32' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M322.984 183.922V182.176' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M322.984 183.922V182.176' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M320.988 182.176H324.976' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M322.984 183.922V185.668' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M322.984 183.922V185.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M324.976 185.668H320.992' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M381.652 176.605V172.18' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M381.652 176.605V172.18' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M379.66 172.179H383.644' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M381.652 176.605V181.035' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M381.652 176.605V181.035' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M383.644 181.035H379.66' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M440.32 180.699V177.746' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M440.32 180.699V177.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M438.328 177.746H442.312' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M440.32 180.699V183.652' fill='#bf8080' clip-path='url(#clip2)'/>
-<path d='M440.32 180.699V183.652' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M442.312 183.652H438.328' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M150.586 249.281H153.824V181.707H150.586ZM209.258 249.281H212.496V180.969H209.258ZM267.926 249.281H271.164V143.859H267.926ZM326.594 249.281H329.832V81.519H326.594ZM385.262 249.281H388.5V81.519H385.262ZM443.934 249.281H447.172V81.519H443.934Z' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M150.586 249.281H153.824V181.707H150.586ZM209.258 249.281H212.496V180.969H209.258ZM267.926 249.281H271.164V143.859H267.926ZM326.594 249.281H329.832V81.519H326.594ZM385.262 249.281H388.5V81.519H385.262ZM443.934 249.281H447.172V81.519H443.934Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M152.207 181.707V181.172' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M152.207 181.707V181.172' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M150.215 181.171H154.199' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M152.207 181.707V182.242' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M152.207 181.707V182.242' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M154.2 182.242H150.215' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M210.875 180.969V179.359' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M210.875 180.969V179.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M208.883 179.36H212.867' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M210.875 180.969V182.578' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M210.875 180.969V182.578' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M212.868 182.578H208.883' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M269.543 143.859V132.117' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M269.543 143.859V132.117' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M267.551 132.117H271.535' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M269.543 143.859V155.602' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M269.543 143.859V155.602' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M271.539 155.602H267.551' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M328.215 81.519' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M326.219 81.52H330.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M328.215 81.519' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M326.219 81.52H330.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M386.883 81.519' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M384.891 81.52H388.875' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M386.883 81.519' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M384.891 81.52H388.875' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M445.551 81.519' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M443.559 81.52H447.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M445.551 81.519' fill='#8080bf' clip-path='url(#clip2)'/>
-<path d='M443.559 81.52H447.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M155.817 249.281H159.055V176.273H155.817ZM214.488 249.281H217.727V173.988H214.488ZM273.156 249.281H276.395V81.519H273.156ZM331.824 249.281H335.063V81.519H331.824ZM390.492 249.281H393.731V81.519H390.492ZM449.164 249.281H452.402V81.519H449.164Z' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M155.817 249.281H159.055V176.273H155.817ZM214.488 249.281H217.727V173.988H214.488ZM273.156 249.281H276.395V81.519H273.156ZM331.824 249.281H335.063V81.519H331.824ZM390.492 249.281H393.731V81.519H390.492ZM449.164 249.281H452.402V81.519H449.164Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M157.438 176.273V176.137' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M157.438 176.273V176.137' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M155.445 176.136H159.429' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M157.438 176.273V176.406' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M157.438 176.273V176.406' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M159.43 176.406H155.445' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M216.106 173.988V172.715' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M216.106 173.988V172.715' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M214.113 172.715H218.097' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M216.106 173.988V175.266' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M216.106 173.988V175.266' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M218.098 175.266H214.113' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M274.774 81.519' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M272.781 81.52H276.765' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M274.774 81.519' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M272.781 81.52H276.765' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M333.445 81.519' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M331.449 81.52H335.437' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M333.445 81.519' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M331.449 81.52H335.437' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M392.113 81.519' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M390.121 81.52H394.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M392.113 81.519' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M390.121 81.52H394.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M450.781 81.519' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M448.789 81.52H452.773' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M450.781 81.519' fill='#ffb733' clip-path='url(#clip2)'/>
-<path d='M448.789 81.52H452.773' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M161.047 249.281H164.285V157.48H161.047ZM219.719 249.281H222.957V147.215H219.719ZM278.387 249.281H281.625V81.519H278.387ZM337.055 249.281H340.293V81.519H337.055ZM395.723 249.281H398.961V166.406H395.723ZM454.395 249.281H457.633V182.176H454.395Z' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M161.047 249.281H164.285V157.48H161.047ZM219.719 249.281H222.957V147.215H219.719ZM278.387 249.281H281.625V81.519H278.387ZM337.055 249.281H340.293V81.519H337.055ZM395.723 249.281H398.961V166.406H395.723ZM454.395 249.281H457.633V182.176H454.395Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M162.668 157.48V157.012' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M162.668 157.48V157.012' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M160.676 157.011H164.66' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M162.668 157.48V157.953' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M162.668 157.48V157.953' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M164.661 157.953H160.676' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M221.336 147.215V146.812' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M221.336 147.215V146.812' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M219.344 146.812H223.328' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M221.336 147.215V147.617' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M221.336 147.215V147.617' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M223.329 147.617H219.344' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M280.004 81.519' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M278.012 81.52H281.996' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M280.004 81.519' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M278.012 81.52H281.996' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M338.676 81.519' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M336.68 81.52H340.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M338.676 81.519' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M336.68 81.52H340.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M397.344 166.406V166.273' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M397.344 166.406V166.273' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M395.352 166.274H399.336' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M397.344 166.406V166.543' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M397.344 166.406V166.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M399.336 166.543H395.352' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M456.012 182.176V179.629' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M456.012 182.176V179.629' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M454.02 179.629H458.004' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M456.012 182.176V184.727' fill='#bf80bf' clip-path='url(#clip2)'/>
-<path d='M456.012 182.176V184.727' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M458.004 184.727H454.02' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M166.278 249.281H169.516V167.949H166.278ZM224.949 249.281H228.188V176.137H224.949ZM283.617 249.281H286.856V110.305H283.617ZM342.285 249.281H345.524V157.48H342.285ZM400.953 249.281H404.192V186.473H400.953ZM459.625 249.281H462.863V183.652H459.625Z' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M166.278 249.281H169.516V167.949H166.278ZM224.949 249.281H228.188V176.137H224.949ZM283.617 249.281H286.856V110.305H283.617ZM342.285 249.281H345.524V157.48H342.285ZM400.953 249.281H404.192V186.473H400.953ZM459.625 249.281H462.863V183.652H459.625Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M167.899 167.949V167.816' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M167.899 167.949V167.816' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M165.906 167.816H169.89' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M167.899 167.949V168.086' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M167.899 167.949V168.086' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M169.891 168.086H165.906' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M226.567 176.137V175.199' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M226.567 176.137V175.199' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M224.574 175.199H228.558' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M226.567 176.137V177.078' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M226.567 176.137V177.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M228.559 177.078H224.574' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M285.234 110.305V105.543' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M285.234 110.305V105.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M283.242 105.543H287.226' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M285.234 110.305V115.07' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M285.234 110.305V115.07' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M287.23 115.07H283.242' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M343.906 157.48V153.187' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M343.906 157.48V153.187' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M341.91 153.187H345.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M343.906 157.48V161.777' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M343.906 157.48V161.777' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M345.898 161.778H341.914' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M402.574 186.473V186.269' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M402.574 186.473V186.269' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M400.582 186.27H404.566' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M402.574 186.473V186.672' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M402.574 186.473V186.672' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M404.566 186.672H400.582' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M461.242 183.652' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M459.25 183.652H463.234' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M461.242 183.652' fill='#c96' clip-path='url(#clip2)'/>
-<path d='M459.25 183.652H463.234' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M171.508 249.281H174.746V173.789H171.508ZM230.18 249.281H233.414V173.789H230.18ZM288.848 249.281H292.086V81.519H288.848ZM347.516 249.281H350.754V81.519H347.516ZM406.184 249.281H409.422V81.519H406.184ZM464.856 249.281H468.094V81.519H464.856Z' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M171.508 249.281H174.746V173.789H171.508ZM230.18 249.281H233.414V173.789H230.18ZM288.848 249.281H292.086V81.519H288.848ZM347.516 249.281H350.754V81.519H347.516ZM406.184 249.281H409.422V81.519H406.184ZM464.856 249.281H468.094V81.519H464.856Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M173.129 173.789V173.184' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M173.129 173.789V173.184' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M171.137 173.184H175.121' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M173.129 173.789V174.394' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M173.129 173.789V174.394' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M175.122 174.395H171.137' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M231.797 173.789V173.32' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M231.797 173.789V173.32' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M229.805 173.32H233.789' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M231.797 173.789V174.258' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M231.797 173.789V174.258' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M233.79 174.258H229.805' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M290.465 81.519' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M288.473 81.52H292.457' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M290.465 81.519' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M288.473 81.52H292.457' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M349.137 81.519' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M347.141 81.52H351.129' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M349.137 81.519' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M347.141 81.52H351.129' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M407.805 81.519' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M405.813 81.52H409.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M407.805 81.519' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M405.813 81.52H409.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M466.473 81.519' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M464.481 81.52H468.465' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M466.473 81.519' fill='#80bf80' clip-path='url(#clip2)'/>
-<path d='M464.481 81.52H468.465' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M176.738 249.281H179.977V144.664H176.738ZM235.41 249.281H238.645V178.016H235.41ZM294.078 249.281H297.317V81.519H294.078ZM352.746 249.281H355.984V81.519H352.746ZM411.414 249.281H414.652V81.519H411.414ZM470.086 249.281H473.324V183.652H470.086Z' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M176.738 249.281H179.977V144.664H176.738ZM235.41 249.281H238.645V178.016H235.41ZM294.078 249.281H297.317V81.519H294.078ZM352.746 249.281H355.984V81.519H352.746ZM411.414 249.281H414.652V81.519H411.414ZM470.086 249.281H473.324V183.652H470.086Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M178.36 144.664V142.922' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M178.36 144.664V142.922' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M176.367 142.922H180.351' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M178.36 144.664V146.41' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M178.36 144.664V146.41' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M180.352 146.41H176.367' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M237.027 178.016V177.344' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M237.027 178.016V177.344' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M235.035 177.343H239.019' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M237.027 178.016V178.687' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M237.027 178.016V178.687' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M239.02 178.688H235.035' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M295.695 81.519' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M293.703 81.52H297.687' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M295.695 81.519' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M293.703 81.52H297.687' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M354.367 81.519' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M352.371 81.52H356.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M354.367 81.519' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M352.371 81.52H356.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M413.035 81.519' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M411.043 81.52H415.027' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M413.035 81.519' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M411.043 81.52H415.027' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M471.703 183.652' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M469.711 183.652H473.695' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M471.703 183.652' fill='#bfbf80' clip-path='url(#clip2)'/>
-<path d='M469.711 183.652H473.695' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M181.969 249.281H185.207V165.199H181.969ZM240.641 249.281H243.875V163.387H240.641ZM299.309 249.281H302.547V81.519H299.309ZM357.977 249.281H361.215V81.519H357.977ZM416.645 249.281H419.883V116.613H416.645ZM475.317 249.281H478.555V81.519H475.317Z' fill='#399' clip-path='url(#clip2)'/>
-<path d='M181.969 249.281H185.207V165.199H181.969ZM240.641 249.281H243.875V163.387H240.641ZM299.309 249.281H302.547V81.519H299.309ZM357.977 249.281H361.215V81.519H357.977ZM416.645 249.281H419.883V116.613H416.645ZM475.317 249.281H478.555V81.519H475.317Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M183.59 165.199V164.664' fill='#399' clip-path='url(#clip2)'/>
-<path d='M183.59 165.199V164.664' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M181.598 164.664H185.583' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M183.59 165.199V165.734' fill='#399' clip-path='url(#clip2)'/>
-<path d='M183.59 165.199V165.734' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M185.582 165.734H181.597' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M242.258 163.387V162.852' fill='#399' clip-path='url(#clip2)'/>
-<path d='M242.258 163.387V162.852' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M240.266 162.851H244.25' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M242.258 163.387V163.926' fill='#399' clip-path='url(#clip2)'/>
-<path d='M242.258 163.387V163.926' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M244.25 163.926H240.265' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M300.926 81.519' fill='#399' clip-path='url(#clip2)'/>
-<path d='M298.933 81.52H302.917' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M300.926 81.519' fill='#399' clip-path='url(#clip2)'/>
-<path d='M298.933 81.52H302.917' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M359.598 81.519' fill='#399' clip-path='url(#clip2)'/>
-<path d='M357.602 81.52H361.59' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M359.598 81.519' fill='#399' clip-path='url(#clip2)'/>
-<path d='M357.602 81.52H361.59' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M418.266 116.613V116.211' fill='#399' clip-path='url(#clip2)'/>
-<path d='M418.266 116.613V116.211' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M416.274 116.211H420.258' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M418.266 116.613V117.016' fill='#399' clip-path='url(#clip2)'/>
-<path d='M418.266 116.613V117.016' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M420.257 117.016H416.273' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M476.934 81.519' fill='#399' clip-path='url(#clip2)'/>
-<path d='M474.942 81.52H478.926' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M476.934 81.519' fill='#399' clip-path='url(#clip2)'/>
-<path d='M474.942 81.52H478.926' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M187.199 249.281H190.438V175.133H187.199ZM245.871 249.281H249.106V171.574H245.871ZM304.539 249.281H307.777V81.519H304.539ZM363.207 249.281H366.445V81.519H363.207ZM421.875 249.281H425.113V170.836H421.875ZM480.547 249.281H483.785V171.707H480.547Z' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M187.199 249.281H190.438V175.133H187.199ZM245.871 249.281H249.106V171.574H245.871ZM304.539 249.281H307.777V81.519H304.539ZM363.207 249.281H366.445V81.519H363.207ZM421.875 249.281H425.113V170.836H421.875ZM480.547 249.281H483.785V171.707H480.547Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M188.82 175.133V174.797' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M188.82 175.133V174.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M186.828 174.797H190.813' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M188.82 175.133V175.465' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M188.82 175.133V175.465' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M190.813 175.464H186.828' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M247.488 171.574V171.238' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M247.488 171.574V171.238' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M245.496 171.239H249.48' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M247.488 171.574V171.91' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M247.488 171.574V171.91' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M249.481 171.91H245.496' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M306.156 81.519' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M304.164 81.52H308.148' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M306.156 81.519' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M304.164 81.52H308.148' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M364.828 81.519' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M362.832 81.52H366.82' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M364.828 81.519' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M362.832 81.52H366.82' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M423.496 170.836V169.629' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M423.496 170.836V169.629' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M421.504 169.629H425.488' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M423.496 170.836V172.043' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M423.496 170.836V172.043' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M425.488 172.043H421.504' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M482.164 171.707' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M480.172 171.707H484.156' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M482.164 171.707' fill='#d9b3b3' clip-path='url(#clip2)'/>
-<path d='M480.172 171.707H484.156' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M415.914 310.336H487.762V276.324H415.914Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<g transform='matrix(1 0 0 1 250.949 118.327)'>
-<use x='168.285' y='164.777' xlink:href='#g2-97'/>
-<use x='170.827' y='164.777' xlink:href='#g2-109'/>
-<use x='175.03' y='164.777' xlink:href='#g2-100'/>
-<use x='177.763' y='164.777' xlink:href='#g2-53'/>
-<use x='180.41' y='164.777' xlink:href='#g2-57'/>
-<use x='183.056' y='164.777' xlink:href='#g2-53'/>
-<use x='185.702' y='164.777' xlink:href='#g2-48'/>
-<use x='188.349' y='164.777' xlink:href='#g2-120'/>
-<use x='190.788' y='164.777' xlink:href='#g2-44'/>
-<use x='194.022' y='164.777' xlink:href='#g2-51'/>
-<use x='196.668' y='164.777' xlink:href='#g2-50'/>
-<use x='199.315' y='164.777' xlink:href='#g2-71'/>
-<use x='202.843' y='164.777' xlink:href='#g2-98'/>
-<use x='207.34' y='164.777' xlink:href='#g2-64'/>
-<use x='210.869' y='164.777' xlink:href='#g2-51'/>
-<use x='213.515' y='164.777' xlink:href='#g2-54'/>
-<use x='216.162' y='164.777' xlink:href='#g2-48'/>
-<use x='218.808' y='164.777' xlink:href='#g2-48'/>
-<use x='221.454' y='164.777' xlink:href='#g2-77'/>
-<use x='226.072' y='164.777' xlink:href='#g2-104'/>
-<use x='228.805' y='164.777' xlink:href='#g2-122'/>
-<use x='168.285' y='170.755' xlink:href='#g2-49'/>
-<use x='170.931' y='170.755' xlink:href='#g2-54'/>
-<use x='173.578' y='170.755' xlink:href='#g2-45'/>
-<use x='175.342' y='170.755' xlink:href='#g2-99'/>
-<use x='177.694' y='170.755' xlink:href='#g2-111'/>
-<use x='180.193' y='170.755' xlink:href='#g2-114'/>
-<use x='182.001' y='170.755' xlink:href='#g2-101'/>
-<use x='186.118' y='170.755' xlink:href='#g2-65'/>
-<use x='189.646' y='170.755' xlink:href='#g2-77'/>
-<use x='194.264' y='170.755' xlink:href='#g2-68'/>
-<use x='199.851' y='170.755' xlink:href='#g2-53'/>
-<use x='202.497' y='170.755' xlink:href='#g2-57'/>
-<use x='205.144' y='170.755' xlink:href='#g2-53'/>
-<use x='207.79' y='170.755' xlink:href='#g2-48'/>
-<use x='210.436' y='170.755' xlink:href='#g2-120'/>
-<use x='214.639' y='170.755' xlink:href='#g2-64'/>
-<use x='218.168' y='170.755' xlink:href='#g2-51'/>
-<use x='220.814' y='170.755' xlink:href='#g2-46'/>
-<use x='222.285' y='170.755' xlink:href='#g2-52'/>
-<use x='224.931' y='170.755' xlink:href='#g2-71'/>
-<use x='228.459' y='170.755' xlink:href='#g2-104'/>
-<use x='231.192' y='170.755' xlink:href='#g2-122'/>
-<use x='168.285' y='176.733' xlink:href='#g2-85'/>
-<use x='171.917' y='176.733' xlink:href='#g2-98'/>
-<use x='174.65' y='176.733' xlink:href='#g2-117'/>
-<use x='177.383' y='176.733' xlink:href='#g2-110'/>
-<use x='180.116' y='176.733' xlink:href='#g2-116'/>
-<use x='182.027' y='176.733' xlink:href='#g2-117'/>
-<use x='186.524' y='176.733' xlink:href='#g2-50'/>
-<use x='189.17' y='176.733' xlink:href='#g2-48'/>
-<use x='191.817' y='176.733' xlink:href='#g2-46'/>
-<use x='193.287' y='176.733' xlink:href='#g2-48'/>
-<use x='195.933' y='176.733' xlink:href='#g2-52'/>
-<use x='198.58' y='176.733' xlink:href='#g2-44'/>
-<use x='201.814' y='176.733' xlink:href='#g2-71'/>
-<use x='205.343' y='176.733' xlink:href='#g2-67'/>
-<use x='208.724' y='176.733' xlink:href='#g2-67'/>
-<use x='213.87' y='176.733' xlink:href='#g2-57'/>
-<use x='216.516' y='176.733' xlink:href='#g2-46'/>
-<use x='217.986' y='176.733' xlink:href='#g2-51'/>
-<use x='220.633' y='176.733' xlink:href='#g2-46'/>
-<use x='222.103' y='176.733' xlink:href='#g2-48'/>
-<use x='168.285' y='182.71' xlink:href='#g2-51'/>
-<use x='170.931' y='182.71' xlink:href='#g2-50'/>
-<use x='175.342' y='182.71' xlink:href='#g2-108'/>
-<use x='176.604' y='182.71' xlink:href='#g2-111'/>
-<use x='179.251' y='182.71' xlink:href='#g2-103'/>
-<use x='181.897' y='182.71' xlink:href='#g2-105'/>
-<use x='183.16' y='182.71' xlink:href='#g2-99'/>
-<use x='185.512' y='182.71' xlink:href='#g2-97'/>
-<use x='188.055' y='182.71' xlink:href='#g2-108'/>
-<use x='191.082' y='182.71' xlink:href='#g2-99'/>
-<use x='193.434' y='182.71' xlink:href='#g2-111'/>
-<use x='195.933' y='182.71' xlink:href='#g2-114'/>
-<use x='197.741' y='182.71' xlink:href='#g2-101'/>
-<use x='200.093' y='182.71' xlink:href='#g2-115'/>
-<use x='168.285' y='188.688' xlink:href='#g2-50'/>
-<use x='170.931' y='188.688' xlink:href='#g2-48'/>
-<use x='173.578' y='188.688' xlink:href='#g2-50'/>
-<use x='176.224' y='188.688' xlink:href='#g2-49'/>
-<use x='178.87' y='188.688' xlink:href='#g2-45'/>
-<use x='180.635' y='188.688' xlink:href='#g2-48'/>
-<use x='183.281' y='188.688' xlink:href='#g2-49'/>
-<use x='185.927' y='188.688' xlink:href='#g2-45'/>
-<use x='187.692' y='188.688' xlink:href='#g2-51'/>
-<use x='190.338' y='188.688' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -45.308 344.258)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 13.361 344.258)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 72.03 344.258)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 130.699 344.258)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 189.368 344.258)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 248.037 344.258)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -40.078 344.392)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 18.591 344.728)'>
-<use x='168.285' y='188.688' xlink:href='#g2-48'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-57'/>
-<use x='175.048' y='188.688' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 77.26 329.897)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-50'/>
-<use x='175.048' y='188.688' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 135.929 346.003)'>
-<use x='168.285' y='188.688' xlink:href='#g2-48'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-57'/>
-<use x='175.048' y='188.688' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 194.598 338.688)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 253.267 342.782)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 -34.847 343.788)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 23.822 343.05)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 82.491 305.94)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-53'/>
-<use x='175.048' y='188.688' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 141.16 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-49'/>
-<use x='176.558' y='188.688' xlink:href='#g2-53'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-52'/>
-<use x='183.321' y='188.688' xlink:href='#g2-53'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 199.829 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-54'/>
-<use x='176.558' y='188.688' xlink:href='#g2-49'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-49'/>
-<use x='183.321' y='188.688' xlink:href='#g2-53'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 258.498 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-50'/>
-<use x='176.558' y='188.688' xlink:href='#g2-50'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-52'/>
-<use x='183.321' y='188.688' xlink:href='#g2-57'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -29.617 338.353)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 29.052 336.071)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-49'/>
-<use x='175.048' y='188.688' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 87.721 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-50'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-55'/>
-<use x='180.675' y='188.688' xlink:href='#g2-49'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 146.39 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-50'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-53'/>
-<use x='180.675' y='188.688' xlink:href='#g2-48'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 205.059 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-52'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-48'/>
-<use x='180.675' y='188.688' xlink:href='#g2-56'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 263.728 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-50'/>
-<use x='176.558' y='188.688' xlink:href='#g2-50'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-57'/>
-<use x='183.321' y='188.688' xlink:href='#g2-56'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -24.386 319.563)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-51'/>
-<use x='175.048' y='188.688' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 34.283 309.296)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-53'/>
-<use x='175.048' y='188.688' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.952 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-56'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-57'/>
-<use x='180.675' y='188.688' xlink:href='#g2-54'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 151.621 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-51'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-51'/>
-<use x='180.675' y='188.688' xlink:href='#g2-55'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 210.29 328.488)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-50'/>
-<use x='175.048' y='188.688' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 268.959 344.258)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -19.156 330.031)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-50'/>
-<use x='175.048' y='188.688' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 39.513 338.218)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 98.182 272.387)'>
-<use x='168.285' y='188.688' xlink:href='#g2-50'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 156.851 319.563)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-51'/>
-<use x='175.048' y='188.688' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 215.52 348.553)'>
-<use x='168.285' y='188.688' xlink:href='#g2-48'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-57'/>
-<use x='175.048' y='188.688' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 274.189 345.734)'>
-<use x='168.285' y='188.688' xlink:href='#g2-48'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-57'/>
-<use x='175.048' y='188.688' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 -13.925 335.87)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-49'/>
-<use x='175.048' y='188.688' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 44.744 335.87)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-49'/>
-<use x='175.048' y='188.688' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 103.413 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-49'/>
-<use x='176.558' y='188.688' xlink:href='#g2-50'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-51'/>
-<use x='183.321' y='188.688' xlink:href='#g2-54'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 162.082 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-49'/>
-<use x='176.558' y='188.688' xlink:href='#g2-50'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-57'/>
-<use x='183.321' y='188.688' xlink:href='#g2-51'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 220.751 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-49'/>
-<use x='176.558' y='188.688' xlink:href='#g2-48'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-52'/>
-<use x='183.321' y='188.688' xlink:href='#g2-50'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 279.42 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-49'/>
-<use x='176.558' y='188.688' xlink:href='#g2-49'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-49'/>
-<use x='183.321' y='188.688' xlink:href='#g2-51'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -8.695 306.746)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-53'/>
-<use x='175.048' y='188.688' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.974 340.097)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-48'/>
-<use x='175.048' y='188.688' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 108.643 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-54'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-55'/>
-<use x='180.675' y='188.688' xlink:href='#g2-57'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 167.312 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-49'/>
-<use x='176.558' y='188.688' xlink:href='#g2-49'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-49'/>
-<use x='183.321' y='188.688' xlink:href='#g2-52'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.981 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-56'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-52'/>
-<use x='180.675' y='188.688' xlink:href='#g2-50'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 284.65 345.734)'>
-<use x='168.285' y='188.688' xlink:href='#g2-48'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-57'/>
-<use x='175.048' y='188.688' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 -3.465 327.28)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-50'/>
-<use x='175.048' y='188.688' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 55.204 325.468)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-50'/>
-<use x='175.048' y='188.688' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.873 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-49'/>
-<use x='176.558' y='188.688' xlink:href='#g2-56'/>
-<use x='179.205' y='188.688' xlink:href='#g2-46'/>
-<use x='180.675' y='188.688' xlink:href='#g2-52'/>
-<use x='183.321' y='188.688' xlink:href='#g2-51'/>
-<use x='185.968' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 172.542 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-53'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-55'/>
-<use x='180.675' y='188.688' xlink:href='#g2-56'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 231.211 278.695)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-57'/>
-<use x='175.048' y='188.688' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 289.88 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-52'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-56'/>
-<use x='180.675' y='188.688' xlink:href='#g2-52'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 1.766 337.212)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-49'/>
-<use x='175.048' y='188.688' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 60.435 333.655)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-49'/>
-<use x='175.048' y='188.688' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 119.104 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-51'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-53'/>
-<use x='180.675' y='188.688' xlink:href='#g2-55'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 177.773 243.599)'>
-<use x='163.396' y='188.688' xlink:href='#g4-1'/>
-<use x='166.901' y='188.688' xlink:href='#g4-1'/>
-<use x='170.407' y='188.688' xlink:href='#g4-1'/>
-<use x='173.912' y='188.688' xlink:href='#g2-50'/>
-<use x='176.558' y='188.688' xlink:href='#g2-46'/>
-<use x='178.029' y='188.688' xlink:href='#g2-53'/>
-<use x='180.675' y='188.688' xlink:href='#g2-53'/>
-<use x='183.321' y='188.688' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 236.442 332.917)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-49'/>
-<use x='175.048' y='188.688' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 295.111 333.789)'>
-<use x='168.285' y='188.688' xlink:href='#g2-49'/>
-<use x='170.931' y='188.688' xlink:href='#g2-46'/>
-<use x='172.401' y='188.688' xlink:href='#g2-49'/>
-<use x='175.048' y='188.688' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -75.53 388.945)'>
-<use x='168.285' y='188.688' xlink:href='#g1-82'/>
-<use x='174.255' y='188.688' xlink:href='#g1-101'/>
-<use x='178.351' y='188.688' xlink:href='#g1-108'/>
-<use x='180.551' y='188.688' xlink:href='#g1-97'/>
-<use x='184.979' y='188.688' xlink:href='#g1-116'/>
-<use x='188.307' y='188.688' xlink:href='#g1-105'/>
-<use x='190.507' y='188.688' xlink:href='#g1-118'/>
-<use x='194.755' y='188.688' xlink:href='#g1-101'/>
-<use x='201.922' y='188.688' xlink:href='#g1-116'/>
-<use x='205.25' y='188.688' xlink:href='#g1-105'/>
-<use x='207.45' y='188.688' xlink:href='#g1-109'/>
-<use x='214.77' y='188.688' xlink:href='#g1-101'/>
-<use x='221.937' y='188.688' xlink:href='#g3-40'/>
-<use x='225.231' y='188.688' xlink:href='#g3-108'/>
-<use x='227.251' y='188.688' xlink:href='#g3-111'/>
-<use x='231.25' y='188.688' xlink:href='#g3-119'/>
-<use x='236.799' y='188.688' xlink:href='#g3-101'/>
-<use x='240.562' y='188.688' xlink:href='#g3-114'/>
-<use x='246.277' y='188.688' xlink:href='#g3-105'/>
-<use x='248.297' y='188.688' xlink:href='#g3-115'/>
-<use x='254.366' y='188.688' xlink:href='#g3-98'/>
-<use x='258.974' y='188.688' xlink:href='#g3-101'/>
-<use x='262.738' y='188.688' xlink:href='#g3-116'/>
-<use x='265.796' y='188.688' xlink:href='#g3-116'/>
-<use x='268.854' y='188.688' xlink:href='#g3-101'/>
-<use x='272.618' y='188.688' xlink:href='#g3-114'/>
-<use x='275.51' y='188.688' xlink:href='#g3-41'/>
-</g>
-<path d='M136.149 309.68H346.746V279.68H136.149Z' fill='#fff'/>
-<path d='M136.149 309.68H346.746V279.68H136.149Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<path d='M139.336 290.168H142.324V282.199H139.336ZM145.313 290.168H148.301V284.191H145.313Z' fill='#933'/>
-<path d='M139.336 290.168H142.324V282.199H139.336ZM145.313 290.168H148.301V284.191H145.313Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -40.354 114.479)'>
-<use x='191.843' y='175.681' xlink:href='#g3-120'/>
-<use x='195.745' y='175.681' xlink:href='#g3-109'/>
-<use x='202.47' y='175.681' xlink:href='#g3-105'/>
-<use x='204.49' y='175.681' xlink:href='#g3-58'/>
-<use x='206.843' y='175.681' xlink:href='#g0-57'/>
-<use x='210.548' y='175.681' xlink:href='#g0-50'/>
-</g>
-<path d='M177.086 290.168H180.074V282.199H177.086ZM183.063 290.168H186.055V284.191H183.063Z' fill='#bf8080'/>
-<path d='M177.086 290.168H180.074V282.199H177.086ZM183.063 290.168H186.055V284.191H183.063Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -38.403 114.479)'>
-<use x='233.123' y='175.681' xlink:href='#g3-109'/>
-<use x='239.848' y='175.681' xlink:href='#g3-105'/>
-<use x='241.869' y='175.681' xlink:href='#g3-58'/>
-<use x='244.221' y='175.681' xlink:href='#g0-57'/>
-<use x='247.926' y='175.681' xlink:href='#g0-50'/>
-</g>
-<path d='M221.895 290.168H224.883V282.199H221.895ZM227.875 290.168H230.863V284.191H227.875Z' fill='#8080bf'/>
-<path d='M221.895 290.168H224.883V282.199H221.895ZM227.875 290.168H230.863V284.191H227.875Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.441 114.036)'>
-<use x='277.134' y='175.681' xlink:href='#g3-116'/>
-<use x='280.192' y='175.681' xlink:href='#g3-99'/>
-<use x='283.956' y='175.681' xlink:href='#g3-58'/>
-<use x='286.308' y='175.681' xlink:href='#g0-54'/>
-<use x='290.013' y='175.681' xlink:href='#g0-49'/>
-</g>
-<path d='M265.109 290.168H268.098V282.199H265.109ZM271.086 290.168H274.074V284.191H271.086Z' fill='#ffb733'/>
-<path d='M265.109 290.168H268.098V282.199H265.109ZM271.086 290.168H274.074V284.191H271.086Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.04 114.479)'>
-<use x='319.615' y='175.681' xlink:href='#g3-106'/>
-<use x='321.871' y='175.681' xlink:href='#g3-101'/>
-<use x='325.634' y='175.681' xlink:href='#g3-58'/>
-<use x='327.987' y='175.681' xlink:href='#g0-53'/>
-<use x='331.691' y='175.681' xlink:href='#g0-56'/>
-</g>
-<path d='M306.859 290.168H309.848V282.199H306.859ZM312.836 290.168H315.824V284.191H312.836Z' fill='#bf80bf'/>
-<path d='M306.859 290.168H309.848V282.199H306.859ZM312.836 290.168H315.824V284.191H312.836Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -39.932 114.515)'>
-<use x='359.038' y='175.681' xlink:href='#g3-116'/>
-<use x='362.096' y='175.681' xlink:href='#g3-98'/>
-<use x='366.469' y='175.681' xlink:href='#g3-98'/>
-<use x='370.842' y='175.681' xlink:href='#g3-58'/>
-<use x='373.194' y='175.681' xlink:href='#g0-52'/>
-<use x='376.899' y='175.681' xlink:href='#g0-54'/>
-</g>
-<path d='M139.336 303.176H142.324V295.207H139.336ZM145.313 303.176H148.301V297.199H145.313Z' fill='#c96'/>
-<path d='M139.336 303.176H142.324V295.207H139.336ZM145.313 303.176H148.301V297.199H145.313Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.662 114.036)'>
-<use x='191.843' y='188.688' xlink:href='#g3-114'/>
-<use x='194.735' y='188.688' xlink:href='#g3-112'/>
-<use x='199.108' y='188.688' xlink:href='#g3-58'/>
-<use x='201.46' y='188.688' xlink:href='#g0-55'/>
-<use x='205.165' y='188.688' xlink:href='#g0-56'/>
-</g>
-<path d='M177.086 303.176H180.074V295.207H177.086ZM183.063 303.176H186.055V297.199H183.063Z' fill='#80bf80'/>
-<path d='M177.086 303.176H180.074V295.207H177.086ZM183.063 303.176H186.055V297.199H183.063Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -43.882 114.515)'>
-<use x='233.123' y='188.688' xlink:href='#g3-104'/>
-<use x='237.496' y='188.688' xlink:href='#g3-111'/>
-<use x='241.73' y='188.688' xlink:href='#g3-97'/>
-<use x='245.563' y='188.688' xlink:href='#g3-114'/>
-<use x='248.455' y='188.688' xlink:href='#g3-100'/>
-<use x='252.828' y='188.688' xlink:href='#g3-58'/>
-<use x='255.18' y='188.688' xlink:href='#g0-52'/>
-<use x='258.885' y='188.688' xlink:href='#g0-49'/>
-</g>
-<path d='M221.895 303.176H224.883V295.207H221.895ZM227.875 303.176H230.863V297.199H227.875Z' fill='#bfbf80'/>
-<path d='M221.895 303.176H224.883V295.207H221.895ZM227.875 303.176H230.863V297.199H227.875Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -43.084 114.515)'>
-<use x='277.134' y='188.688' xlink:href='#g3-109'/>
-<use x='283.859' y='188.688' xlink:href='#g3-101'/>
-<use x='287.622' y='188.688' xlink:href='#g3-115'/>
-<use x='290.869' y='188.688' xlink:href='#g3-104'/>
-<use x='295.241' y='188.688' xlink:href='#g3-58'/>
-<use x='297.593' y='188.688' xlink:href='#g0-52'/>
-<use x='301.298' y='188.688' xlink:href='#g0-49'/>
-</g>
-<path d='M265.109 303.176H268.098V295.207H265.109ZM271.086 303.176H274.074V297.199H271.086Z' fill='#399'/>
-<path d='M265.109 303.176H268.098V295.207H265.109ZM271.086 303.176H274.074V297.199H271.086Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -42.353 114.515)'>
-<use x='319.615' y='188.688' xlink:href='#g3-103'/>
-<use x='323.849' y='188.688' xlink:href='#g3-108'/>
-<use x='325.869' y='188.688' xlink:href='#g3-105'/>
-<use x='327.89' y='188.688' xlink:href='#g3-98'/>
-<use x='332.498' y='188.688' xlink:href='#g3-99'/>
-<use x='336.261' y='188.688' xlink:href='#g3-58'/>
-<use x='338.614' y='188.688' xlink:href='#g0-51'/>
-<use x='342.318' y='188.688' xlink:href='#g0-57'/>
-</g>
-<path d='M306.859 303.176H309.848V295.207H306.859ZM312.836 303.176H315.824V297.199H312.836Z' fill='#d9b3b3'/>
-<path d='M306.859 303.176H309.848V295.207H306.859ZM312.836 303.176H315.824V297.199H312.836Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -40.026 114.479)'>
-<use x='359.038' y='188.688' xlink:href='#g3-115'/>
-<use x='362.285' y='188.688' xlink:href='#g3-109'/>
-<use x='369.009' y='188.688' xlink:href='#g3-105'/>
-<use x='371.03' y='188.688' xlink:href='#g3-58'/>
-<use x='373.382' y='188.688' xlink:href='#g0-54'/>
-<use x='377.087' y='188.688' xlink:href='#g0-50'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-a.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-a.svg
deleted file mode 100644
index bc91c21..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-a.svg
+++ /dev/null
@@ -1,955 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.9.1 -->
-<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='381.629pt' height='170.383pt' viewBox='52.934 54.994 381.629 170.383'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip3'>
-<path d='M82.148 209.23H434.164V83.984H82.148Z'/>
-</clipPath>
-<use id='g3-40' xlink:href='#g0-40' transform='scale(1.143)'/>
-<use id='g3-41' xlink:href='#g0-41' transform='scale(1.143)'/>
-<use id='g3-78' xlink:href='#g0-78' transform='scale(1.143)'/>
-<use id='g3-97' xlink:href='#g0-97' transform='scale(1.143)'/>
-<use id='g3-98' xlink:href='#g0-98' transform='scale(1.143)'/>
-<use id='g3-99' xlink:href='#g0-99' transform='scale(1.143)'/>
-<use id='g3-100' xlink:href='#g0-100' transform='scale(1.143)'/>
-<use id='g3-101' xlink:href='#g0-101' transform='scale(1.143)'/>
-<use id='g3-102' xlink:href='#g0-102' transform='scale(1.143)'/>
-<use id='g3-105' xlink:href='#g0-105' transform='scale(1.143)'/>
-<use id='g3-108' xlink:href='#g0-108' transform='scale(1.143)'/>
-<use id='g3-109' xlink:href='#g0-109' transform='scale(1.143)'/>
-<use id='g3-110' xlink:href='#g0-110' transform='scale(1.143)'/>
-<use id='g3-111' xlink:href='#g0-111' transform='scale(1.143)'/>
-<use id='g3-112' xlink:href='#g0-112' transform='scale(1.143)'/>
-<use id='g3-114' xlink:href='#g0-114' transform='scale(1.143)'/>
-<use id='g3-115' xlink:href='#g0-115' transform='scale(1.143)'/>
-<use id='g3-116' xlink:href='#g0-116' transform='scale(1.143)'/>
-<use id='g3-119' xlink:href='#g0-119' transform='scale(1.143)'/>
-<use id='g2-46' xlink:href='#g0-46' transform='scale(.714)'/>
-<use id='g2-48' xlink:href='#g0-48' transform='scale(.714)'/>
-<use id='g2-49' xlink:href='#g0-49' transform='scale(.714)'/>
-<use id='g2-50' xlink:href='#g0-50' transform='scale(.714)'/>
-<use id='g2-51' xlink:href='#g0-51' transform='scale(.714)'/>
-<use id='g2-52' xlink:href='#g0-52' transform='scale(.714)'/>
-<use id='g2-53' xlink:href='#g0-53' transform='scale(.714)'/>
-<use id='g2-54' xlink:href='#g0-54' transform='scale(.714)'/>
-<use id='g2-55' xlink:href='#g0-55' transform='scale(.714)'/>
-<use id='g2-56' xlink:href='#g0-56' transform='scale(.714)'/>
-<use id='g2-57' xlink:href='#g0-57' transform='scale(.714)'/>
-<use id='g2-120' xlink:href='#g0-120' transform='scale(.714)'/>
-<path id='g4-1' d='M1.445-1.245C1.445-1.41 1.305-1.549 1.141-1.549S.837-1.41 .837-1.245S.976-.941 1.141-.941S1.445-1.081 1.445-1.245Z'/>
-<path id='g1-82' d='M3.891-2.914C4.806-3.165 5.452-3.811 5.452-4.546C5.452-5.469 4.411-6.223 3.129-6.223H.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891-2.914ZM1.704-3.407V-5.694H3.022C4.062-5.694 4.671-5.192 4.671-4.546C4.671-3.963 4.125-3.407 3.022-3.407H1.704Z'/>
-<path id='g1-97' d='M3.694-2.591C3.694-3.479 3.04-4.133 2.152-4.133C1.569-4.133 1.139-3.981 .708-3.739L.762-3.102C1.21-3.434 1.65-3.569 2.143-3.569C2.645-3.569 2.95-3.165 2.95-2.582V-2.206C1.408-2.17 .395-1.766 .395-1.04C.395-.619 .672 .099 1.453 .099C1.632 .099 2.412 .081 2.977-.341V0H3.694V-2.591ZM2.95-1.255C2.95-1.067 2.95-.843 2.627-.655C2.403-.52 2.107-.484 1.928-.484C1.47-.484 1.085-.699 1.085-1.058C1.085-1.695 2.833-1.722 2.95-1.722V-1.255Z'/>
-<path id='g1-101' d='M3.829-1.964C3.829-2.242 3.82-2.923 3.47-3.461C3.093-4.026 2.52-4.133 2.179-4.133C1.139-4.133 .314-3.174 .314-2.026C.314-.843 1.193 .099 2.313 .099C2.744 .099 3.264-.009 3.784-.341L3.73-.959C3.165-.556 2.636-.484 2.322-.484C1.578-.484 1.004-1.139 .977-1.964H3.829ZM1.031-2.493C1.175-3.067 1.614-3.551 2.179-3.551C2.511-3.551 3.12-3.398 3.291-2.493H1.031Z'/>
-<path id='g1-105' d='M1.524-6.133H.664V-5.272H1.524V-6.133ZM1.453-3.981H.735V0H1.453V-3.981Z'/>
-<path id='g1-108' d='M1.453-6.223H.735V0H1.453V-6.223Z'/>
-<path id='g1-109' d='M6.581-2.663C6.581-3.327 6.402-4.08 5.317-4.08C4.564-4.08 4.142-3.622 3.927-3.344C3.865-3.524 3.676-4.08 2.762-4.08C2.053-4.08 1.623-3.667 1.417-3.398V-4.035H.726V0H1.47V-2.188C1.47-2.78 1.704-3.497 2.385-3.497C3.282-3.497 3.282-2.86 3.282-2.6V0H4.026V-2.188C4.026-2.78 4.259-3.497 4.94-3.497C5.837-3.497 5.837-2.86 5.837-2.6V0H6.581V-2.663Z'/>
-<path id='g1-116' d='M1.623-3.425H2.914V-3.981H1.623V-5.12H.959V-3.981H.17V-3.425H.933V-1.13C.933-.601 1.049 .099 1.704 .099C2.098 .099 2.564 .018 3.067-.233L2.914-.798C2.681-.619 2.367-.511 2.089-.511C1.739-.511 1.623-.825 1.623-1.291V-3.425Z'/>
-<path id='g1-118' d='M4.116-3.981H3.407L2.699-2.161C2.52-1.695 2.188-.825 2.143-.493H2.125C2.107-.646 2.08-.816 1.587-2.107C1.318-2.833 .879-3.927 .861-3.981H.126L1.704 0H2.537L4.116-3.981Z'/>
-<path id='g0-40' d='M2.127-5.23C2.008-5.23 1.995-5.23 1.911-5.154C1.032-4.387 .586-3.145 .586-1.743C.586-.425 .983 .844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 .063C1.276-.481 1.193-1.053 1.193-1.743C1.193-4.156 2.322-5.112 2.462-5.23H2.127Z'/>
-<path id='g0-41' d='M.746 1.743C.865 1.743 .879 1.743 .962 1.667C1.841 .9 2.287-.342 2.287-1.743C2.287-3.062 1.89-4.331 .969-5.14C.879-5.23 .865-5.23 .746-5.23H.411C.432-5.216 1.109-4.638 1.43-3.55C1.597-3.006 1.681-2.434 1.681-1.743C1.681 .669 .551 1.625 .411 1.743H.746Z'/>
-<path id='g0-46' d='M1.339-.628H.711V0H1.339V-.628Z'/>
-<path id='g0-48' d='M3.403-2.267C3.403-2.601 3.403-3.417 3.075-3.989C2.72-4.617 2.183-4.721 1.848-4.721C1.534-4.721 .99-4.624 .642-4.024C.307-3.466 .293-2.706 .293-2.267C.293-1.75 .321-1.116 .614-.586C.921-.021 1.437 .146 1.848 .146C2.545 .146 2.929-.258 3.138-.697C3.382-1.193 3.403-1.834 3.403-2.267ZM1.848-.314C1.555-.314 1.22-.481 1.046-.983C.907-1.409 .9-1.848 .9-2.357C.9-2.999 .9-4.261 1.848-4.261S2.797-2.999 2.797-2.357C2.797-1.897 2.797-1.374 2.629-.928C2.434-.425 2.078-.314 1.848-.314Z'/>
-<path id='g0-49' d='M2.239-4.721H2.085C1.632-4.303 1.06-4.275 .642-4.261V-3.822C.914-3.829 1.262-3.843 1.611-3.982V-.439H.683V0H3.166V-.439H2.239V-4.721Z'/>
-<path id='g0-50' d='M1.974-.537C1.89-.537 1.806-.53 1.723-.53H.928L2.008-1.485C2.134-1.597 2.476-1.855 2.608-1.967C2.915-2.246 3.327-2.608 3.327-3.215C3.327-4.003 2.741-4.721 1.743-4.721C1.004-4.721 .544-4.324 .307-3.612L.635-3.201C.795-3.787 1.039-4.24 1.646-4.24C2.232-4.24 2.678-3.829 2.678-3.201C2.678-2.622 2.336-2.294 1.918-1.897C1.778-1.757 1.402-1.444 1.255-1.304C1.053-1.123 .572-.656 .37-.481V0H3.327V-.537H1.974Z'/>
-<path id='g0-51' d='M.697-3.578C.983-4.135 1.485-4.289 1.82-4.289C2.232-4.289 2.538-4.052 2.538-3.654C2.538-3.285 2.287-2.831 1.757-2.741C1.723-2.734 1.695-2.734 1.234-2.699V-2.239H1.778C2.441-2.239 2.685-1.716 2.685-1.276C2.685-.732 2.35-.314 1.806-.314C1.311-.314 .746-.551 .398-.997L.307-.544C.711-.091 1.276 .146 1.82 .146C2.734 .146 3.389-.537 3.389-1.269C3.389-1.841 2.929-2.301 2.378-2.462C2.908-2.734 3.18-3.201 3.18-3.654C3.18-4.247 2.573-4.721 1.827-4.721C1.213-4.721 .704-4.4 .411-3.982L.697-3.578Z'/>
-<path id='g0-52' d='M2.762-1.165H3.487V-1.625H2.762V-4.575H2.071L.209-1.625V-1.165H2.162V0H2.762V-1.165ZM.802-1.625C1.011-1.953 2.211-3.815 2.211-4.233V-1.625H.802Z'/>
-<path id='g0-53' d='M1.144-4.094H3.075V-4.575H.586V-1.967H1.095C1.262-2.343 1.59-2.511 1.904-2.511C2.19-2.511 2.622-2.315 2.622-1.43C2.622-.516 2.043-.314 1.688-.314C1.227-.314 .781-.558 .544-.955L.279-.537C.621-.112 1.137 .146 1.688 .146C2.608 .146 3.327-.565 3.327-1.416C3.327-2.28 2.685-2.971 1.918-2.971C1.618-2.971 1.353-2.866 1.144-2.692V-4.094Z'/>
-<path id='g0-54' d='M3.062-4.582C2.685-4.721 2.42-4.721 2.287-4.721C1.227-4.721 .307-3.724 .307-2.253C.307-.363 1.158 .146 1.862 .146C2.427 .146 2.72-.119 2.936-.342C3.382-.816 3.389-1.311 3.389-1.555C3.389-2.469 2.894-3.229 2.218-3.229C1.534-3.229 1.165-2.873 .962-2.671C1.053-3.626 1.541-4.289 2.294-4.289C2.434-4.289 2.713-4.275 3.062-4.142V-4.582ZM.969-1.534C.969-1.576 .969-1.681 .976-1.716C.976-2.19 1.276-2.769 1.897-2.769C2.748-2.769 2.748-1.792 2.748-1.555C2.748-1.29 2.748-.997 2.559-.704C2.392-.453 2.183-.314 1.862-.314C1.123-.314 1.004-1.227 .969-1.534Z'/>
-<path id='g0-55' d='M1.723-4.038C1.806-4.038 1.89-4.045 1.974-4.045H2.852C1.792-3.006 1.116-1.548 1.116 .07H1.771C1.771-1.967 2.762-3.431 3.389-4.087V-4.575H.307V-4.038H1.723Z'/>
-<path id='g0-56' d='M2.385-2.469C2.845-2.615 3.285-2.985 3.285-3.501C3.285-4.135 2.678-4.721 1.848-4.721S.411-4.135 .411-3.501C.411-2.978 .865-2.608 1.311-2.469C.697-2.28 .307-1.806 .307-1.269C.307-.523 .969 .146 1.848 .146S3.389-.523 3.389-1.269C3.389-1.806 2.992-2.28 2.385-2.469ZM1.848-2.699C1.353-2.699 .948-2.985 .948-3.494C.948-3.94 1.262-4.289 1.848-4.289C2.427-4.289 2.748-3.94 2.748-3.494C2.748-2.999 2.357-2.699 1.848-2.699ZM1.848-.314C1.367-.314 .941-.621 .941-1.276C.941-1.904 1.346-2.239 1.848-2.239S2.755-1.897 2.755-1.276C2.755-.621 2.322-.314 1.848-.314Z'/>
-<path id='g0-57' d='M.537-.174C.879 .077 1.193 .146 1.52 .146C2.497 .146 3.389-.837 3.389-2.336C3.389-4.24 2.545-4.721 1.876-4.721C1.255-4.721 .969-4.428 .767-4.226C.321-3.773 .307-3.292 .307-3.02C.307-2.12 .795-1.346 1.478-1.346C2.267-1.346 2.699-1.869 2.734-1.911C2.636-.802 2.092-.314 1.52-.314C1.158-.314 .934-.446 .774-.579L.537-.174ZM2.713-3.027C2.72-2.985 2.72-2.915 2.72-2.873C2.72-2.357 2.406-1.806 1.799-1.806C1.534-1.806 1.325-1.883 1.144-2.169C.962-2.441 .948-2.706 .948-3.02C.948-3.292 .948-3.605 1.165-3.912C1.311-4.122 1.52-4.289 1.869-4.289C2.545-4.289 2.692-3.473 2.713-3.027Z'/>
-<path id='g0-78' d='M1.646-4.84H.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-.551H3.933L1.646-4.84Z'/>
-<path id='g0-97' d='M2.971-2.008C2.971-2.72 2.427-3.201 1.736-3.201C1.297-3.201 .962-3.11 .572-2.901L.614-2.392C.844-2.545 1.186-2.755 1.736-2.755C2.043-2.755 2.364-2.525 2.364-2.001V-1.723C1.332-1.688 .314-1.471 .314-.823C.314-.474 .551 .07 1.165 .07C1.465 .07 2.015 .007 2.385-.265V0H2.971V-2.008ZM2.364-.99C2.364-.851 2.364-.669 2.12-.523C1.897-.398 1.625-.391 1.548-.391C1.165-.391 .872-.565 .872-.83C.872-1.276 2.05-1.318 2.364-1.332V-.99Z'/>
-<path id='g0-98' d='M1.179-4.84H.593V0H1.2V-.328C1.353-.195 1.688 .07 2.197 .07C2.957 .07 3.571-.642 3.571-1.555C3.571-2.399 3.089-3.166 2.392-3.166C1.953-3.166 1.527-3.027 1.179-2.769V-4.84ZM1.2-2.197C1.2-2.308 1.2-2.392 1.444-2.552C1.548-2.615 1.736-2.706 1.974-2.706C2.441-2.706 2.964-2.392 2.964-1.555C2.964-.704 2.385-.391 1.897-.391C1.639-.391 1.395-.509 1.2-.823V-2.197Z'/>
-<path id='g0-99' d='M3.034-.76C2.685-.537 2.308-.411 1.876-.411C1.234-.411 .858-.928 .858-1.555C.858-2.092 1.137-2.72 1.897-2.72C2.371-2.72 2.594-2.622 2.95-2.399L3.041-2.901C2.622-3.11 2.441-3.201 1.897-3.201C.851-3.201 .251-2.357 .251-1.548C.251-.697 .921 .07 1.869 .07C2.357 .07 2.776-.077 3.075-.251L3.034-.76Z'/>
-<path id='g0-100' d='M3.229-4.84H2.643V-2.797C2.197-3.124 1.743-3.166 1.541-3.166C.809-3.166 .251-2.434 .251-1.548S.802 .07 1.52 .07C1.953 .07 2.357-.126 2.622-.363V0H3.229V-4.84ZM2.622-.865C2.448-.579 2.183-.391 1.848-.391C1.36-.391 .858-.732 .858-1.541C.858-2.413 1.451-2.706 1.925-2.706C2.204-2.706 2.441-2.587 2.622-2.35V-.865Z'/>
-<path id='g0-101' d='M2.999-.76C2.608-.481 2.169-.391 1.869-.391C1.262-.391 .802-.886 .781-1.527H3.068C3.068-1.848 3.034-2.315 2.762-2.713C2.511-3.068 2.092-3.201 1.75-3.201C.9-3.201 .244-2.455 .244-1.569C.244-.676 .941 .07 1.862 .07C2.267 .07 2.685-.049 3.041-.265L2.999-.76ZM.83-1.946C.99-2.504 1.402-2.741 1.75-2.741C2.057-2.741 2.511-2.594 2.643-1.946H.83Z'/>
-<path id='g0-102' d='M1.325-2.657H2.12V-3.096H1.304V-3.898C1.304-4.38 1.743-4.449 1.974-4.449C2.12-4.449 2.308-4.428 2.566-4.331V-4.84C2.385-4.882 2.169-4.91 1.981-4.91C1.262-4.91 .739-4.394 .739-3.703V-3.096H.202V-2.657H.739V0H1.325V-2.657Z'/>
-<path id='g0-105' d='M1.227-4.784H.523V-4.08H1.227V-4.784ZM1.172-3.096H.586V0H1.172V-3.096Z'/>
-<path id='g0-108' d='M1.172-4.84H.586V0H1.172V-4.84Z'/>
-<path id='g0-109' d='M5.3-2.064C5.3-2.608 5.14-3.166 4.282-3.166C3.696-3.166 3.333-2.824 3.166-2.601C3.096-2.79 2.922-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-1.695C3.243-2.155 3.438-2.706 3.975-2.706C4.693-2.706 4.693-2.218 4.693-2.015V0H5.3V-2.064Z'/>
-<path id='g0-110' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-111' d='M3.487-1.527C3.487-2.448 2.755-3.201 1.848-3.201S.209-2.441 .209-1.527C.209-.642 .948 .07 1.848 .07C2.755 .07 3.487-.642 3.487-1.527ZM1.848-.411C1.297-.411 .816-.816 .816-1.604S1.332-2.741 1.848-2.741C2.371-2.741 2.88-2.378 2.88-1.604C2.88-.809 2.385-.411 1.848-.411Z'/>
-<path id='g0-112' d='M1.2-.328C1.569 .007 1.967 .07 2.204 .07C2.943 .07 3.571-.635 3.571-1.555C3.571-2.392 3.11-3.166 2.42-3.166C2.106-3.166 1.583-3.075 1.179-2.762V-3.096H.593V1.353H1.2V-.328ZM1.2-2.315C1.36-2.511 1.632-2.685 1.967-2.685C2.525-2.685 2.964-2.169 2.964-1.555C2.964-.865 2.441-.391 1.897-.391C1.792-.391 1.618-.404 1.437-.551C1.227-.711 1.2-.816 1.2-.948V-2.315Z'/>
-<path id='g0-114' d='M1.179-1.485C1.179-2.239 1.806-2.643 2.42-2.65V-3.166C1.834-3.159 1.409-2.873 1.13-2.504V-3.145H.593V0H1.179V-1.485Z'/>
-<path id='g0-115' d='M2.545-2.985C2.071-3.18 1.723-3.201 1.471-3.201C1.297-3.201 .244-3.201 .244-2.273C.244-1.946 .425-1.764 .516-1.681C.76-1.437 1.053-1.381 1.423-1.311C1.75-1.248 2.127-1.179 2.127-.844C2.127-.404 1.548-.404 1.451-.404C1.004-.404 .586-.565 .307-.76L.209-.237C.446-.119 .872 .07 1.451 .07C1.764 .07 2.071 .021 2.329-.167C2.587-.363 2.671-.669 2.671-.907C2.671-1.032 2.657-1.304 2.364-1.569C2.106-1.799 1.855-1.848 1.52-1.911C1.109-1.988 .788-2.05 .788-2.357C.788-2.755 1.297-2.755 1.402-2.755C1.799-2.755 2.106-2.671 2.455-2.49L2.545-2.985Z'/>
-<path id='g0-116' d='M1.311-2.657H2.343V-3.096H1.311V-3.982H.774V-3.096H.139V-2.657H.753V-.893C.753-.425 .872 .07 1.374 .07S2.26-.091 2.469-.188L2.35-.635C2.12-.467 1.876-.411 1.681-.411C1.388-.411 1.311-.697 1.311-1.018V-2.657Z'/>
-<path id='g0-119' d='M4.951-3.096H4.407C4.345-2.901 3.954-1.723 3.738-.997C3.682-.795 3.612-.572 3.592-.411H3.585C3.543-.697 3.299-1.451 3.285-1.499L2.769-3.096H2.239C2.036-2.497 1.513-.934 1.458-.425H1.451C1.395-.921 .879-2.462 .767-2.797C.711-2.964 .711-2.978 .676-3.096H.105L1.123 0H1.709C1.716-.028 1.904-.579 2.148-1.353C2.253-1.695 2.462-2.364 2.497-2.671L2.504-2.678C2.518-2.532 2.559-2.378 2.608-2.204S2.706-1.841 2.755-1.681L3.292 0H3.933L4.951-3.096Z'/>
-<path id='g0-120' d='M1.932-1.597L3.285-3.096H2.671L1.681-1.953L.669-3.096H.042L1.437-1.597L0 0H.621L1.681-1.311L2.783 0H3.41L1.932-1.597Z'/>
-</defs>
-<g id='page3'>
-<path d='M140.82 218.086V209.23M199.488 218.086V209.23M258.156 218.086V209.23M316.824 218.086V209.23M375.496 218.086V209.23M140.82 75.129V83.984M199.488 75.129V83.984M258.156 75.129V83.984M316.824 75.129V83.984M375.496 75.129V83.984' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M111.484 213.484V209.23M170.152 213.484V209.23M228.824 213.484V209.23M287.492 213.484V209.23M346.16 213.484V209.23M404.828 213.484V209.23M111.484 79.734V83.984M170.152 79.734V83.984M228.824 79.734V83.984M287.492 79.734V83.984M346.16 79.734V83.984M404.828 79.734V83.984' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M82.148 209.23H86.402M82.148 177.918H86.402M82.148 146.609H86.402M82.148 115.297H86.402M82.148 83.984H86.402M434.164 209.23H429.91M434.164 177.918H429.91M434.164 146.609H429.91M434.164 115.297H429.91M434.164 83.984H429.91' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M82.148 209.23V83.984H434.164V209.23H82.148Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -11.54 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-99'/>
-<use x='118.25' y='188.674' xlink:href='#g3-102'/>
-<use x='120.838' y='188.674' xlink:href='#g3-114'/>
-<use x='123.73' y='188.674' xlink:href='#g3-97'/>
-<use x='127.798' y='188.674' xlink:href='#g3-99'/>
-</g>
-<g transform='matrix(1 0 0 1 45.565 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-108'/>
-<use x='116.507' y='188.674' xlink:href='#g3-101'/>
-<use x='120.271' y='188.674' xlink:href='#g3-97'/>
-<use x='124.339' y='188.674' xlink:href='#g3-110'/>
-<use x='128.711' y='188.674' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 106.188 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-114'/>
-<use x='117.379' y='188.674' xlink:href='#g3-101'/>
-<use x='121.142' y='188.674' xlink:href='#g3-100'/>
-<use x='125.515' y='188.674' xlink:href='#g3-105'/>
-<use x='127.535' y='188.674' xlink:href='#g3-115'/>
-</g>
-<g transform='matrix(1 0 0 1 159.716 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-108'/>
-<use x='116.507' y='188.674' xlink:href='#g3-97'/>
-<use x='120.34' y='188.674' xlink:href='#g3-114'/>
-<use x='123.232' y='188.674' xlink:href='#g3-115'/>
-<use x='126.478' y='188.674' xlink:href='#g3-111'/>
-<use x='130.712' y='188.674' xlink:href='#g3-110'/>
-<use x='135.085' y='188.674' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 215.596 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-109'/>
-<use x='121.211' y='188.674' xlink:href='#g3-115'/>
-<use x='124.458' y='188.674' xlink:href='#g3-116'/>
-<use x='127.516' y='188.674' xlink:href='#g3-114'/>
-<use x='130.408' y='188.674' xlink:href='#g3-101'/>
-<use x='134.171' y='188.674' xlink:href='#g3-115'/>
-<use x='137.418' y='188.674' xlink:href='#g3-115'/>
-<use x='140.664' y='188.674' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 277.158 34.954)'>
-<use x='114.487' y='188.674' xlink:href='#g3-114'/>
-<use x='117.379' y='188.674' xlink:href='#g3-112'/>
-<use x='121.751' y='188.674' xlink:href='#g3-116'/>
-<use x='124.809' y='188.674' xlink:href='#g3-101'/>
-<use x='128.573' y='188.674' xlink:href='#g3-115'/>
-<use x='131.819' y='188.674' xlink:href='#g3-116'/>
-<use x='134.877' y='188.674' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 22.192)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -9.12)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -40.431)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.743)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -103.054)'>
-<use x='114.487' y='188.674' xlink:href='#g2-50'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-120'/>
-</g>
-<path d='M82.148 146.609H434.164' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M86.328 209.23H89.566V146.609H86.328ZM144.996 209.23H148.234V146.609H144.996ZM203.668 209.23H206.902V146.609H203.668ZM262.336 209.23H265.574V146.609H262.336ZM321.004 209.23H324.242V146.609H321.004ZM379.672 209.23H382.91V146.609H379.672Z' fill='#933' clip-path='url(#clip3)'/>
-<path d='M86.328 209.23H89.566V146.609H86.328ZM144.996 209.23H148.234V146.609H144.996ZM203.668 209.23H206.902V146.609H203.668ZM262.336 209.23H265.574V146.609H262.336ZM321.004 209.23H324.242V146.609H321.004ZM379.672 209.23H382.91V146.609H379.672Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M87.949 146.609' fill='#933' clip-path='url(#clip3)'/>
-<path d='M85.953 146.609H89.938' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M87.949 146.609' fill='#933' clip-path='url(#clip3)'/>
-<path d='M85.953 146.609H89.938' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M146.617 146.609V146.105' fill='#933' clip-path='url(#clip3)'/>
-<path d='M146.617 146.609V146.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M144.625 146.105H148.609' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M146.617 146.609V147.109' fill='#933' clip-path='url(#clip3)'/>
-<path d='M146.617 146.609V147.109' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M148.61 147.109H144.625' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M205.285 146.609V146.359' fill='#933' clip-path='url(#clip3)'/>
-<path d='M205.285 146.609V146.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M203.293 146.36H207.277' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M205.285 146.609V146.859' fill='#933' clip-path='url(#clip3)'/>
-<path d='M205.285 146.609V146.859' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M207.278 146.86H203.293' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M263.953 146.609V145.105' fill='#933' clip-path='url(#clip3)'/>
-<path d='M263.953 146.609V145.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M261.961 145.105H265.945' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M263.953 146.609V148.109' fill='#933' clip-path='url(#clip3)'/>
-<path d='M263.953 146.609V148.109' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M265.949 148.109H261.961' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M322.625 146.609V144.73' fill='#933' clip-path='url(#clip3)'/>
-<path d='M322.625 146.609V144.73' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M320.629 144.73H324.617' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M322.625 146.609V148.488' fill='#933' clip-path='url(#clip3)'/>
-<path d='M322.625 146.609V148.488' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M324.617 148.488H320.633' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M381.293 146.609V140.785' fill='#933' clip-path='url(#clip3)'/>
-<path d='M381.293 146.609V140.785' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M379.301 140.785H383.285' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M381.293 146.609V152.434' fill='#933' clip-path='url(#clip3)'/>
-<path d='M381.293 146.609V152.434' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M383.285 152.434H379.301' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M91.559 209.23H94.797V146.23H91.559ZM150.227 209.23H153.465V146.547H150.227ZM208.899 209.23H212.133V145.293H208.899ZM267.567 209.23H270.805V152.117H267.567ZM326.234 209.23H329.473V140.973H326.234ZM384.902 209.23H388.141V154.562H384.902Z' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M91.559 209.23H94.797V146.23H91.559ZM150.227 209.23H153.465V146.547H150.227ZM208.899 209.23H212.133V145.293H208.899ZM267.567 209.23H270.805V152.117H267.567ZM326.234 209.23H329.473V140.973H326.234ZM384.902 209.23H388.141V154.562H384.902Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M93.18 146.23V146.168' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M93.18 146.23V146.168' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M91.184 146.168H95.168' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M93.18 146.23V146.297' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M93.18 146.23V146.297' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M95.172 146.297H91.187' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M151.848 146.547V146.297' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M151.848 146.547V146.297' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M149.855 146.297H153.84' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M151.848 146.547V146.797' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M151.848 146.547V146.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M153.84 146.797H149.855' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M210.516 145.293V145.105' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M210.516 145.293V145.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M208.523 145.105H212.507' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M210.516 145.293V145.48' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M210.516 145.293V145.48' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M212.508 145.481H208.523' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M269.184 152.117V151.555' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M269.184 152.117V151.555' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M267.191 151.554H271.175' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M269.184 152.117V152.684' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M269.184 152.117V152.684' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M271.179 152.684H267.191' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M327.856 140.973V137.402' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M327.856 140.973V137.402' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M325.859 137.403H329.847' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M327.856 140.973V144.543' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M327.856 140.973V144.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M329.847 144.543H325.863' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M386.524 154.562V147.734' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M386.524 154.562V147.734' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M384.531 147.734H388.515' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M386.524 154.562V161.387' fill='#bf8080' clip-path='url(#clip3)'/>
-<path d='M386.524 154.562V161.387' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M388.515 161.387H384.531' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M96.789 209.23H100.027V145.293H96.789ZM155.457 209.23H158.695V143.101H155.457ZM214.129 209.23H217.363V144.668H214.129ZM272.797 209.23H276.035V141.973H272.797ZM331.465 209.23H334.703V143.101H331.465ZM390.133 209.23H393.371V83.984H390.133Z' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M96.789 209.23H100.027V145.293H96.789ZM155.457 209.23H158.695V143.101H155.457ZM214.129 209.23H217.363V144.668H214.129ZM272.797 209.23H276.035V141.973H272.797ZM331.465 209.23H334.703V143.101H331.465ZM390.133 209.23H393.371V83.984H390.133Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M98.41 145.293V145.23' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M98.41 145.293V145.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M96.414 145.23H100.399' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M98.41 145.293V145.355' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M98.41 145.293V145.355' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M100.402 145.356H96.418' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M157.078 143.101V142.601' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M157.078 143.101V142.601' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M155.086 142.601H159.071' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M157.078 143.101V143.601' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M157.078 143.101V143.601' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M159.071 143.601H155.086' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M215.746 144.668V144.543' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M215.746 144.668V144.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M213.754 144.543H217.738' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M215.746 144.668V144.793' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M215.746 144.668V144.793' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M217.739 144.793H213.754' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M274.414 141.973V141.535' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M274.414 141.973V141.535' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M272.422 141.536H276.406' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M274.414 141.973V142.414' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M274.414 141.973V142.414' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M276.41 142.414H272.422' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M333.086 143.101V141.66' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M333.086 143.101V141.66' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M331.09 141.66H335.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M333.086 143.101V144.543' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M333.086 143.101V144.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M335.078 144.543H331.094' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M391.754 83.984' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M389.762 83.984H393.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M391.754 83.984' fill='#8080bf' clip-path='url(#clip3)'/>
-<path d='M389.762 83.984H393.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M102.02 209.23H105.258V143.289H102.02ZM160.688 209.23H163.926V146.484H160.688ZM219.359 209.23H222.594V134.711H219.359ZM278.027 209.23H281.266V139.531H278.027ZM336.695 209.23H339.934V83.984H336.695ZM395.363 209.23H398.602V128.008H395.363Z' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M102.02 209.23H105.258V143.289H102.02ZM160.688 209.23H163.926V146.484H160.688ZM219.359 209.23H222.594V134.711H219.359ZM278.027 209.23H281.266V139.531H278.027ZM336.695 209.23H339.934V83.984H336.695ZM395.363 209.23H398.602V128.008H395.363Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M103.641 143.289' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M101.644 143.289H105.629' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M103.641 143.289' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M101.644 143.289H105.629' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M162.309 146.484V146.168' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M162.309 146.484V146.168' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M160.316 146.168H164.301' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M162.309 146.484V146.797' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M162.309 146.484V146.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M164.301 146.797H160.316' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M220.977 134.711V134.523' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M220.977 134.711V134.523' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M218.984 134.524H222.969' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M220.977 134.711V134.898' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M220.977 134.711V134.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M222.969 134.899H218.984' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M279.645 139.531V139.469' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M279.645 139.531V139.469' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M277.652 139.469H281.636' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M279.645 139.531V139.594' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M279.645 139.531V139.594' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M281.64 139.593H277.652' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M338.317 83.984' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M336.32 83.984H340.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M338.317 83.984' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M336.32 83.984H340.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M396.984 128.008V115.859' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M396.984 128.008V115.859' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M394.992 115.859H398.976' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M396.984 128.008V140.156' fill='#ffb733' clip-path='url(#clip3)'/>
-<path d='M396.984 128.008V140.156' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M398.976 140.156H394.992' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M107.25 209.23H110.488V127.82H107.25ZM165.918 209.23H169.156V145.105H165.918ZM224.59 209.23H227.824V112.98H224.59ZM283.258 209.23H286.496V115.109H283.258ZM341.926 209.23H345.164V103.961H341.926ZM400.594 209.23H403.832V136.715H400.594Z' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M107.25 209.23H110.488V127.82H107.25ZM165.918 209.23H169.156V145.105H165.918ZM224.59 209.23H227.824V112.98H224.59ZM283.258 209.23H286.496V115.109H283.258ZM341.926 209.23H345.164V103.961H341.926ZM400.594 209.23H403.832V136.715H400.594Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M108.871 127.82V127.758' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M108.871 127.82V127.758' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M106.875 127.758H110.86' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M108.871 127.82V127.883' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M108.871 127.82V127.883' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M110.864 127.883H106.879' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M167.539 145.105V144.668' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M167.539 145.105V144.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M165.547 144.668H169.532' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M167.539 145.105V145.543' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M167.539 145.105V145.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M169.532 145.543H165.547' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M226.207 112.98V112.73' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M226.207 112.98V112.73' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M224.215 112.73H228.2' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M226.207 112.98V113.23' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M226.207 112.98V113.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M228.2 113.23H224.215' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M284.875 115.109V113.605' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M284.875 115.109V113.605' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M282.883 113.606H286.868' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M284.875 115.109V116.613' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M284.875 115.109V116.613' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M286.868 116.614H282.883' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M343.547 103.961V102.961' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M343.547 103.961V102.961' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M341.551 102.961H345.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M343.547 103.961V104.965' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M343.547 103.961V104.965' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M345.539 104.965H341.555' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M402.215 136.715V130.137' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M402.215 136.715V130.137' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M400.223 130.136H404.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M402.215 136.715V143.289' fill='#bf80bf' clip-path='url(#clip3)'/>
-<path d='M402.215 136.715V143.289' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M404.207 143.289H400.223' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M112.481 209.23H115.719V144.918H112.481ZM171.149 209.23H174.387V147.984H171.149ZM229.82 209.23H233.055V134.461H229.82ZM288.488 209.23H291.727V147.734H288.488ZM347.156 209.23H350.395V83.984H347.156ZM405.824 209.23H409.063V123.562H405.824Z' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M112.481 209.23H115.719V144.918H112.481ZM171.149 209.23H174.387V147.984H171.149ZM229.82 209.23H233.055V134.461H229.82ZM288.488 209.23H291.727V147.734H288.488ZM347.156 209.23H350.395V83.984H347.156ZM405.824 209.23H409.063V123.562H405.824Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M114.098 144.918V144.855' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M114.098 144.918V144.855' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M112.105 144.856H116.09' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M114.098 144.918V144.98' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M114.098 144.918V144.98' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M116.094 144.981H112.109' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M172.77 147.984V147.359' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M172.77 147.984V147.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M170.777 147.36H174.762' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M172.77 147.984V148.613' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M172.77 147.984V148.613' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M174.762 148.613H170.777' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M231.438 134.461V134.336' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M231.438 134.461V134.336' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M229.445 134.336H233.43' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M231.438 134.461V134.586' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M231.438 134.461V134.586' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M233.43 134.586H229.445' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M290.106 147.734V146.297' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M290.106 147.734V146.297' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M288.113 146.297H292.098' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M290.106 147.734V149.176' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M290.106 147.734V149.176' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M292.098 149.176H288.113' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M348.777 83.984' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M346.781 83.984H350.769' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M348.777 83.984' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M346.781 83.984H350.769' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M407.445 123.562V105.965' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M407.445 123.562V105.965' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M405.453 105.965H409.437' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M407.445 123.562V141.16' fill='#c96' clip-path='url(#clip3)'/>
-<path d='M407.445 123.562V141.16' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M409.437 141.16H405.453' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M117.711 209.23H120.949V143.601H117.711ZM176.379 209.23H179.617V139.781H176.379ZM235.051 209.23H238.285V126.57H235.051ZM293.719 209.23H296.957V83.984H293.719ZM352.387 209.23H355.625V83.984H352.387ZM411.055 209.23H414.293V83.984H411.055Z' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M117.711 209.23H120.949V143.601H117.711ZM176.379 209.23H179.617V139.781H176.379ZM235.051 209.23H238.285V126.57H235.051ZM293.719 209.23H296.957V83.984H293.719ZM352.387 209.23H355.625V83.984H352.387ZM411.055 209.23H414.293V83.984H411.055Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M119.328 143.601V143.539' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M119.328 143.601V143.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M117.336 143.539H121.321' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M119.328 143.601V143.664' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M119.328 143.601V143.664' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M121.325 143.664H117.34' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M178 139.781V139.469' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M178 139.781V139.469' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M176.008 139.469H179.993' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M178 139.781V140.094' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M178 139.781V140.094' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M179.993 140.093H176.008' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M236.668 126.57V126.445' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M236.668 126.57V126.445' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M234.676 126.446H238.661' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M236.668 126.57V126.695' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M236.668 126.57V126.695' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M238.66 126.695H234.675' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M295.336 83.984' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M293.344 83.984H297.329' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M295.336 83.984' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M293.344 83.984H297.329' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M354.008 83.984' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M352.012 83.984H356' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M354.008 83.984' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M352.012 83.984H356' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M412.676 83.984' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M410.684 83.984H414.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M412.676 83.984' fill='#80bf80' clip-path='url(#clip3)'/>
-<path d='M410.684 83.984H414.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M122.941 209.23H126.18V140.094H122.941ZM181.609 209.23H184.848V131.141H181.609ZM240.281 209.23H243.516V136.902H240.281ZM298.949 209.23H302.188V83.984H298.949ZM357.617 209.23H360.856V83.984H357.617ZM416.285 209.23H419.524V83.984H416.285Z' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M122.941 209.23H126.18V140.094H122.941ZM181.609 209.23H184.848V131.141H181.609ZM240.281 209.23H243.516V136.902H240.281ZM298.949 209.23H302.188V83.984H298.949ZM357.617 209.23H360.856V83.984H357.617ZM416.285 209.23H419.524V83.984H416.285Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M124.559 140.094V140.031' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M124.559 140.094V140.031' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M122.566 140.032H126.551' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M124.559 140.094V140.156' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M124.559 140.094V140.156' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M126.555 140.156H122.57' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M183.231 131.141V130.703' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M183.231 131.141V130.703' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M181.238 130.703H185.223' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M183.231 131.141V131.578' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M183.231 131.141V131.578' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M185.223 131.579H181.238' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M241.899 136.902V136.652' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M241.899 136.902V136.652' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M239.906 136.652H243.891' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M241.899 136.902V137.152' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M241.899 136.902V137.152' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M243.891 137.152H239.906' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M300.567 83.984' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M298.574 83.984H302.559' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M300.567 83.984' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M298.574 83.984H302.559' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M359.238 83.984' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M357.242 83.984H361.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M359.238 83.984' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M357.242 83.984H361.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M417.906 83.984' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M415.914 83.984H419.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M417.906 83.984' fill='#bfbf80' clip-path='url(#clip3)'/>
-<path d='M415.914 83.984H419.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M128.172 209.23H131.41V141.348H128.172ZM186.84 209.23H190.078V135.273H186.84ZM245.512 209.23H248.746V138.344H245.512ZM304.18 209.23H307.418V113.73H304.18ZM362.848 209.23H366.086V83.984H362.848ZM421.516 209.23H424.754V127.195H421.516Z' fill='#399' clip-path='url(#clip3)'/>
-<path d='M128.172 209.23H131.41V141.348H128.172ZM186.84 209.23H190.078V135.273H186.84ZM245.512 209.23H248.746V138.344H245.512ZM304.18 209.23H307.418V113.73H304.18ZM362.848 209.23H366.086V83.984H362.848ZM421.516 209.23H424.754V127.195H421.516Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M129.789 141.348V141.285' fill='#399' clip-path='url(#clip3)'/>
-<path d='M129.789 141.348V141.285' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M127.797 141.285H131.782' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M129.789 141.348V141.41' fill='#399' clip-path='url(#clip3)'/>
-<path d='M129.789 141.348V141.41' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M131.785 141.41H127.8' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M188.461 135.273V134.711' fill='#399' clip-path='url(#clip3)'/>
-<path d='M188.461 135.273V134.711' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M186.469 134.711H190.454' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M188.461 135.273V135.836' fill='#399' clip-path='url(#clip3)'/>
-<path d='M188.461 135.273V135.836' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M190.453 135.836H186.468' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M247.129 138.344V138.09' fill='#399' clip-path='url(#clip3)'/>
-<path d='M247.129 138.344V138.09' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M245.137 138.089H249.122' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M247.129 138.344V138.594' fill='#399' clip-path='url(#clip3)'/>
-<path d='M247.129 138.344V138.594' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M249.121 138.593H245.136' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M305.797 113.73V112.855' fill='#399' clip-path='url(#clip3)'/>
-<path d='M305.797 113.73V112.855' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M303.804 112.855H307.789' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M305.797 113.73V114.609' fill='#399' clip-path='url(#clip3)'/>
-<path d='M305.797 113.73V114.609' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M307.789 114.61H303.804' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M364.469 83.984' fill='#399' clip-path='url(#clip3)'/>
-<path d='M362.473 83.984H366.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M364.469 83.984' fill='#399' clip-path='url(#clip3)'/>
-<path d='M362.473 83.984H366.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M423.137 127.195V122.246' fill='#399' clip-path='url(#clip3)'/>
-<path d='M423.137 127.195V122.246' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M421.144 122.246H425.128' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M423.137 127.195V132.141' fill='#399' clip-path='url(#clip3)'/>
-<path d='M423.137 127.195V132.141' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M425.129 132.14H421.144' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M133.402 209.23H136.641V140.91H133.402ZM192.07 209.23H195.309V145.98H192.07ZM250.742 209.23H253.977V141.098H250.742ZM309.41 209.23H312.649V124.816H309.41ZM368.078 209.23H371.317V83.984H368.078ZM426.746 209.23H429.984V123.937H426.746Z' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M133.402 209.23H136.641V140.91H133.402ZM192.07 209.23H195.309V145.98H192.07ZM250.742 209.23H253.977V141.098H250.742ZM309.41 209.23H312.649V124.816H309.41ZM368.078 209.23H371.317V83.984H368.078ZM426.746 209.23H429.984V123.937H426.746Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M135.02 140.91V140.848' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M135.02 140.91V140.848' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M133.027 140.848H137.012' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M135.02 140.91V140.973' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M135.02 140.91V140.973' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M137.016 140.973H133.031' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M193.692 145.98V144.918' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M193.692 145.98V144.918' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M191.699 144.918H195.684' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M193.692 145.98V147.047' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M193.692 145.98V147.047' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M195.684 147.046H191.699' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M252.359 141.098V140.973' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M252.359 141.098V140.973' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M250.367 140.973H254.352' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M252.359 141.098V141.223' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M252.359 141.098V141.223' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M254.352 141.223H250.367' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M311.027 124.816V123.937' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M311.027 124.816V123.937' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M309.035 123.938H313.02' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M311.027 124.816V125.691' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M311.027 124.816V125.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M313.02 125.691H309.035' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M369.699 83.984' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M367.703 83.984H371.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M369.699 83.984' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M367.703 83.984H371.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M428.367 123.937V119.867' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M428.367 123.937V119.867' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M426.375 119.867H430.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M428.367 123.937V128.008' fill='#d9b3b3' clip-path='url(#clip3)'/>
-<path d='M428.367 123.937V128.008' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<path d='M430.36 128.008H426.375' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip3)'/>
-<g transform='matrix(0 -1 1 0 -99.092 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -40.423 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 18.246 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 76.915 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 135.584 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 194.253 255.07)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -93.862 254.695)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 -35.193 255.008)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 23.476 253.755)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 82.145 260.581)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-57'/>
-<use x='121.25' y='188.674' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 140.814 249.434)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 199.483 263.023)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-56'/>
-<use x='121.25' y='188.674' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 -88.631 253.755)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 -29.962 251.563)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 28.707 253.129)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 87.376 250.436)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 146.045 251.563)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 204.714 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-51'/>
-<use x='126.877' y='188.674' xlink:href='#g2-50'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -83.401 251.751)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 -24.732 254.945)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 33.937 243.172)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 92.606 247.994)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 151.275 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-52'/>
-<use x='126.877' y='188.674' xlink:href='#g2-55'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 209.944 236.471)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-51'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.17 236.283)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-51'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -19.501 253.567)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 39.168 221.442)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 97.837 223.571)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 156.506 212.424)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-54'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 215.175 245.176)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -72.94 253.38)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 -14.271 256.448)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-57'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 44.398 242.922)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 103.067 256.198)'>
-<use x='114.487' y='188.674' xlink:href='#g2-48'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-57'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 161.736 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-50'/>
-<use x='126.877' y='188.674' xlink:href='#g2-51'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 220.405 232.025)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-51'/>
-<use x='121.25' y='188.674' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 -67.709 252.064)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 -9.04 248.244)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.629 235.031)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-51'/>
-<use x='121.25' y='188.674' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 108.298 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-53'/>
-<use x='126.877' y='188.674' xlink:href='#g2-54'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 166.967 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-49'/>
-<use x='122.76' y='188.674' xlink:href='#g2-48'/>
-<use x='125.406' y='188.674' xlink:href='#g2-46'/>
-<use x='126.877' y='188.674' xlink:href='#g2-51'/>
-<use x='129.523' y='188.674' xlink:href='#g2-50'/>
-<use x='132.169' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 225.636 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-51'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-48'/>
-<use x='126.877' y='188.674' xlink:href='#g2-56'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -62.479 248.558)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -3.81 239.602)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-50'/>
-<use x='121.25' y='188.674' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 54.859 245.364)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.528 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-55'/>
-<use x='125.406' y='188.674' xlink:href='#g2-51'/>
-<use x='128.053' y='188.674' xlink:href='#g2-46'/>
-<use x='129.523' y='188.674' xlink:href='#g2-52'/>
-<use x='132.169' y='188.674' xlink:href='#g2-53'/>
-<use x='134.816' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 172.197 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-54'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-48'/>
-<use x='126.877' y='188.674' xlink:href='#g2-54'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 230.866 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-50'/>
-<use x='126.877' y='188.674' xlink:href='#g2-52'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -57.249 249.81)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 1.42 243.736)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 60.089 246.804)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-49'/>
-<use x='121.25' y='188.674' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 118.758 222.193)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-53'/>
-<use x='121.25' y='188.674' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 177.427 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-52'/>
-<use x='126.877' y='188.674' xlink:href='#g2-56'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 236.096 235.657)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-51'/>
-<use x='121.25' y='188.674' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 -52.018 249.372)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 6.651 254.444)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 65.32 249.56)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-48'/>
-<use x='121.25' y='188.674' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 123.989 233.278)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-51'/>
-<use x='121.25' y='188.674' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 182.658 192.447)'>
-<use x='109.598' y='188.674' xlink:href='#g4-1'/>
-<use x='113.103' y='188.674' xlink:href='#g4-1'/>
-<use x='116.608' y='188.674' xlink:href='#g4-1'/>
-<use x='120.114' y='188.674' xlink:href='#g2-50'/>
-<use x='122.76' y='188.674' xlink:href='#g2-46'/>
-<use x='124.23' y='188.674' xlink:href='#g2-51'/>
-<use x='126.877' y='188.674' xlink:href='#g2-49'/>
-<use x='129.523' y='188.674' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 241.327 232.401)'>
-<use x='114.487' y='188.674' xlink:href='#g2-49'/>
-<use x='117.133' y='188.674' xlink:href='#g2-46'/>
-<use x='118.603' y='188.674' xlink:href='#g2-51'/>
-<use x='121.25' y='188.674' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -129.314 316.355)'>
-<use x='114.487' y='188.674' xlink:href='#g1-82'/>
-<use x='120.457' y='188.674' xlink:href='#g1-101'/>
-<use x='124.553' y='188.674' xlink:href='#g1-108'/>
-<use x='126.753' y='188.674' xlink:href='#g1-97'/>
-<use x='131.181' y='188.674' xlink:href='#g1-116'/>
-<use x='134.509' y='188.674' xlink:href='#g1-105'/>
-<use x='136.709' y='188.674' xlink:href='#g1-118'/>
-<use x='140.957' y='188.674' xlink:href='#g1-101'/>
-<use x='148.124' y='188.674' xlink:href='#g1-116'/>
-<use x='151.452' y='188.674' xlink:href='#g1-105'/>
-<use x='153.652' y='188.674' xlink:href='#g1-109'/>
-<use x='160.972' y='188.674' xlink:href='#g1-101'/>
-<use x='168.139' y='188.674' xlink:href='#g3-40'/>
-<use x='171.432' y='188.674' xlink:href='#g3-108'/>
-<use x='173.453' y='188.674' xlink:href='#g3-111'/>
-<use x='177.452' y='188.674' xlink:href='#g3-119'/>
-<use x='183' y='188.674' xlink:href='#g3-101'/>
-<use x='186.764' y='188.674' xlink:href='#g3-114'/>
-<use x='192.479' y='188.674' xlink:href='#g3-105'/>
-<use x='194.499' y='188.674' xlink:href='#g3-115'/>
-<use x='200.568' y='188.674' xlink:href='#g3-98'/>
-<use x='205.176' y='188.674' xlink:href='#g3-101'/>
-<use x='208.94' y='188.674' xlink:href='#g3-116'/>
-<use x='211.998' y='188.674' xlink:href='#g3-116'/>
-<use x='215.056' y='188.674' xlink:href='#g3-101'/>
-<use x='218.819' y='188.674' xlink:href='#g3-114'/>
-<use x='221.711' y='188.674' xlink:href='#g3-41'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-b.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-b.svg
deleted file mode 100644
index e8b04a0..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-b.svg
+++ /dev/null
@@ -1,1269 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.9.1 -->
-<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='381.627pt' height='259.632pt' viewBox='106.732 54.993 381.627 259.632'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip4'>
-<path d='M135.949 251.93H487.961V84.164H135.949Z'/>
-</clipPath>
-<use id='g3-40' xlink:href='#g0-40' transform='scale(1.143)'/>
-<use id='g3-41' xlink:href='#g0-41' transform='scale(1.143)'/>
-<use id='g3-45' xlink:href='#g0-45' transform='scale(1.143)'/>
-<use id='g3-49' xlink:href='#g0-49' transform='scale(1.143)'/>
-<use id='g3-54' xlink:href='#g0-54' transform='scale(1.143)'/>
-<use id='g3-56' xlink:href='#g0-56' transform='scale(1.143)'/>
-<use id='g3-58' xlink:href='#g0-58' transform='scale(1.143)'/>
-<use id='g3-78' xlink:href='#g0-78' transform='scale(1.143)'/>
-<use id='g3-97' xlink:href='#g0-97' transform='scale(1.143)'/>
-<use id='g3-98' xlink:href='#g0-98' transform='scale(1.143)'/>
-<use id='g3-99' xlink:href='#g0-99' transform='scale(1.143)'/>
-<use id='g3-100' xlink:href='#g0-100' transform='scale(1.143)'/>
-<use id='g3-101' xlink:href='#g0-101' transform='scale(1.143)'/>
-<use id='g3-103' xlink:href='#g0-103' transform='scale(1.143)'/>
-<use id='g3-104' xlink:href='#g0-104' transform='scale(1.143)'/>
-<use id='g3-105' xlink:href='#g0-105' transform='scale(1.143)'/>
-<use id='g3-106' xlink:href='#g0-106' transform='scale(1.143)'/>
-<use id='g3-108' xlink:href='#g0-108' transform='scale(1.143)'/>
-<use id='g3-109' xlink:href='#g0-109' transform='scale(1.143)'/>
-<use id='g3-110' xlink:href='#g0-110' transform='scale(1.143)'/>
-<use id='g3-111' xlink:href='#g0-111' transform='scale(1.143)'/>
-<use id='g3-112' xlink:href='#g0-112' transform='scale(1.143)'/>
-<use id='g3-114' xlink:href='#g0-114' transform='scale(1.143)'/>
-<use id='g3-115' xlink:href='#g0-115' transform='scale(1.143)'/>
-<use id='g3-116' xlink:href='#g0-116' transform='scale(1.143)'/>
-<use id='g3-119' xlink:href='#g0-119' transform='scale(1.143)'/>
-<use id='g3-120' xlink:href='#g0-120' transform='scale(1.143)'/>
-<use id='g2-41' xlink:href='#g0-41' transform='scale(.714)'/>
-<use id='g2-44' xlink:href='#g0-44' transform='scale(.714)'/>
-<use id='g2-45' xlink:href='#g0-45' transform='scale(.714)'/>
-<use id='g2-46' xlink:href='#g0-46' transform='scale(.714)'/>
-<use id='g2-48' xlink:href='#g0-48' transform='scale(.714)'/>
-<use id='g2-49' xlink:href='#g0-49' transform='scale(.714)'/>
-<use id='g2-50' xlink:href='#g0-50' transform='scale(.714)'/>
-<use id='g2-51' xlink:href='#g0-51' transform='scale(.714)'/>
-<use id='g2-52' xlink:href='#g0-52' transform='scale(.714)'/>
-<use id='g2-53' xlink:href='#g0-53' transform='scale(.714)'/>
-<use id='g2-54' xlink:href='#g0-54' transform='scale(.714)'/>
-<use id='g2-55' xlink:href='#g0-55' transform='scale(.714)'/>
-<use id='g2-56' xlink:href='#g0-56' transform='scale(.714)'/>
-<use id='g2-57' xlink:href='#g0-57' transform='scale(.714)'/>
-<use id='g2-64' xlink:href='#g0-64' transform='scale(.714)'/>
-<use id='g2-67' xlink:href='#g0-67' transform='scale(.714)'/>
-<use id='g2-71' xlink:href='#g0-71' transform='scale(.714)'/>
-<use id='g2-73' xlink:href='#g0-73' transform='scale(.714)'/>
-<use id='g2-85' xlink:href='#g0-85' transform='scale(.714)'/>
-<use id='g2-88' xlink:href='#g0-88' transform='scale(.714)'/>
-<use id='g2-97' xlink:href='#g0-97' transform='scale(.714)'/>
-<use id='g2-98' xlink:href='#g0-98' transform='scale(.714)'/>
-<use id='g2-99' xlink:href='#g0-99' transform='scale(.714)'/>
-<use id='g2-100' xlink:href='#g0-100' transform='scale(.714)'/>
-<use id='g2-101' xlink:href='#g0-101' transform='scale(.714)'/>
-<use id='g2-103' xlink:href='#g0-103' transform='scale(.714)'/>
-<use id='g2-104' xlink:href='#g0-104' transform='scale(.714)'/>
-<use id='g2-105' xlink:href='#g0-105' transform='scale(.714)'/>
-<use id='g2-108' xlink:href='#g0-108' transform='scale(.714)'/>
-<use id='g2-109' xlink:href='#g0-109' transform='scale(.714)'/>
-<use id='g2-110' xlink:href='#g0-110' transform='scale(.714)'/>
-<use id='g2-111' xlink:href='#g0-111' transform='scale(.714)'/>
-<use id='g2-114' xlink:href='#g0-114' transform='scale(.714)'/>
-<use id='g2-115' xlink:href='#g0-115' transform='scale(.714)'/>
-<use id='g2-116' xlink:href='#g0-116' transform='scale(.714)'/>
-<use id='g2-117' xlink:href='#g0-117' transform='scale(.714)'/>
-<use id='g2-120' xlink:href='#g0-120' transform='scale(.714)'/>
-<use id='g2-122' xlink:href='#g0-122' transform='scale(.714)'/>
-<path id='g4-1' d='M1.445-1.245C1.445-1.41 1.305-1.549 1.141-1.549S.837-1.41 .837-1.245S.976-.941 1.141-.941S1.445-1.081 1.445-1.245Z'/>
-<path id='g4-2' d='M4.13-2.481C4.184-2.535 4.204-2.57 4.204-2.615C4.204-2.69 4.139-2.755 4.065-2.755C4.01-2.755 3.985-2.73 3.93-2.675L2.7-1.445L1.465-2.68C1.41-2.735 1.375-2.755 1.33-2.755C1.255-2.755 1.191-2.69 1.191-2.615C1.191-2.56 1.215-2.535 1.27-2.481L2.501-1.245L1.27-.01C1.215 .045 1.191 .07 1.191 .125C1.191 .199 1.255 .264 1.33 .264C1.385 .264 1.41 .239 1.46 .189L2.695-1.046L3.97 .229C3.995 .249 4.03 .264 4.065 .264C4.139 .264 4.204 .199 4.204 .125C4.204 .095 4.194 .075 4.184 .05C4.164 .02 3.238-.892 2.894-1.245L4.13-2.481Z'/>
-<path id='g1-82' d='M3.891-2.914C4.806-3.165 5.452-3.811 5.452-4.546C5.452-5.469 4.411-6.223 3.129-6.223H.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891-2.914ZM1.704-3.407V-5.694H3.022C4.062-5.694 4.671-5.192 4.671-4.546C4.671-3.963 4.125-3.407 3.022-3.407H1.704Z'/>
-<path id='g1-97' d='M3.694-2.591C3.694-3.479 3.04-4.133 2.152-4.133C1.569-4.133 1.139-3.981 .708-3.739L.762-3.102C1.21-3.434 1.65-3.569 2.143-3.569C2.645-3.569 2.95-3.165 2.95-2.582V-2.206C1.408-2.17 .395-1.766 .395-1.04C.395-.619 .672 .099 1.453 .099C1.632 .099 2.412 .081 2.977-.341V0H3.694V-2.591ZM2.95-1.255C2.95-1.067 2.95-.843 2.627-.655C2.403-.52 2.107-.484 1.928-.484C1.47-.484 1.085-.699 1.085-1.058C1.085-1.695 2.833-1.722 2.95-1.722V-1.255Z'/>
-<path id='g1-101' d='M3.829-1.964C3.829-2.242 3.82-2.923 3.47-3.461C3.093-4.026 2.52-4.133 2.179-4.133C1.139-4.133 .314-3.174 .314-2.026C.314-.843 1.193 .099 2.313 .099C2.744 .099 3.264-.009 3.784-.341L3.73-.959C3.165-.556 2.636-.484 2.322-.484C1.578-.484 1.004-1.139 .977-1.964H3.829ZM1.031-2.493C1.175-3.067 1.614-3.551 2.179-3.551C2.511-3.551 3.12-3.398 3.291-2.493H1.031Z'/>
-<path id='g1-105' d='M1.524-6.133H.664V-5.272H1.524V-6.133ZM1.453-3.981H.735V0H1.453V-3.981Z'/>
-<path id='g1-108' d='M1.453-6.223H.735V0H1.453V-6.223Z'/>
-<path id='g1-109' d='M6.581-2.663C6.581-3.327 6.402-4.08 5.317-4.08C4.564-4.08 4.142-3.622 3.927-3.344C3.865-3.524 3.676-4.08 2.762-4.08C2.053-4.08 1.623-3.667 1.417-3.398V-4.035H.726V0H1.47V-2.188C1.47-2.78 1.704-3.497 2.385-3.497C3.282-3.497 3.282-2.86 3.282-2.6V0H4.026V-2.188C4.026-2.78 4.259-3.497 4.94-3.497C5.837-3.497 5.837-2.86 5.837-2.6V0H6.581V-2.663Z'/>
-<path id='g1-116' d='M1.623-3.425H2.914V-3.981H1.623V-5.12H.959V-3.981H.17V-3.425H.933V-1.13C.933-.601 1.049 .099 1.704 .099C2.098 .099 2.564 .018 3.067-.233L2.914-.798C2.681-.619 2.367-.511 2.089-.511C1.739-.511 1.623-.825 1.623-1.291V-3.425Z'/>
-<path id='g1-118' d='M4.116-3.981H3.407L2.699-2.161C2.52-1.695 2.188-.825 2.143-.493H2.125C2.107-.646 2.08-.816 1.587-2.107C1.318-2.833 .879-3.927 .861-3.981H.126L1.704 0H2.537L4.116-3.981Z'/>
-<path id='g0-40' d='M2.127-5.23C2.008-5.23 1.995-5.23 1.911-5.154C1.032-4.387 .586-3.145 .586-1.743C.586-.425 .983 .844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 .063C1.276-.481 1.193-1.053 1.193-1.743C1.193-4.156 2.322-5.112 2.462-5.23H2.127Z'/>
-<path id='g0-41' d='M.746 1.743C.865 1.743 .879 1.743 .962 1.667C1.841 .9 2.287-.342 2.287-1.743C2.287-3.062 1.89-4.331 .969-5.14C.879-5.23 .865-5.23 .746-5.23H.411C.432-5.216 1.109-4.638 1.43-3.55C1.597-3.006 1.681-2.434 1.681-1.743C1.681 .669 .551 1.625 .411 1.743H.746Z'/>
-<path id='g0-44' d='M1.339-.007V-.628H.711V0H.907L.704 .893H1.018L1.339-.007Z'/>
-<path id='g0-45' d='M2.05-1.332V-1.771H.084V-1.332H2.05Z'/>
-<path id='g0-46' d='M1.339-.628H.711V0H1.339V-.628Z'/>
-<path id='g0-48' d='M3.403-2.267C3.403-2.601 3.403-3.417 3.075-3.989C2.72-4.617 2.183-4.721 1.848-4.721C1.534-4.721 .99-4.624 .642-4.024C.307-3.466 .293-2.706 .293-2.267C.293-1.75 .321-1.116 .614-.586C.921-.021 1.437 .146 1.848 .146C2.545 .146 2.929-.258 3.138-.697C3.382-1.193 3.403-1.834 3.403-2.267ZM1.848-.314C1.555-.314 1.22-.481 1.046-.983C.907-1.409 .9-1.848 .9-2.357C.9-2.999 .9-4.261 1.848-4.261S2.797-2.999 2.797-2.357C2.797-1.897 2.797-1.374 2.629-.928C2.434-.425 2.078-.314 1.848-.314Z'/>
-<path id='g0-49' d='M2.239-4.721H2.085C1.632-4.303 1.06-4.275 .642-4.261V-3.822C.914-3.829 1.262-3.843 1.611-3.982V-.439H.683V0H3.166V-.439H2.239V-4.721Z'/>
-<path id='g0-50' d='M1.974-.537C1.89-.537 1.806-.53 1.723-.53H.928L2.008-1.485C2.134-1.597 2.476-1.855 2.608-1.967C2.915-2.246 3.327-2.608 3.327-3.215C3.327-4.003 2.741-4.721 1.743-4.721C1.004-4.721 .544-4.324 .307-3.612L.635-3.201C.795-3.787 1.039-4.24 1.646-4.24C2.232-4.24 2.678-3.829 2.678-3.201C2.678-2.622 2.336-2.294 1.918-1.897C1.778-1.757 1.402-1.444 1.255-1.304C1.053-1.123 .572-.656 .37-.481V0H3.327V-.537H1.974Z'/>
-<path id='g0-51' d='M.697-3.578C.983-4.135 1.485-4.289 1.82-4.289C2.232-4.289 2.538-4.052 2.538-3.654C2.538-3.285 2.287-2.831 1.757-2.741C1.723-2.734 1.695-2.734 1.234-2.699V-2.239H1.778C2.441-2.239 2.685-1.716 2.685-1.276C2.685-.732 2.35-.314 1.806-.314C1.311-.314 .746-.551 .398-.997L.307-.544C.711-.091 1.276 .146 1.82 .146C2.734 .146 3.389-.537 3.389-1.269C3.389-1.841 2.929-2.301 2.378-2.462C2.908-2.734 3.18-3.201 3.18-3.654C3.18-4.247 2.573-4.721 1.827-4.721C1.213-4.721 .704-4.4 .411-3.982L.697-3.578Z'/>
-<path id='g0-52' d='M2.762-1.165H3.487V-1.625H2.762V-4.575H2.071L.209-1.625V-1.165H2.162V0H2.762V-1.165ZM.802-1.625C1.011-1.953 2.211-3.815 2.211-4.233V-1.625H.802Z'/>
-<path id='g0-53' d='M1.144-4.094H3.075V-4.575H.586V-1.967H1.095C1.262-2.343 1.59-2.511 1.904-2.511C2.19-2.511 2.622-2.315 2.622-1.43C2.622-.516 2.043-.314 1.688-.314C1.227-.314 .781-.558 .544-.955L.279-.537C.621-.112 1.137 .146 1.688 .146C2.608 .146 3.327-.565 3.327-1.416C3.327-2.28 2.685-2.971 1.918-2.971C1.618-2.971 1.353-2.866 1.144-2.692V-4.094Z'/>
-<path id='g0-54' d='M3.062-4.582C2.685-4.721 2.42-4.721 2.287-4.721C1.227-4.721 .307-3.724 .307-2.253C.307-.363 1.158 .146 1.862 .146C2.427 .146 2.72-.119 2.936-.342C3.382-.816 3.389-1.311 3.389-1.555C3.389-2.469 2.894-3.229 2.218-3.229C1.534-3.229 1.165-2.873 .962-2.671C1.053-3.626 1.541-4.289 2.294-4.289C2.434-4.289 2.713-4.275 3.062-4.142V-4.582ZM.969-1.534C.969-1.576 .969-1.681 .976-1.716C.976-2.19 1.276-2.769 1.897-2.769C2.748-2.769 2.748-1.792 2.748-1.555C2.748-1.29 2.748-.997 2.559-.704C2.392-.453 2.183-.314 1.862-.314C1.123-.314 1.004-1.227 .969-1.534Z'/>
-<path id='g0-55' d='M1.723-4.038C1.806-4.038 1.89-4.045 1.974-4.045H2.852C1.792-3.006 1.116-1.548 1.116 .07H1.771C1.771-1.967 2.762-3.431 3.389-4.087V-4.575H.307V-4.038H1.723Z'/>
-<path id='g0-56' d='M2.385-2.469C2.845-2.615 3.285-2.985 3.285-3.501C3.285-4.135 2.678-4.721 1.848-4.721S.411-4.135 .411-3.501C.411-2.978 .865-2.608 1.311-2.469C.697-2.28 .307-1.806 .307-1.269C.307-.523 .969 .146 1.848 .146S3.389-.523 3.389-1.269C3.389-1.806 2.992-2.28 2.385-2.469ZM1.848-2.699C1.353-2.699 .948-2.985 .948-3.494C.948-3.94 1.262-4.289 1.848-4.289C2.427-4.289 2.748-3.94 2.748-3.494C2.748-2.999 2.357-2.699 1.848-2.699ZM1.848-.314C1.367-.314 .941-.621 .941-1.276C.941-1.904 1.346-2.239 1.848-2.239S2.755-1.897 2.755-1.276C2.755-.621 2.322-.314 1.848-.314Z'/>
-<path id='g0-57' d='M.537-.174C.879 .077 1.193 .146 1.52 .146C2.497 .146 3.389-.837 3.389-2.336C3.389-4.24 2.545-4.721 1.876-4.721C1.255-4.721 .969-4.428 .767-4.226C.321-3.773 .307-3.292 .307-3.02C.307-2.12 .795-1.346 1.478-1.346C2.267-1.346 2.699-1.869 2.734-1.911C2.636-.802 2.092-.314 1.52-.314C1.158-.314 .934-.446 .774-.579L.537-.174ZM2.713-3.027C2.72-2.985 2.72-2.915 2.72-2.873C2.72-2.357 2.406-1.806 1.799-1.806C1.534-1.806 1.325-1.883 1.144-2.169C.962-2.441 .948-2.706 .948-3.02C.948-3.292 .948-3.605 1.165-3.912C1.311-4.122 1.52-4.289 1.869-4.289C2.545-4.289 2.692-3.473 2.713-3.027Z'/>
-<path id='g0-58' d='M1.339-3.096H.711V-2.469H1.339V-3.096ZM.711-.628V0H1.339V-.628H.711Z'/>
-<path id='g0-64' d='M4.142-.614C4.038-.614 4.024-.614 3.968-.586C3.626-.467 3.271-.391 2.901-.391C1.778-.391 .976-1.339 .976-2.42C.976-3.592 1.883-4.449 2.859-4.449C3.055-4.449 3.515-4.4 3.745-3.843C3.55-3.954 3.333-4.003 3.152-4.003C2.406-4.003 1.778-3.306 1.778-2.42C1.778-1.513 2.427-.837 3.145-.837C3.689-.837 4.519-1.276 4.519-2.518C4.519-3.222 4.47-4.91 2.866-4.91C1.541-4.91 .411-3.815 .411-2.42C.411-1.039 1.527 .07 2.873 .07C3.515 .07 4.115-.195 4.519-.614H4.142ZM3.152-1.297C2.72-1.297 2.343-1.778 2.343-2.42C2.343-3.082 2.734-3.543 3.145-3.543C3.578-3.543 3.954-3.062 3.954-2.42C3.954-1.757 3.564-1.297 3.152-1.297Z'/>
-<path id='g0-67' d='M4.317-.851C3.829-.551 3.605-.418 2.908-.418C1.827-.418 1.172-1.43 1.172-2.434C1.172-3.466 1.89-4.435 2.908-4.435C3.368-4.435 3.843-4.289 4.163-4.045L4.275-4.679C3.787-4.861 3.396-4.917 2.887-4.917C1.506-4.917 .474-3.773 .474-2.427C.474-.99 1.569 .07 2.929 .07C3.612 .07 3.898-.07 4.359-.321L4.317-.851Z'/>
-<path id='g0-71' d='M4.442-2.085H2.88V-1.625H3.829V-.558C3.522-.481 3.222-.418 2.908-.418C1.834-.418 1.172-1.43 1.172-2.427C1.172-3.382 1.82-4.435 2.873-4.435C3.515-4.435 3.919-4.24 4.268-3.947L4.38-4.582C3.898-4.812 3.473-4.924 2.943-4.924C1.534-4.924 .474-3.822 .474-2.427C.474-1.067 1.527 .07 2.901 .07C3.403 .07 3.996-.042 4.442-.272V-2.085Z'/>
-<path id='g0-73' d='M1.381-4.84H.676V0H1.381V-4.84Z'/>
-<path id='g0-78' d='M1.646-4.84H.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-.551H3.933L1.646-4.84Z'/>
-<path id='g0-85' d='M4.4-4.84H3.794V-1.625C3.794-.69 3.166-.265 2.566-.265S1.381-.697 1.381-1.618V-4.84H.676V-1.632C.676-.607 1.555 .146 2.559 .146C3.557 .146 4.4-.614 4.4-1.632V-4.84Z'/>
-<path id='g0-88' d='M2.755-2.552L4.519-4.84H3.759L2.413-3.055L1.039-4.84H.209L2.071-2.552L.105 0H.865L2.413-2.099L3.996 0H4.826L2.755-2.552Z'/>
-<path id='g0-97' d='M2.971-2.008C2.971-2.72 2.427-3.201 1.736-3.201C1.297-3.201 .962-3.11 .572-2.901L.614-2.392C.844-2.545 1.186-2.755 1.736-2.755C2.043-2.755 2.364-2.525 2.364-2.001V-1.723C1.332-1.688 .314-1.471 .314-.823C.314-.474 .551 .07 1.165 .07C1.465 .07 2.015 .007 2.385-.265V0H2.971V-2.008ZM2.364-.99C2.364-.851 2.364-.669 2.12-.523C1.897-.398 1.625-.391 1.548-.391C1.165-.391 .872-.565 .872-.83C.872-1.276 2.05-1.318 2.364-1.332V-.99Z'/>
-<path id='g0-98' d='M1.179-4.84H.593V0H1.2V-.328C1.353-.195 1.688 .07 2.197 .07C2.957 .07 3.571-.642 3.571-1.555C3.571-2.399 3.089-3.166 2.392-3.166C1.953-3.166 1.527-3.027 1.179-2.769V-4.84ZM1.2-2.197C1.2-2.308 1.2-2.392 1.444-2.552C1.548-2.615 1.736-2.706 1.974-2.706C2.441-2.706 2.964-2.392 2.964-1.555C2.964-.704 2.385-.391 1.897-.391C1.639-.391 1.395-.509 1.2-.823V-2.197Z'/>
-<path id='g0-99' d='M3.034-.76C2.685-.537 2.308-.411 1.876-.411C1.234-.411 .858-.928 .858-1.555C.858-2.092 1.137-2.72 1.897-2.72C2.371-2.72 2.594-2.622 2.95-2.399L3.041-2.901C2.622-3.11 2.441-3.201 1.897-3.201C.851-3.201 .251-2.357 .251-1.548C.251-.697 .921 .07 1.869 .07C2.357 .07 2.776-.077 3.075-.251L3.034-.76Z'/>
-<path id='g0-100' d='M3.229-4.84H2.643V-2.797C2.197-3.124 1.743-3.166 1.541-3.166C.809-3.166 .251-2.434 .251-1.548S.802 .07 1.52 .07C1.953 .07 2.357-.126 2.622-.363V0H3.229V-4.84ZM2.622-.865C2.448-.579 2.183-.391 1.848-.391C1.36-.391 .858-.732 .858-1.541C.858-2.413 1.451-2.706 1.925-2.706C2.204-2.706 2.441-2.587 2.622-2.35V-.865Z'/>
-<path id='g0-101' d='M2.999-.76C2.608-.481 2.169-.391 1.869-.391C1.262-.391 .802-.886 .781-1.527H3.068C3.068-1.848 3.034-2.315 2.762-2.713C2.511-3.068 2.092-3.201 1.75-3.201C.9-3.201 .244-2.455 .244-1.569C.244-.676 .941 .07 1.862 .07C2.267 .07 2.685-.049 3.041-.265L2.999-.76ZM.83-1.946C.99-2.504 1.402-2.741 1.75-2.741C2.057-2.741 2.511-2.594 2.643-1.946H.83Z'/>
-<path id='g0-103' d='M3.508-3.166C3.354-3.166 2.887-3.159 2.357-2.957L2.343-2.95C2.092-3.117 1.848-3.166 1.646-3.166C.962-3.166 .453-2.629 .453-2.029C.453-1.785 .537-1.534 .697-1.339C.6-1.22 .495-1.025 .495-.76C.495-.488 .607-.314 .669-.23C.286-.007 .209 .314 .209 .481C.209 1.011 .941 1.43 1.848 1.43C2.762 1.43 3.487 1.011 3.487 .481C3.487-.502 2.267-.502 1.967-.502H1.318C1.206-.502 .907-.502 .907-.865C.907-1.004 .955-1.074 .962-1.088C1.206-.934 1.451-.886 1.639-.886C2.322-.886 2.831-1.423 2.831-2.022C2.831-2.246 2.769-2.448 2.643-2.636C2.615-2.678 2.615-2.685 2.615-2.692C2.615-2.72 3.034-2.72 3.068-2.72C3.075-2.72 3.34-2.72 3.592-2.692L3.508-3.166ZM1.646-1.318C1.269-1.318 .99-1.555 .99-2.022C.99-2.566 1.339-2.734 1.639-2.734C2.015-2.734 2.294-2.497 2.294-2.029C2.294-1.485 1.946-1.318 1.646-1.318ZM1.974 .042C2.134 .042 2.957 .042 2.957 .488C2.957 .788 2.434 .997 1.848 .997S.739 .788 .739 .488C.739 .453 .739 .042 1.304 .042H1.974Z'/>
-<path id='g0-104' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.625-3.166 1.304-2.817 1.165-2.671V-4.84H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-105' d='M1.227-4.784H.523V-4.08H1.227V-4.784ZM1.172-3.096H.586V0H1.172V-3.096Z'/>
-<path id='g0-106' d='M1.381-4.784H.676V-4.08H1.381V-4.784ZM-.453 1.186C-.133 1.36 .181 1.423 .446 1.423C.928 1.423 1.381 1.053 1.381 .411V-3.096H.795V.46C.795 .586 .795 .697 .649 .816C.488 .934 .293 .934 .23 .934C-.063 .934-.244 .802-.328 .725L-.453 1.186Z'/>
-<path id='g0-108' d='M1.172-4.84H.586V0H1.172V-4.84Z'/>
-<path id='g0-109' d='M5.3-2.064C5.3-2.608 5.14-3.166 4.282-3.166C3.696-3.166 3.333-2.824 3.166-2.601C3.096-2.79 2.922-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-1.695C3.243-2.155 3.438-2.706 3.975-2.706C4.693-2.706 4.693-2.218 4.693-2.015V0H5.3V-2.064Z'/>
-<path id='g0-110' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-111' d='M3.487-1.527C3.487-2.448 2.755-3.201 1.848-3.201S.209-2.441 .209-1.527C.209-.642 .948 .07 1.848 .07C2.755 .07 3.487-.642 3.487-1.527ZM1.848-.411C1.297-.411 .816-.816 .816-1.604S1.332-2.741 1.848-2.741C2.371-2.741 2.88-2.378 2.88-1.604C2.88-.809 2.385-.411 1.848-.411Z'/>
-<path id='g0-112' d='M1.2-.328C1.569 .007 1.967 .07 2.204 .07C2.943 .07 3.571-.635 3.571-1.555C3.571-2.392 3.11-3.166 2.42-3.166C2.106-3.166 1.583-3.075 1.179-2.762V-3.096H.593V1.353H1.2V-.328ZM1.2-2.315C1.36-2.511 1.632-2.685 1.967-2.685C2.525-2.685 2.964-2.169 2.964-1.555C2.964-.865 2.441-.391 1.897-.391C1.792-.391 1.618-.404 1.437-.551C1.227-.711 1.2-.816 1.2-.948V-2.315Z'/>
-<path id='g0-114' d='M1.179-1.485C1.179-2.239 1.806-2.643 2.42-2.65V-3.166C1.834-3.159 1.409-2.873 1.13-2.504V-3.145H.593V0H1.179V-1.485Z'/>
-<path id='g0-115' d='M2.545-2.985C2.071-3.18 1.723-3.201 1.471-3.201C1.297-3.201 .244-3.201 .244-2.273C.244-1.946 .425-1.764 .516-1.681C.76-1.437 1.053-1.381 1.423-1.311C1.75-1.248 2.127-1.179 2.127-.844C2.127-.404 1.548-.404 1.451-.404C1.004-.404 .586-.565 .307-.76L.209-.237C.446-.119 .872 .07 1.451 .07C1.764 .07 2.071 .021 2.329-.167C2.587-.363 2.671-.669 2.671-.907C2.671-1.032 2.657-1.304 2.364-1.569C2.106-1.799 1.855-1.848 1.52-1.911C1.109-1.988 .788-2.05 .788-2.357C.788-2.755 1.297-2.755 1.402-2.755C1.799-2.755 2.106-2.671 2.455-2.49L2.545-2.985Z'/>
-<path id='g0-116' d='M1.311-2.657H2.343V-3.096H1.311V-3.982H.774V-3.096H.139V-2.657H.753V-.893C.753-.425 .872 .07 1.374 .07S2.26-.091 2.469-.188L2.35-.635C2.12-.467 1.876-.411 1.681-.411C1.388-.411 1.311-.697 1.311-1.018V-2.657Z'/>
-<path id='g0-117' d='M3.243-3.096H2.636V-1.074C2.636-.516 2.162-.342 1.757-.342C1.241-.342 1.186-.481 1.186-.802V-3.096H.579V-.76C.579-.139 .851 .07 1.339 .07C1.625 .07 2.239 .014 2.657-.321V0H3.243V-3.096Z'/>
-<path id='g0-119' d='M4.951-3.096H4.407C4.345-2.901 3.954-1.723 3.738-.997C3.682-.795 3.612-.572 3.592-.411H3.585C3.543-.697 3.299-1.451 3.285-1.499L2.769-3.096H2.239C2.036-2.497 1.513-.934 1.458-.425H1.451C1.395-.921 .879-2.462 .767-2.797C.711-2.964 .711-2.978 .676-3.096H.105L1.123 0H1.709C1.716-.028 1.904-.579 2.148-1.353C2.253-1.695 2.462-2.364 2.497-2.671L2.504-2.678C2.518-2.532 2.559-2.378 2.608-2.204S2.706-1.841 2.755-1.681L3.292 0H3.933L4.951-3.096Z'/>
-<path id='g0-120' d='M1.932-1.597L3.285-3.096H2.671L1.681-1.953L.669-3.096H.042L1.437-1.597L0 0H.621L1.681-1.311L2.783 0H3.41L1.932-1.597Z'/>
-<path id='g0-122' d='M2.957-2.803V-3.096H.307V-2.65H1.332C1.416-2.65 1.499-2.657 1.583-2.657H2.127L.209-.307V0H2.978V-.467H1.897C1.813-.467 1.73-.46 1.646-.46H1.039L2.957-2.803Z'/>
-</defs>
-<g id='page4'>
-<path d='M194.617 260.785V251.93M253.285 260.785V251.93M311.953 260.785V251.93M370.625 260.785V251.93M429.293 260.785V251.93M194.617 75.308V84.164M253.285 75.308V84.164M311.953 75.308V84.164M370.625 75.308V84.164M429.293 75.308V84.164' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M165.281 256.18V251.93M223.953 256.18V251.93M282.621 256.18V251.93M341.289 256.18V251.93M399.957 256.18V251.93M458.629 256.18V251.93M165.281 79.91V84.164M223.953 79.91V84.164M282.621 79.91V84.164M341.289 79.91V84.164M399.957 79.91V84.164M458.629 79.91V84.164' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M135.949 251.93H140.199M135.949 218.375H140.199M135.949 184.824H140.199M135.949 151.269H140.199M135.949 117.719H140.199M135.949 84.164H140.199M487.961 251.93H483.711M487.961 218.375H483.711M487.961 184.824H483.711M487.961 151.269H483.711M487.961 117.719H483.711M487.961 84.164H483.711' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M135.949 251.93V84.164H487.961V251.93H135.949Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -21.265 74.992)'>
-<use x='168.285' y='191.334' xlink:href='#g3-97'/>
-<use x='172.353' y='191.334' xlink:href='#g3-108'/>
-<use x='174.373' y='191.334' xlink:href='#g3-108'/>
-<use x='176.393' y='191.334' xlink:href='#g3-111'/>
-<use x='180.863' y='191.334' xlink:href='#g3-99'/>
-<use x='184.627' y='191.334' xlink:href='#g3-45'/>
-<use x='187.449' y='191.334' xlink:href='#g3-116'/>
-<use x='190.507' y='191.334' xlink:href='#g3-101'/>
-<use x='194.271' y='191.334' xlink:href='#g3-115'/>
-<use x='197.517' y='191.334' xlink:href='#g3-116'/>
-<use x='200.575' y='191.334' xlink:href='#g3-49'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 74.992)'>
-<use x='168.285' y='191.334' xlink:href='#g3-97'/>
-<use x='172.353' y='191.334' xlink:href='#g3-108'/>
-<use x='174.373' y='191.334' xlink:href='#g3-108'/>
-<use x='176.393' y='191.334' xlink:href='#g3-111'/>
-<use x='180.863' y='191.334' xlink:href='#g3-99'/>
-<use x='184.627' y='191.334' xlink:href='#g3-45'/>
-<use x='187.449' y='191.334' xlink:href='#g3-116'/>
-<use x='190.507' y='191.334' xlink:href='#g3-101'/>
-<use x='194.271' y='191.334' xlink:href='#g3-115'/>
-<use x='197.517' y='191.334' xlink:href='#g3-116'/>
-<use x='200.575' y='191.334' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 74.992)'>
-<use x='168.285' y='191.334' xlink:href='#g3-115'/>
-<use x='171.531' y='191.334' xlink:href='#g3-104'/>
-<use x='175.904' y='191.334' xlink:href='#g3-54'/>
-<use x='180.138' y='191.334' xlink:href='#g3-98'/>
-<use x='184.746' y='191.334' xlink:href='#g3-101'/>
-<use x='188.509' y='191.334' xlink:href='#g3-110'/>
-<use x='192.882' y='191.334' xlink:href='#g3-99'/>
-<use x='196.646' y='191.334' xlink:href='#g3-104'/>
-<use x='201.018' y='191.334' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 74.992)'>
-<use x='168.285' y='191.334' xlink:href='#g3-115'/>
-<use x='171.531' y='191.334' xlink:href='#g3-104'/>
-<use x='175.904' y='191.334' xlink:href='#g3-56'/>
-<use x='180.138' y='191.334' xlink:href='#g3-98'/>
-<use x='184.746' y='191.334' xlink:href='#g3-101'/>
-<use x='188.509' y='191.334' xlink:href='#g3-110'/>
-<use x='192.882' y='191.334' xlink:href='#g3-99'/>
-<use x='196.646' y='191.334' xlink:href='#g3-104'/>
-<use x='201.018' y='191.334' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 74.992)'>
-<use x='168.285' y='191.334' xlink:href='#g3-120'/>
-<use x='172.187' y='191.334' xlink:href='#g3-109'/>
-<use x='178.912' y='191.334' xlink:href='#g3-97'/>
-<use x='182.98' y='191.334' xlink:href='#g3-108'/>
-<use x='185' y='191.334' xlink:href='#g3-108'/>
-<use x='187.02' y='191.334' xlink:href='#g3-111'/>
-<use x='191.49' y='191.334' xlink:href='#g3-99'/>
-<use x='195.254' y='191.334' xlink:href='#g3-45'/>
-<use x='198.076' y='191.334' xlink:href='#g3-116'/>
-<use x='201.134' y='191.334' xlink:href='#g3-101'/>
-<use x='204.898' y='191.334' xlink:href='#g3-115'/>
-<use x='208.144' y='191.334' xlink:href='#g3-116'/>
-<use x='211.202' y='191.334' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 74.992)'>
-<use x='168.285' y='191.334' xlink:href='#g3-99'/>
-<use x='172.049' y='191.334' xlink:href='#g3-97'/>
-<use x='176.117' y='191.334' xlink:href='#g3-99'/>
-<use x='179.88' y='191.334' xlink:href='#g3-104'/>
-<use x='184.253' y='191.334' xlink:href='#g3-101'/>
-<use x='188.017' y='191.334' xlink:href='#g3-45'/>
-<use x='190.839' y='191.334' xlink:href='#g3-115'/>
-<use x='194.086' y='191.334' xlink:href='#g3-99'/>
-<use x='197.849' y='191.334' xlink:href='#g3-114'/>
-<use x='200.741' y='191.334' xlink:href='#g3-97'/>
-<use x='204.81' y='191.334' xlink:href='#g3-116'/>
-<use x='207.868' y='191.334' xlink:href='#g3-99'/>
-<use x='211.631' y='191.334' xlink:href='#g3-104'/>
-<use x='216.004' y='191.334' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 62.23)'>
-<use x='168.285' y='191.334' xlink:href='#g2-48'/>
-<use x='170.931' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 28.677)'>
-<use x='168.285' y='191.334' xlink:href='#g2-48'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-53'/>
-<use x='175.048' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -4.876)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -38.43)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-53'/>
-<use x='175.048' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.983)'>
-<use x='168.285' y='191.334' xlink:href='#g2-50'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -105.536)'>
-<use x='168.285' y='191.334' xlink:href='#g2-50'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-53'/>
-<use x='175.048' y='191.334' xlink:href='#g2-120'/>
-</g>
-<path d='M135.949 184.824H487.961' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M140.125 251.93H143.363V184.824H140.125ZM198.797 251.93H202.035V184.824H198.797ZM257.465 251.93H260.703V184.824H257.465ZM316.133 251.93H319.371V184.824H316.133ZM374.801 251.93H378.039V184.824H374.801ZM433.473 251.93H436.711V184.824H433.473Z' fill='#933' clip-path='url(#clip4)'/>
-<path d='M140.125 251.93H143.363V184.824H140.125ZM198.797 251.93H202.035V184.824H198.797ZM257.465 251.93H260.703V184.824H257.465ZM316.133 251.93H319.371V184.824H316.133ZM374.801 251.93H378.039V184.824H374.801ZM433.473 251.93H436.711V184.824H433.473Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M141.746 184.824V184.758' fill='#933' clip-path='url(#clip4)'/>
-<path d='M141.746 184.824V184.758' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M139.754 184.758H143.738' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M141.746 184.824V184.891' fill='#933' clip-path='url(#clip4)'/>
-<path d='M141.746 184.824V184.891' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M143.738 184.891H139.754' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M200.414 184.824V184.621' fill='#933' clip-path='url(#clip4)'/>
-<path d='M200.414 184.824V184.621' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M198.422 184.621H202.406' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M200.414 184.824V185.023' fill='#933' clip-path='url(#clip4)'/>
-<path d='M200.414 184.824V185.023' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M202.406 185.023H198.422' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M259.082 184.824' fill='#933' clip-path='url(#clip4)'/>
-<path d='M257.09 184.824H261.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M259.082 184.824' fill='#933' clip-path='url(#clip4)'/>
-<path d='M257.09 184.824H261.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M317.754 184.824V178.785' fill='#933' clip-path='url(#clip4)'/>
-<path d='M317.754 184.824V178.785' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M315.762 178.785H319.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M317.754 184.824V190.863' fill='#933' clip-path='url(#clip4)'/>
-<path d='M317.754 184.824V190.863' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M319.746 190.864H315.758' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M376.422 184.824V184.086' fill='#933' clip-path='url(#clip4)'/>
-<path d='M376.422 184.824V184.086' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M374.43 184.086H378.414' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M376.422 184.824V185.562' fill='#933' clip-path='url(#clip4)'/>
-<path d='M376.422 184.824V185.562' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M378.414 185.562H374.43' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M435.09 184.824V181.402' fill='#933' clip-path='url(#clip4)'/>
-<path d='M435.09 184.824V181.402' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M433.098 181.403H437.082' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M435.09 184.824V188.246' fill='#933' clip-path='url(#clip4)'/>
-<path d='M435.09 184.824V188.246' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M437.082 188.246H433.098' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M145.356 251.93H148.594V184.488H145.356ZM204.028 251.93H207.266V184.621H204.028ZM262.695 251.93H265.934V184.824H262.695ZM321.363 251.93H324.602V182.004H321.363ZM380.031 251.93H383.27V178.648H380.031ZM438.703 251.93H441.942V187.238H438.703Z' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M145.356 251.93H148.594V184.488H145.356ZM204.028 251.93H207.266V184.621H204.028ZM262.695 251.93H265.934V184.824H262.695ZM321.363 251.93H324.602V182.004H321.363ZM380.031 251.93H383.27V178.648H380.031ZM438.703 251.93H441.942V187.238H438.703Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M146.977 184.488V184.422' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M146.977 184.488V184.422' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M144.984 184.421H148.968' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M146.977 184.488V184.555' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M146.977 184.488V184.555' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M148.968 184.555H144.984' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M205.645 184.621V184.555' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M205.645 184.621V184.555' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M203.652 184.555H207.636' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M205.645 184.621V184.687' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M205.645 184.621V184.687' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M207.636 184.688H203.652' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M264.313 184.824' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M262.32 184.824H266.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M264.313 184.824' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M262.32 184.824H266.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M322.984 182.004V177.441' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M322.984 182.004V177.441' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M320.992 177.441H324.976' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M322.984 182.004V186.566' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M322.984 182.004V186.566' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M324.976 186.567H320.988' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M381.652 178.648V176.973' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M381.652 178.648V176.973' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M379.66 176.973H383.644' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M381.652 178.648V180.328' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M381.652 178.648V180.328' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M383.644 180.328H379.66' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M440.32 187.238V181.402' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M440.32 187.238V181.402' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M438.328 181.403H442.312' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M440.32 187.238V193.078' fill='#bf8080' clip-path='url(#clip4)'/>
-<path d='M440.32 187.238V193.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M442.312 193.078H438.328' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M150.586 251.93H153.824V184.621H150.586ZM209.258 251.93H212.496V171.871H209.258ZM267.926 251.93H271.164V137.312H267.926ZM326.594 251.93H329.832V84.164H326.594ZM385.262 251.93H388.5V84.164H385.262ZM443.934 251.93H447.172V84.164H443.934Z' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M150.586 251.93H153.824V184.621H150.586ZM209.258 251.93H212.496V171.871H209.258ZM267.926 251.93H271.164V137.312H267.926ZM326.594 251.93H329.832V84.164H326.594ZM385.262 251.93H388.5V84.164H385.262ZM443.934 251.93H447.172V84.164H443.934Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M152.207 184.621' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M150.215 184.621H154.199' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M152.207 184.621' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M150.215 184.621H154.199' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M210.875 171.871V170.461' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M210.875 171.871V170.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M208.883 170.461H212.867' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M210.875 171.871V173.281' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M210.875 171.871V173.281' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M212.868 173.281H208.883' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M269.543 137.312V129.394' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M269.543 137.312V129.394' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M267.551 129.394H271.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M269.543 137.312V145.23' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M269.543 137.312V145.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M271.535 145.23H267.551' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M328.215 84.164' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M326.223 84.164H330.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M328.215 84.164' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M326.223 84.164H330.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M386.883 84.164' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M384.891 84.164H388.875' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M386.883 84.164' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M384.891 84.164H388.875' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M445.551 84.164' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M443.559 84.164H447.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M445.551 84.164' fill='#8080bf' clip-path='url(#clip4)'/>
-<path d='M443.559 84.164H447.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M155.817 251.93H159.055V179.926H155.817ZM214.488 251.93H217.727V180.461H214.488ZM273.156 251.93H276.395V131.676H273.156ZM331.824 251.93H335.063V126.105H331.824ZM390.492 251.93H393.731V84.164H390.492ZM449.164 251.93H452.402V84.164H449.164Z' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M155.817 251.93H159.055V179.926H155.817ZM214.488 251.93H217.727V180.461H214.488ZM273.156 251.93H276.395V131.676H273.156ZM331.824 251.93H335.063V126.105H331.824ZM390.492 251.93H393.731V84.164H390.492ZM449.164 251.93H452.402V84.164H449.164Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M157.438 179.926' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M155.445 179.925H159.429' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M157.438 179.926' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M155.445 179.925H159.429' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M216.106 180.461' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M214.113 180.461H218.097' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M216.106 180.461' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M214.113 180.461H218.097' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M274.774 131.676V127.715' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M274.774 131.676V127.715' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M272.781 127.715H276.769' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M274.774 131.676V135.633' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M274.774 131.676V135.633' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M276.765 135.633H272.781' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M333.445 126.105V120.066' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M333.445 126.105V120.066' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M331.453 120.067H335.437' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M333.445 126.105V132.144' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M333.445 126.105V132.144' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M335.437 132.145H331.449' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M392.113 84.164' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M390.121 84.164H394.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M392.113 84.164' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M390.121 84.164H394.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M450.781 84.164' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M448.789 84.164H452.773' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M450.781 84.164' fill='#ffb733' clip-path='url(#clip4)'/>
-<path d='M448.789 84.164H452.773' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M161.047 251.93H164.285V162.141H161.047ZM219.719 251.93H222.957V163.418H219.719ZM278.387 251.93H281.625V84.164H278.387ZM337.055 251.93H340.293V112.148H337.055ZM395.723 251.93H398.961V86.848H395.723ZM454.395 251.93H457.633V184.824H454.395Z' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M161.047 251.93H164.285V162.141H161.047ZM219.719 251.93H222.957V163.418H219.719ZM278.387 251.93H281.625V84.164H278.387ZM337.055 251.93H340.293V112.148H337.055ZM395.723 251.93H398.961V86.848H395.723ZM454.395 251.93H457.633V184.824H454.395Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M162.668 162.141V162.074' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M162.668 162.141V162.074' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M160.676 162.074H164.66' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M162.668 162.141V162.207' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M162.668 162.141V162.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M164.661 162.207H160.676' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M221.336 163.418V163.348' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M221.336 163.418V163.348' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M219.344 163.348H223.328' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M221.336 163.418V163.484' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M221.336 163.418V163.484' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M223.329 163.484H219.344' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M280.004 84.164' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M278.012 84.164H282' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M280.004 84.164' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M278.012 84.164H282' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M338.676 112.148' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M336.684 112.148H340.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M338.676 112.148' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M336.684 112.148H340.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M397.344 86.848V86.648' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M397.344 86.848V86.648' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M395.352 86.648H399.336' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M397.344 86.848V87.051' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M397.344 86.848V87.051' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M399.336 87.051H395.352' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M456.012 184.824V175.832' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M456.012 184.824V175.832' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M454.02 175.832H458.004' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M456.012 184.824V193.816' fill='#bf80bf' clip-path='url(#clip4)'/>
-<path d='M456.012 184.824V193.816' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M458.004 193.816H454.02' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M166.278 251.93H169.516V171.937H166.278ZM224.949 251.93H228.188V181.066H224.949ZM283.617 251.93H286.856V151.269H283.617ZM342.285 251.93H345.524V162.477H342.285ZM400.953 251.93H404.192V192.34H400.953ZM459.625 251.93H462.863V189.586H459.625Z' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M166.278 251.93H169.516V171.937H166.278ZM224.949 251.93H228.188V181.066H224.949ZM283.617 251.93H286.856V151.269H283.617ZM342.285 251.93H345.524V162.477H342.285ZM400.953 251.93H404.192V192.34H400.953ZM459.625 251.93H462.863V189.586H459.625Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M167.899 171.937' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M165.906 171.938H169.89' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M167.899 171.937' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M165.906 171.938H169.89' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M226.567 181.066V180.996' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M226.567 181.066V180.996' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M224.574 180.996H228.558' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M226.567 181.066V181.133' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M226.567 181.066V181.133' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M228.559 181.133H224.574' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M285.234 151.269' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M283.242 151.27H287.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M285.234 151.269' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M283.242 151.27H287.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M343.906 162.477V160.195' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M343.906 162.477V160.195' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M341.914 160.195H345.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M343.906 162.477V164.758' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M343.906 162.477V164.758' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M345.898 164.758H341.91' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M402.574 192.34V191.266' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M402.574 192.34V191.266' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M400.582 191.265H404.566' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M402.574 192.34V193.414' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M402.574 192.34V193.414' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M404.566 193.414H400.582' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M461.242 189.586V186.164' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M461.242 189.586V186.164' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M459.25 186.164H463.234' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M461.242 189.586V193.012' fill='#c96' clip-path='url(#clip4)'/>
-<path d='M461.242 189.586V193.012' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M463.234 193.012H459.25' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M171.508 251.93H174.746V180.93H171.508ZM230.18 251.93H233.414V179.051H230.18ZM288.848 251.93H292.086V84.164H288.848ZM347.516 251.93H350.754V84.164H347.516ZM406.184 251.93H409.422V84.164H406.184ZM464.856 251.93H468.094V84.164H464.856Z' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M171.508 251.93H174.746V180.93H171.508ZM230.18 251.93H233.414V179.051H230.18ZM288.848 251.93H292.086V84.164H288.848ZM347.516 251.93H350.754V84.164H347.516ZM406.184 251.93H409.422V84.164H406.184ZM464.856 251.93H468.094V84.164H464.856Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M173.129 180.93' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M171.137 180.93H175.121' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M173.129 180.93' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M171.137 180.93H175.121' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M231.797 179.051V178.852' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M231.797 179.051V178.852' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M229.805 178.852H233.789' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M231.797 179.051V179.254' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M231.797 179.051V179.254' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M233.79 179.254H229.805' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M290.465 84.164' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M288.473 84.164H292.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M290.465 84.164' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M288.473 84.164H292.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M349.137 84.164' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M347.145 84.164H351.129' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M349.137 84.164' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M347.145 84.164H351.129' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M407.805 84.164' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M405.813 84.164H409.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M407.805 84.164' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M405.813 84.164H409.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M466.473 84.164' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M464.481 84.164H468.465' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M466.473 84.164' fill='#80bf80' clip-path='url(#clip4)'/>
-<path d='M464.481 84.164H468.465' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M176.738 251.93H179.977V154.828H176.738ZM235.41 251.93H238.645V176.168H235.41ZM294.078 251.93H297.317V84.164H294.078ZM352.746 251.93H355.984V84.164H352.746ZM411.414 251.93H414.652V84.164H411.414ZM470.086 251.93H473.324V189.586H470.086Z' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M176.738 251.93H179.977V154.828H176.738ZM235.41 251.93H238.645V176.168H235.41ZM294.078 251.93H297.317V84.164H294.078ZM352.746 251.93H355.984V84.164H352.746ZM411.414 251.93H414.652V84.164H411.414ZM470.086 251.93H473.324V189.586H470.086Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M178.36 154.828V148.922' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M178.36 154.828V148.922' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M176.367 148.922H180.351' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M178.36 154.828V160.73' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M178.36 154.828V160.73' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M180.352 160.731H176.367' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M237.027 176.168V175.832' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M237.027 176.168V175.832' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M235.035 175.832H239.019' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M237.027 176.168V176.5' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M237.027 176.168V176.5' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M239.02 176.5H235.035' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M295.695 84.164' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M293.703 84.164H297.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M295.695 84.164' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M293.703 84.164H297.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M354.367 84.164' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M352.375 84.164H356.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M354.367 84.164' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M352.375 84.164H356.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M413.035 84.164' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M411.043 84.164H415.027' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M413.035 84.164' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M411.043 84.164H415.027' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M471.703 189.586V186.164' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M471.703 189.586V186.164' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M469.711 186.164H473.695' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M471.703 189.586V193.012' fill='#bfbf80' clip-path='url(#clip4)'/>
-<path d='M471.703 189.586V193.012' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M473.695 193.012H469.711' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M181.969 251.93H185.207V167.914H181.969ZM240.641 251.93H243.875V168.984H240.641ZM299.309 251.93H302.547V84.164H299.309ZM357.977 251.93H361.215V84.164H357.977ZM416.645 251.93H419.883V84.164H416.645ZM475.317 251.93H478.555V84.164H475.317Z' fill='#399' clip-path='url(#clip4)'/>
-<path d='M181.969 251.93H185.207V167.914H181.969ZM240.641 251.93H243.875V168.984H240.641ZM299.309 251.93H302.547V84.164H299.309ZM357.977 251.93H361.215V84.164H357.977ZM416.645 251.93H419.883V84.164H416.645ZM475.317 251.93H478.555V84.164H475.317Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M183.59 167.914V167.844' fill='#399' clip-path='url(#clip4)'/>
-<path d='M183.59 167.914V167.844' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M181.598 167.844H185.583' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M183.59 167.914V167.98' fill='#399' clip-path='url(#clip4)'/>
-<path d='M183.59 167.914V167.98' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M185.582 167.98H181.597' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M242.258 168.984V168.918' fill='#399' clip-path='url(#clip4)'/>
-<path d='M242.258 168.984V168.918' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M240.266 168.918H244.25' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M242.258 168.984V169.055' fill='#399' clip-path='url(#clip4)'/>
-<path d='M242.258 168.984V169.055' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M244.25 169.055H240.265' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M300.926 84.164' fill='#399' clip-path='url(#clip4)'/>
-<path d='M298.933 84.164H302.921' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M300.926 84.164' fill='#399' clip-path='url(#clip4)'/>
-<path d='M298.933 84.164H302.921' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M359.598 84.164' fill='#399' clip-path='url(#clip4)'/>
-<path d='M357.606 84.164H361.59' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M359.598 84.164' fill='#399' clip-path='url(#clip4)'/>
-<path d='M357.606 84.164H361.59' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M418.266 84.164' fill='#399' clip-path='url(#clip4)'/>
-<path d='M416.274 84.164H420.258' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M418.266 84.164' fill='#399' clip-path='url(#clip4)'/>
-<path d='M416.274 84.164H420.258' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M476.934 84.164' fill='#399' clip-path='url(#clip4)'/>
-<path d='M474.942 84.164H478.926' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M476.934 84.164' fill='#399' clip-path='url(#clip4)'/>
-<path d='M474.942 84.164H478.926' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M187.199 251.93H190.438V175.562H187.199ZM245.871 251.93H249.106V176.168H245.871ZM304.539 251.93H307.777V92.551H304.539ZM363.207 251.93H366.445V126.105H363.207ZM421.875 251.93H425.113V109.461H421.875ZM480.547 251.93H483.785V175.227H480.547Z' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M187.199 251.93H190.438V175.562H187.199ZM245.871 251.93H249.106V176.168H245.871ZM304.539 251.93H307.777V92.551H304.539ZM363.207 251.93H366.445V126.105H363.207ZM421.875 251.93H425.113V109.461H421.875ZM480.547 251.93H483.785V175.227H480.547Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M188.82 175.562V175.43' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M188.82 175.562V175.43' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M186.828 175.43H190.813' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M188.82 175.562V175.695' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M188.82 175.562V175.695' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M190.813 175.696H186.828' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M247.488 176.168V175.965' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M247.488 176.168V175.965' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M245.496 175.965H249.481' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M247.488 176.168V176.367' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M247.488 176.168V176.367' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M249.481 176.368H245.496' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M306.156 92.551V74.433' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M306.156 92.551V74.433' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M304.164 74.434H308.152' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M306.156 92.551V110.672' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M306.156 92.551V110.672' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M308.149 110.672H304.164' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M364.828 126.105V123.824' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M364.828 126.105V123.824' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M362.836 123.825H366.82' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M364.828 126.105V128.387' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M364.828 126.105V128.387' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M366.82 128.387H362.832' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M423.496 109.461V109.262' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M423.496 109.461V109.262' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M421.504 109.262H425.488' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M423.496 109.461V109.664' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M423.496 109.461V109.664' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M425.488 109.664H421.504' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M482.164 175.227V171.805' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M482.164 175.227V171.805' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M480.172 171.804H484.156' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M482.164 175.227V178.648' fill='#d9b3b3' clip-path='url(#clip4)'/>
-<path d='M482.164 175.227V178.648' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M484.156 178.648H480.172' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<path d='M369.781 314.227H487.762V278.973H369.781Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip4)'/>
-<g transform='matrix(1 0 0 1 204.818 118.327)'>
-<use x='168.285' y='167.424' xlink:href='#g2-99'/>
-<use x='170.637' y='167.424' xlink:href='#g2-53'/>
-<use x='173.284' y='167.424' xlink:href='#g2-45'/>
-<use x='175.048' y='167.424' xlink:href='#g2-49'/>
-<use x='177.694' y='167.424' xlink:href='#g2-56'/>
-<use x='180.341' y='167.424' xlink:href='#g2-120'/>
-<use x='182.779' y='167.424' xlink:href='#g2-108'/>
-<use x='184.042' y='167.424' xlink:href='#g2-97'/>
-<use x='186.438' y='167.424' xlink:href='#g2-114'/>
-<use x='188.245' y='167.424' xlink:href='#g2-103'/>
-<use x='190.891' y='167.424' xlink:href='#g2-101'/>
-<use x='193.244' y='167.424' xlink:href='#g2-44'/>
-<use x='196.478' y='167.424' xlink:href='#g2-49'/>
-<use x='199.124' y='167.424' xlink:href='#g2-52'/>
-<use x='201.771' y='167.424' xlink:href='#g2-52'/>
-<use x='204.417' y='167.424' xlink:href='#g2-71'/>
-<use x='207.946' y='167.424' xlink:href='#g2-98'/>
-<use x='168.285' y='173.401' xlink:href='#g2-50'/>
-<use x='170.931' y='173.401' xlink:href='#g4-2'/>
-<use x='178.092' y='173.401' xlink:href='#g2-49'/>
-<use x='180.738' y='173.401' xlink:href='#g2-56'/>
-<use x='183.385' y='173.401' xlink:href='#g2-45'/>
-<use x='185.149' y='173.401' xlink:href='#g2-99'/>
-<use x='187.501' y='173.401' xlink:href='#g2-111'/>
-<use x='190.001' y='173.401' xlink:href='#g2-114'/>
-<use x='191.808' y='173.401' xlink:href='#g2-101'/>
-<use x='195.925' y='173.401' xlink:href='#g2-73'/>
-<use x='197.395' y='173.401' xlink:href='#g2-110'/>
-<use x='200.128' y='173.401' xlink:href='#g2-116'/>
-<use x='202.039' y='173.401' xlink:href='#g2-101'/>
-<use x='204.391' y='173.401' xlink:href='#g2-108'/>
-<use x='207.418' y='173.401' xlink:href='#g2-88'/>
-<use x='210.947' y='173.401' xlink:href='#g2-101'/>
-<use x='213.299' y='173.401' xlink:href='#g2-111'/>
-<use x='215.945' y='173.401' xlink:href='#g2-110'/>
-<use x='220.442' y='173.401' xlink:href='#g2-64'/>
-<use x='223.971' y='173.401' xlink:href='#g2-51'/>
-<use x='226.617' y='173.401' xlink:href='#g2-71'/>
-<use x='230.146' y='173.401' xlink:href='#g2-104'/>
-<use x='232.879' y='173.401' xlink:href='#g2-122'/>
-<use x='168.285' y='179.379' xlink:href='#g2-85'/>
-<use x='171.917' y='179.379' xlink:href='#g2-98'/>
-<use x='174.65' y='179.379' xlink:href='#g2-117'/>
-<use x='177.383' y='179.379' xlink:href='#g2-110'/>
-<use x='180.116' y='179.379' xlink:href='#g2-116'/>
-<use x='182.027' y='179.379' xlink:href='#g2-117'/>
-<use x='186.524' y='179.379' xlink:href='#g2-50'/>
-<use x='189.17' y='179.379' xlink:href='#g2-48'/>
-<use x='191.817' y='179.379' xlink:href='#g2-46'/>
-<use x='193.287' y='179.379' xlink:href='#g2-48'/>
-<use x='195.933' y='179.379' xlink:href='#g2-52'/>
-<use x='198.58' y='179.379' xlink:href='#g2-44'/>
-<use x='201.814' y='179.379' xlink:href='#g2-71'/>
-<use x='205.343' y='179.379' xlink:href='#g2-67'/>
-<use x='208.724' y='179.379' xlink:href='#g2-67'/>
-<use x='213.87' y='179.379' xlink:href='#g2-57'/>
-<use x='216.516' y='179.379' xlink:href='#g2-46'/>
-<use x='217.986' y='179.379' xlink:href='#g2-51'/>
-<use x='220.633' y='179.379' xlink:href='#g2-46'/>
-<use x='222.103' y='179.379' xlink:href='#g2-48'/>
-<use x='224.749' y='179.379' xlink:href='#g2-44'/>
-<use x='227.984' y='179.379' xlink:href='#g2-103'/>
-<use x='230.63' y='179.379' xlink:href='#g2-108'/>
-<use x='231.893' y='179.379' xlink:href='#g2-105'/>
-<use x='233.155' y='179.379' xlink:href='#g2-98'/>
-<use x='236.035' y='179.379' xlink:href='#g2-99'/>
-<use x='240.152' y='179.379' xlink:href='#g2-50'/>
-<use x='242.798' y='179.379' xlink:href='#g2-46'/>
-<use x='244.268' y='179.379' xlink:href='#g2-51'/>
-<use x='246.915' y='179.379' xlink:href='#g2-49'/>
-<use x='249.561' y='179.379' xlink:href='#g2-44'/>
-<use x='252.796' y='179.379' xlink:href='#g2-99'/>
-<use x='255.148' y='179.379' xlink:href='#g2-108'/>
-<use x='256.41' y='179.379' xlink:href='#g2-97'/>
-<use x='258.953' y='179.379' xlink:href='#g2-110'/>
-<use x='261.686' y='179.379' xlink:href='#g2-103'/>
-<use x='266.097' y='179.379' xlink:href='#g2-49'/>
-<use x='268.743' y='179.379' xlink:href='#g2-48'/>
-<use x='271.389' y='179.379' xlink:href='#g2-46'/>
-<use x='272.859' y='179.379' xlink:href='#g2-48'/>
-<use x='275.506' y='179.379' xlink:href='#g2-46'/>
-<use x='276.976' y='179.379' xlink:href='#g2-48'/>
-<use x='168.285' y='185.357' xlink:href='#g2-55'/>
-<use x='170.931' y='185.357' xlink:href='#g2-50'/>
-<use x='175.342' y='185.357' xlink:href='#g2-108'/>
-<use x='176.604' y='185.357' xlink:href='#g2-111'/>
-<use x='179.251' y='185.357' xlink:href='#g2-103'/>
-<use x='181.897' y='185.357' xlink:href='#g2-105'/>
-<use x='183.16' y='185.357' xlink:href='#g2-99'/>
-<use x='185.512' y='185.357' xlink:href='#g2-97'/>
-<use x='188.055' y='185.357' xlink:href='#g2-108'/>
-<use x='191.082' y='185.357' xlink:href='#g2-99'/>
-<use x='193.434' y='185.357' xlink:href='#g2-111'/>
-<use x='195.933' y='185.357' xlink:href='#g2-114'/>
-<use x='197.741' y='185.357' xlink:href='#g2-101'/>
-<use x='200.093' y='185.357' xlink:href='#g2-115'/>
-<use x='203.886' y='185.357' xlink:href='#g2-111'/>
-<use x='206.533' y='185.357' xlink:href='#g2-110'/>
-<use x='211.03' y='185.357' xlink:href='#g2-50'/>
-<use x='215.44' y='185.357' xlink:href='#g2-110'/>
-<use x='218.173' y='185.357' xlink:href='#g2-117'/>
-<use x='220.906' y='185.357' xlink:href='#g2-109'/>
-<use x='225.109' y='185.357' xlink:href='#g2-97'/>
-<use x='229.416' y='185.357' xlink:href='#g2-110'/>
-<use x='232.149' y='185.357' xlink:href='#g2-111'/>
-<use x='234.942' y='185.357' xlink:href='#g2-100'/>
-<use x='237.675' y='185.357' xlink:href='#g2-101'/>
-<use x='240.027' y='185.357' xlink:href='#g2-115'/>
-<use x='168.285' y='191.334' xlink:href='#g2-50'/>
-<use x='170.931' y='191.334' xlink:href='#g2-48'/>
-<use x='173.578' y='191.334' xlink:href='#g2-50'/>
-<use x='176.224' y='191.334' xlink:href='#g2-49'/>
-<use x='178.87' y='191.334' xlink:href='#g2-45'/>
-<use x='180.635' y='191.334' xlink:href='#g2-48'/>
-<use x='183.281' y='191.334' xlink:href='#g2-49'/>
-<use x='185.927' y='191.334' xlink:href='#g2-45'/>
-<use x='187.692' y='191.334' xlink:href='#g2-51'/>
-<use x='190.338' y='191.334' xlink:href='#g2-48'/>
-<use x='192.984' y='191.334' xlink:href='#g2-41'/>
-</g>
-<g transform='matrix(0 -1 1 0 -47.954 346.904)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 10.715 346.904)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 69.384 346.904)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 128.053 346.904)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 186.722 346.904)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 245.391 346.904)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -42.724 346.568)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 15.945 346.703)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 74.614 346.904)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 133.283 344.086)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 191.952 340.73)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 250.621 349.32)'>
-<use x='168.285' y='191.334' xlink:href='#g2-48'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-57'/>
-<use x='175.048' y='191.334' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -37.493 346.703)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 21.176 333.952)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-49'/>
-<use x='175.048' y='191.334' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 79.845 299.393)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-55'/>
-<use x='175.048' y='191.334' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 138.514 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-49'/>
-<use x='176.558' y='191.334' xlink:href='#g2-53'/>
-<use x='179.205' y='191.334' xlink:href='#g2-46'/>
-<use x='180.675' y='191.334' xlink:href='#g2-49'/>
-<use x='183.321' y='191.334' xlink:href='#g2-56'/>
-<use x='185.968' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 197.183 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-51'/>
-<use x='176.558' y='191.334' xlink:href='#g2-56'/>
-<use x='179.205' y='191.334' xlink:href='#g2-48'/>
-<use x='181.851' y='191.334' xlink:href='#g2-46'/>
-<use x='183.321' y='191.334' xlink:href='#g2-49'/>
-<use x='185.968' y='191.334' xlink:href='#g2-57'/>
-<use x='188.614' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 255.852 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-49'/>
-<use x='176.558' y='191.334' xlink:href='#g2-55'/>
-<use x='179.205' y='191.334' xlink:href='#g2-46'/>
-<use x='180.675' y='191.334' xlink:href='#g2-48'/>
-<use x='183.321' y='191.334' xlink:href='#g2-55'/>
-<use x='185.968' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -32.263 342.005)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 26.406 342.542)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 85.075 293.756)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-55'/>
-<use x='175.048' y='191.334' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 143.744 288.186)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-56'/>
-<use x='175.048' y='191.334' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 202.413 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-49'/>
-<use x='176.558' y='191.334' xlink:href='#g2-49'/>
-<use x='179.205' y='191.334' xlink:href='#g2-46'/>
-<use x='180.675' y='191.334' xlink:href='#g2-54'/>
-<use x='183.321' y='191.334' xlink:href='#g2-55'/>
-<use x='185.968' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 261.082 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-49'/>
-<use x='176.558' y='191.334' xlink:href='#g2-55'/>
-<use x='179.205' y='191.334' xlink:href='#g2-46'/>
-<use x='180.675' y='191.334' xlink:href='#g2-50'/>
-<use x='183.321' y='191.334' xlink:href='#g2-53'/>
-<use x='185.968' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -27.032 324.222)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-51'/>
-<use x='175.048' y='191.334' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 31.637 325.497)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-51'/>
-<use x='175.048' y='191.334' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 90.306 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-53'/>
-<use x='176.558' y='191.334' xlink:href='#g2-46'/>
-<use x='178.029' y='191.334' xlink:href='#g2-50'/>
-<use x='180.675' y='191.334' xlink:href='#g2-57'/>
-<use x='183.321' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 148.975 274.228)'>
-<use x='168.285' y='191.334' xlink:href='#g2-50'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 207.644 248.929)'>
-<use x='168.285' y='191.334' xlink:href='#g2-50'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-52'/>
-<use x='175.048' y='191.334' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 266.313 346.904)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -21.802 334.02)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-49'/>
-<use x='175.048' y='191.334' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 36.867 343.146)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 95.536 313.351)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-53'/>
-<use x='175.048' y='191.334' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 154.205 324.558)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-51'/>
-<use x='175.048' y='191.334' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 212.874 354.42)'>
-<use x='168.285' y='191.334' xlink:href='#g2-48'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-56'/>
-<use x='175.048' y='191.334' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 271.543 351.668)'>
-<use x='168.285' y='191.334' xlink:href='#g2-48'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-57'/>
-<use x='175.048' y='191.334' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 -16.571 343.012)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 42.098 341.133)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-48'/>
-<use x='175.048' y='191.334' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 100.767 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-55'/>
-<use x='176.558' y='191.334' xlink:href='#g2-46'/>
-<use x='178.029' y='191.334' xlink:href='#g2-50'/>
-<use x='180.675' y='191.334' xlink:href='#g2-53'/>
-<use x='183.321' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 159.436 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-51'/>
-<use x='176.558' y='191.334' xlink:href='#g2-54'/>
-<use x='179.205' y='191.334' xlink:href='#g2-46'/>
-<use x='180.675' y='191.334' xlink:href='#g2-54'/>
-<use x='183.321' y='191.334' xlink:href='#g2-53'/>
-<use x='185.968' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 218.105 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-51'/>
-<use x='176.558' y='191.334' xlink:href='#g2-56'/>
-<use x='179.205' y='191.334' xlink:href='#g2-46'/>
-<use x='180.675' y='191.334' xlink:href='#g2-53'/>
-<use x='183.321' y='191.334' xlink:href='#g2-51'/>
-<use x='185.968' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 276.774 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-49'/>
-<use x='176.558' y='191.334' xlink:href='#g2-50'/>
-<use x='179.205' y='191.334' xlink:href='#g2-46'/>
-<use x='180.675' y='191.334' xlink:href='#g2-56'/>
-<use x='183.321' y='191.334' xlink:href='#g2-50'/>
-<use x='185.968' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -11.341 316.908)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-52'/>
-<use x='175.048' y='191.334' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 47.328 338.247)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-49'/>
-<use x='175.048' y='191.334' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 105.997 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-55'/>
-<use x='176.558' y='191.334' xlink:href='#g2-46'/>
-<use x='178.029' y='191.334' xlink:href='#g2-49'/>
-<use x='180.675' y='191.334' xlink:href='#g2-50'/>
-<use x='183.321' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 164.666 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-55'/>
-<use x='176.558' y='191.334' xlink:href='#g2-46'/>
-<use x='178.029' y='191.334' xlink:href='#g2-50'/>
-<use x='180.675' y='191.334' xlink:href='#g2-53'/>
-<use x='183.321' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 223.335 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-53'/>
-<use x='176.558' y='191.334' xlink:href='#g2-55'/>
-<use x='179.205' y='191.334' xlink:href='#g2-46'/>
-<use x='180.675' y='191.334' xlink:href='#g2-52'/>
-<use x='183.321' y='191.334' xlink:href='#g2-53'/>
-<use x='185.968' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 282.004 351.668)'>
-<use x='168.285' y='191.334' xlink:href='#g2-48'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-57'/>
-<use x='175.048' y='191.334' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 -6.111 329.993)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-50'/>
-<use x='175.048' y='191.334' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 52.558 331.067)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-50'/>
-<use x='175.048' y='191.334' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 111.227 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-53'/>
-<use x='176.558' y='191.334' xlink:href='#g2-46'/>
-<use x='178.029' y='191.334' xlink:href='#g2-52'/>
-<use x='180.675' y='191.334' xlink:href='#g2-54'/>
-<use x='183.321' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 169.896 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-52'/>
-<use x='176.558' y='191.334' xlink:href='#g2-46'/>
-<use x='178.029' y='191.334' xlink:href='#g2-50'/>
-<use x='180.675' y='191.334' xlink:href='#g2-54'/>
-<use x='183.321' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 228.565 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-53'/>
-<use x='176.558' y='191.334' xlink:href='#g2-46'/>
-<use x='178.029' y='191.334' xlink:href='#g2-53'/>
-<use x='180.675' y='191.334' xlink:href='#g2-54'/>
-<use x='183.321' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 287.234 246.245)'>
-<use x='163.396' y='191.334' xlink:href='#g4-1'/>
-<use x='166.901' y='191.334' xlink:href='#g4-1'/>
-<use x='170.407' y='191.334' xlink:href='#g4-1'/>
-<use x='173.912' y='191.334' xlink:href='#g2-54'/>
-<use x='176.558' y='191.334' xlink:href='#g2-46'/>
-<use x='178.029' y='191.334' xlink:href='#g2-48'/>
-<use x='180.675' y='191.334' xlink:href='#g2-55'/>
-<use x='183.321' y='191.334' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -.88 337.643)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-49'/>
-<use x='175.048' y='191.334' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 57.789 338.247)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-49'/>
-<use x='175.048' y='191.334' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 116.458 254.633)'>
-<use x='168.285' y='191.334' xlink:href='#g2-50'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-51'/>
-<use x='175.048' y='191.334' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 175.127 288.186)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-56'/>
-<use x='175.048' y='191.334' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 233.796 271.544)'>
-<use x='168.285' y='191.334' xlink:href='#g2-50'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-49'/>
-<use x='175.048' y='191.334' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 292.465 337.308)'>
-<use x='168.285' y='191.334' xlink:href='#g2-49'/>
-<use x='170.931' y='191.334' xlink:href='#g2-46'/>
-<use x='172.401' y='191.334' xlink:href='#g2-49'/>
-<use x='175.048' y='191.334' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 -78.176 391.591)'>
-<use x='168.285' y='191.334' xlink:href='#g1-82'/>
-<use x='174.255' y='191.334' xlink:href='#g1-101'/>
-<use x='178.351' y='191.334' xlink:href='#g1-108'/>
-<use x='180.551' y='191.334' xlink:href='#g1-97'/>
-<use x='184.979' y='191.334' xlink:href='#g1-116'/>
-<use x='188.307' y='191.334' xlink:href='#g1-105'/>
-<use x='190.507' y='191.334' xlink:href='#g1-118'/>
-<use x='194.755' y='191.334' xlink:href='#g1-101'/>
-<use x='201.922' y='191.334' xlink:href='#g1-116'/>
-<use x='205.25' y='191.334' xlink:href='#g1-105'/>
-<use x='207.45' y='191.334' xlink:href='#g1-109'/>
-<use x='214.77' y='191.334' xlink:href='#g1-101'/>
-<use x='221.937' y='191.334' xlink:href='#g3-40'/>
-<use x='225.231' y='191.334' xlink:href='#g3-108'/>
-<use x='227.251' y='191.334' xlink:href='#g3-111'/>
-<use x='231.25' y='191.334' xlink:href='#g3-119'/>
-<use x='236.799' y='191.334' xlink:href='#g3-101'/>
-<use x='240.562' y='191.334' xlink:href='#g3-114'/>
-<use x='246.277' y='191.334' xlink:href='#g3-105'/>
-<use x='248.297' y='191.334' xlink:href='#g3-115'/>
-<use x='254.366' y='191.334' xlink:href='#g3-98'/>
-<use x='258.974' y='191.334' xlink:href='#g3-101'/>
-<use x='262.738' y='191.334' xlink:href='#g3-116'/>
-<use x='265.796' y='191.334' xlink:href='#g3-116'/>
-<use x='268.854' y='191.334' xlink:href='#g3-101'/>
-<use x='272.618' y='191.334' xlink:href='#g3-114'/>
-<use x='275.51' y='191.334' xlink:href='#g3-41'/>
-</g>
-<path d='M136.149 312.324H346.746V282.324H136.149Z' fill='#fff'/>
-<path d='M136.149 312.324H346.746V282.324H136.149Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<path d='M139.336 292.816H142.324V284.844H139.336ZM145.313 292.816H148.301V286.836H145.313Z' fill='#933'/>
-<path d='M139.336 292.816H142.324V284.844H139.336ZM145.313 292.816H148.301V286.836H145.313Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -40.354 114.479)'>
-<use x='191.843' y='178.327' xlink:href='#g3-120'/>
-<use x='195.745' y='178.327' xlink:href='#g3-109'/>
-<use x='202.47' y='178.327' xlink:href='#g3-105'/>
-<use x='204.49' y='178.327' xlink:href='#g3-58'/>
-<use x='206.843' y='178.327' xlink:href='#g0-57'/>
-<use x='210.548' y='178.327' xlink:href='#g0-52'/>
-</g>
-<path d='M177.086 292.816H180.074V284.844H177.086ZM183.063 292.816H186.055V286.836H183.063Z' fill='#bf8080'/>
-<path d='M177.086 292.816H180.074V284.844H177.086ZM183.063 292.816H186.055V286.836H183.063Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -38.403 114.479)'>
-<use x='233.123' y='178.327' xlink:href='#g3-109'/>
-<use x='239.848' y='178.327' xlink:href='#g3-105'/>
-<use x='241.869' y='178.327' xlink:href='#g3-58'/>
-<use x='244.221' y='178.327' xlink:href='#g0-56'/>
-<use x='247.926' y='178.327' xlink:href='#g0-57'/>
-</g>
-<path d='M221.895 292.816H224.883V284.844H221.895ZM227.875 292.816H230.863V286.836H227.875Z' fill='#8080bf'/>
-<path d='M221.895 292.816H224.883V284.844H221.895ZM227.875 292.816H230.863V286.836H227.875Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.441 114.036)'>
-<use x='277.134' y='178.327' xlink:href='#g3-116'/>
-<use x='280.192' y='178.327' xlink:href='#g3-99'/>
-<use x='283.956' y='178.327' xlink:href='#g3-58'/>
-<use x='286.308' y='178.327' xlink:href='#g0-53'/>
-<use x='290.013' y='178.327' xlink:href='#g0-56'/>
-</g>
-<path d='M265.109 292.816H268.098V284.844H265.109ZM271.086 292.816H274.074V286.836H271.086Z' fill='#ffb733'/>
-<path d='M265.109 292.816H268.098V284.844H265.109ZM271.086 292.816H274.074V286.836H271.086Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.04 114.479)'>
-<use x='319.615' y='178.327' xlink:href='#g3-106'/>
-<use x='321.871' y='178.327' xlink:href='#g3-101'/>
-<use x='325.634' y='178.327' xlink:href='#g3-58'/>
-<use x='327.987' y='178.327' xlink:href='#g0-53'/>
-<use x='331.691' y='178.327' xlink:href='#g0-56'/>
-</g>
-<path d='M306.859 292.816H309.848V284.844H306.859ZM312.836 292.816H315.824V286.836H312.836Z' fill='#bf80bf'/>
-<path d='M306.859 292.816H309.848V284.844H306.859ZM312.836 292.816H315.824V286.836H312.836Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -39.932 114.515)'>
-<use x='359.038' y='178.327' xlink:href='#g3-116'/>
-<use x='362.096' y='178.327' xlink:href='#g3-98'/>
-<use x='366.469' y='178.327' xlink:href='#g3-98'/>
-<use x='370.842' y='178.327' xlink:href='#g3-58'/>
-<use x='373.194' y='178.327' xlink:href='#g0-53'/>
-<use x='376.899' y='178.327' xlink:href='#g0-48'/>
-</g>
-<path d='M139.336 305.82H142.324V297.852H139.336ZM145.313 305.82H148.301V299.844H145.313Z' fill='#c96'/>
-<path d='M139.336 305.82H142.324V297.852H139.336ZM145.313 305.82H148.301V299.844H145.313Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.662 114.036)'>
-<use x='191.843' y='191.334' xlink:href='#g3-114'/>
-<use x='194.735' y='191.334' xlink:href='#g3-112'/>
-<use x='199.108' y='191.334' xlink:href='#g3-58'/>
-<use x='201.46' y='191.334' xlink:href='#g0-55'/>
-<use x='205.165' y='191.334' xlink:href='#g0-53'/>
-</g>
-<path d='M177.086 305.82H180.074V297.852H177.086ZM183.063 305.82H186.055V299.844H183.063Z' fill='#80bf80'/>
-<path d='M177.086 305.82H180.074V297.852H177.086ZM183.063 305.82H186.055V299.844H183.063Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -43.882 114.515)'>
-<use x='233.123' y='191.334' xlink:href='#g3-104'/>
-<use x='237.496' y='191.334' xlink:href='#g3-111'/>
-<use x='241.73' y='191.334' xlink:href='#g3-97'/>
-<use x='245.563' y='191.334' xlink:href='#g3-114'/>
-<use x='248.455' y='191.334' xlink:href='#g3-100'/>
-<use x='252.828' y='191.334' xlink:href='#g3-58'/>
-<use x='255.18' y='191.334' xlink:href='#g0-51'/>
-<use x='258.885' y='191.334' xlink:href='#g0-56'/>
-</g>
-<path d='M221.895 305.82H224.883V297.852H221.895ZM227.875 305.82H230.863V299.844H227.875Z' fill='#bfbf80'/>
-<path d='M221.895 305.82H224.883V297.852H221.895ZM227.875 305.82H230.863V299.844H227.875Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -43.084 114.515)'>
-<use x='277.134' y='191.334' xlink:href='#g3-109'/>
-<use x='283.859' y='191.334' xlink:href='#g3-101'/>
-<use x='287.622' y='191.334' xlink:href='#g3-115'/>
-<use x='290.869' y='191.334' xlink:href='#g3-104'/>
-<use x='295.241' y='191.334' xlink:href='#g3-58'/>
-<use x='297.593' y='191.334' xlink:href='#g0-51'/>
-<use x='301.298' y='191.334' xlink:href='#g0-54'/>
-</g>
-<path d='M265.109 305.82H268.098V297.852H265.109ZM271.086 305.82H274.074V299.844H271.086Z' fill='#399'/>
-<path d='M265.109 305.82H268.098V297.852H265.109ZM271.086 305.82H274.074V299.844H271.086Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -42.353 114.515)'>
-<use x='319.615' y='191.334' xlink:href='#g3-103'/>
-<use x='323.849' y='191.334' xlink:href='#g3-108'/>
-<use x='325.869' y='191.334' xlink:href='#g3-105'/>
-<use x='327.89' y='191.334' xlink:href='#g3-98'/>
-<use x='332.498' y='191.334' xlink:href='#g3-99'/>
-<use x='336.261' y='191.334' xlink:href='#g3-58'/>
-<use x='338.614' y='191.334' xlink:href='#g0-52'/>
-<use x='342.318' y='191.334' xlink:href='#g0-54'/>
-</g>
-<path d='M306.859 305.82H309.848V297.852H306.859ZM312.836 305.82H315.824V299.844H312.836Z' fill='#d9b3b3'/>
-<path d='M306.859 305.82H309.848V297.852H306.859ZM312.836 305.82H315.824V299.844H312.836Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -40.026 114.479)'>
-<use x='359.038' y='191.334' xlink:href='#g3-115'/>
-<use x='362.285' y='191.334' xlink:href='#g3-109'/>
-<use x='369.009' y='191.334' xlink:href='#g3-105'/>
-<use x='371.03' y='191.334' xlink:href='#g3-58'/>
-<use x='373.382' y='191.334' xlink:href='#g0-53'/>
-<use x='377.087' y='191.334' xlink:href='#g0-57'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-a.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-a.svg
deleted file mode 100644
index 6cd36aa..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-a.svg
+++ /dev/null
@@ -1,836 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.9.1 -->
-<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='381.628pt' height='207.789pt' viewBox='52.934 54.993 381.628 207.789'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip1'>
-<path d='M82.148 246.637H434.164V78.871H82.148Z'/>
-</clipPath>
-<path id='g1-82' d='M3.891-2.914C4.806-3.165 5.452-3.811 5.452-4.546C5.452-5.469 4.411-6.223 3.129-6.223H.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891-2.914ZM1.704-3.407V-5.694H3.022C4.062-5.694 4.671-5.192 4.671-4.546C4.671-3.963 4.125-3.407 3.022-3.407H1.704Z'/>
-<path id='g1-97' d='M3.694-2.591C3.694-3.479 3.04-4.133 2.152-4.133C1.569-4.133 1.139-3.981 .708-3.739L.762-3.102C1.21-3.434 1.65-3.569 2.143-3.569C2.645-3.569 2.95-3.165 2.95-2.582V-2.206C1.408-2.17 .395-1.766 .395-1.04C.395-.619 .672 .099 1.453 .099C1.632 .099 2.412 .081 2.977-.341V0H3.694V-2.591ZM2.95-1.255C2.95-1.067 2.95-.843 2.627-.655C2.403-.52 2.107-.484 1.928-.484C1.47-.484 1.085-.699 1.085-1.058C1.085-1.695 2.833-1.722 2.95-1.722V-1.255Z'/>
-<path id='g1-101' d='M3.829-1.964C3.829-2.242 3.82-2.923 3.47-3.461C3.093-4.026 2.52-4.133 2.179-4.133C1.139-4.133 .314-3.174 .314-2.026C.314-.843 1.193 .099 2.313 .099C2.744 .099 3.264-.009 3.784-.341L3.73-.959C3.165-.556 2.636-.484 2.322-.484C1.578-.484 1.004-1.139 .977-1.964H3.829ZM1.031-2.493C1.175-3.067 1.614-3.551 2.179-3.551C2.511-3.551 3.12-3.398 3.291-2.493H1.031Z'/>
-<path id='g1-105' d='M1.524-6.133H.664V-5.272H1.524V-6.133ZM1.453-3.981H.735V0H1.453V-3.981Z'/>
-<path id='g1-108' d='M1.453-6.223H.735V0H1.453V-6.223Z'/>
-<path id='g1-114' d='M1.462-1.91C1.462-2.851 2.197-3.425 3.013-3.434V-4.08C2.367-4.071 1.775-3.748 1.408-3.219V-4.035H.744V0H1.462V-1.91Z'/>
-<path id='g1-115' d='M3.165-3.847C2.609-4.098 2.197-4.133 1.829-4.133C1.623-4.133 .305-4.133 .305-2.95C.305-2.52 .565-2.251 .664-2.152C1.004-1.856 1.237-1.811 1.847-1.695C2.134-1.641 2.645-1.542 2.645-1.085C2.645-.502 1.919-.502 1.802-.502C1.273-.502 .762-.681 .377-.95L.26-.296C.798-.009 1.345 .099 1.802 .099C2.385 .099 3.318-.09 3.318-1.157C3.318-1.47 3.192-1.784 2.878-2.053C2.573-2.313 2.304-2.367 1.748-2.475C1.426-2.537 .977-2.618 .977-3.04C.977-3.569 1.614-3.569 1.748-3.569C2.403-3.569 2.789-3.362 3.049-3.219L3.165-3.847Z'/>
-<path id='g1-116' d='M1.623-3.425H2.914V-3.981H1.623V-5.12H.959V-3.981H.17V-3.425H.933V-1.13C.933-.601 1.049 .099 1.704 .099C2.098 .099 2.564 .018 3.067-.233L2.914-.798C2.681-.619 2.367-.511 2.089-.511C1.739-.511 1.623-.825 1.623-1.291V-3.425Z'/>
-<path id='g1-118' d='M4.116-3.981H3.407L2.699-2.161C2.52-1.695 2.188-.825 2.143-.493H2.125C2.107-.646 2.08-.816 1.587-2.107C1.318-2.833 .879-3.927 .861-3.981H.126L1.704 0H2.537L4.116-3.981Z'/>
-<use id='g3-40' xlink:href='#g0-40' transform='scale(1.143)'/>
-<use id='g3-41' xlink:href='#g0-41' transform='scale(1.143)'/>
-<use id='g3-78' xlink:href='#g0-78' transform='scale(1.143)'/>
-<use id='g3-97' xlink:href='#g0-97' transform='scale(1.143)'/>
-<use id='g3-98' xlink:href='#g0-98' transform='scale(1.143)'/>
-<use id='g3-99' xlink:href='#g0-99' transform='scale(1.143)'/>
-<use id='g3-100' xlink:href='#g0-100' transform='scale(1.143)'/>
-<use id='g3-101' xlink:href='#g0-101' transform='scale(1.143)'/>
-<use id='g3-102' xlink:href='#g0-102' transform='scale(1.143)'/>
-<use id='g3-105' xlink:href='#g0-105' transform='scale(1.143)'/>
-<use id='g3-108' xlink:href='#g0-108' transform='scale(1.143)'/>
-<use id='g3-109' xlink:href='#g0-109' transform='scale(1.143)'/>
-<use id='g3-110' xlink:href='#g0-110' transform='scale(1.143)'/>
-<use id='g3-111' xlink:href='#g0-111' transform='scale(1.143)'/>
-<use id='g3-112' xlink:href='#g0-112' transform='scale(1.143)'/>
-<use id='g3-114' xlink:href='#g0-114' transform='scale(1.143)'/>
-<use id='g3-115' xlink:href='#g0-115' transform='scale(1.143)'/>
-<use id='g3-116' xlink:href='#g0-116' transform='scale(1.143)'/>
-<use id='g3-119' xlink:href='#g0-119' transform='scale(1.143)'/>
-<path id='g0-40' d='M2.127-5.23C2.008-5.23 1.995-5.23 1.911-5.154C1.032-4.387 .586-3.145 .586-1.743C.586-.425 .983 .844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 .063C1.276-.481 1.193-1.053 1.193-1.743C1.193-4.156 2.322-5.112 2.462-5.23H2.127Z'/>
-<path id='g0-41' d='M.746 1.743C.865 1.743 .879 1.743 .962 1.667C1.841 .9 2.287-.342 2.287-1.743C2.287-3.062 1.89-4.331 .969-5.14C.879-5.23 .865-5.23 .746-5.23H.411C.432-5.216 1.109-4.638 1.43-3.55C1.597-3.006 1.681-2.434 1.681-1.743C1.681 .669 .551 1.625 .411 1.743H.746Z'/>
-<path id='g0-46' d='M1.339-.628H.711V0H1.339V-.628Z'/>
-<path id='g0-48' d='M3.403-2.267C3.403-2.601 3.403-3.417 3.075-3.989C2.72-4.617 2.183-4.721 1.848-4.721C1.534-4.721 .99-4.624 .642-4.024C.307-3.466 .293-2.706 .293-2.267C.293-1.75 .321-1.116 .614-.586C.921-.021 1.437 .146 1.848 .146C2.545 .146 2.929-.258 3.138-.697C3.382-1.193 3.403-1.834 3.403-2.267ZM1.848-.314C1.555-.314 1.22-.481 1.046-.983C.907-1.409 .9-1.848 .9-2.357C.9-2.999 .9-4.261 1.848-4.261S2.797-2.999 2.797-2.357C2.797-1.897 2.797-1.374 2.629-.928C2.434-.425 2.078-.314 1.848-.314Z'/>
-<path id='g0-49' d='M2.239-4.721H2.085C1.632-4.303 1.06-4.275 .642-4.261V-3.822C.914-3.829 1.262-3.843 1.611-3.982V-.439H.683V0H3.166V-.439H2.239V-4.721Z'/>
-<path id='g0-50' d='M1.974-.537C1.89-.537 1.806-.53 1.723-.53H.928L2.008-1.485C2.134-1.597 2.476-1.855 2.608-1.967C2.915-2.246 3.327-2.608 3.327-3.215C3.327-4.003 2.741-4.721 1.743-4.721C1.004-4.721 .544-4.324 .307-3.612L.635-3.201C.795-3.787 1.039-4.24 1.646-4.24C2.232-4.24 2.678-3.829 2.678-3.201C2.678-2.622 2.336-2.294 1.918-1.897C1.778-1.757 1.402-1.444 1.255-1.304C1.053-1.123 .572-.656 .37-.481V0H3.327V-.537H1.974Z'/>
-<path id='g0-51' d='M.697-3.578C.983-4.135 1.485-4.289 1.82-4.289C2.232-4.289 2.538-4.052 2.538-3.654C2.538-3.285 2.287-2.831 1.757-2.741C1.723-2.734 1.695-2.734 1.234-2.699V-2.239H1.778C2.441-2.239 2.685-1.716 2.685-1.276C2.685-.732 2.35-.314 1.806-.314C1.311-.314 .746-.551 .398-.997L.307-.544C.711-.091 1.276 .146 1.82 .146C2.734 .146 3.389-.537 3.389-1.269C3.389-1.841 2.929-2.301 2.378-2.462C2.908-2.734 3.18-3.201 3.18-3.654C3.18-4.247 2.573-4.721 1.827-4.721C1.213-4.721 .704-4.4 .411-3.982L.697-3.578Z'/>
-<path id='g0-52' d='M2.762-1.165H3.487V-1.625H2.762V-4.575H2.071L.209-1.625V-1.165H2.162V0H2.762V-1.165ZM.802-1.625C1.011-1.953 2.211-3.815 2.211-4.233V-1.625H.802Z'/>
-<path id='g0-53' d='M1.144-4.094H3.075V-4.575H.586V-1.967H1.095C1.262-2.343 1.59-2.511 1.904-2.511C2.19-2.511 2.622-2.315 2.622-1.43C2.622-.516 2.043-.314 1.688-.314C1.227-.314 .781-.558 .544-.955L.279-.537C.621-.112 1.137 .146 1.688 .146C2.608 .146 3.327-.565 3.327-1.416C3.327-2.28 2.685-2.971 1.918-2.971C1.618-2.971 1.353-2.866 1.144-2.692V-4.094Z'/>
-<path id='g0-54' d='M3.062-4.582C2.685-4.721 2.42-4.721 2.287-4.721C1.227-4.721 .307-3.724 .307-2.253C.307-.363 1.158 .146 1.862 .146C2.427 .146 2.72-.119 2.936-.342C3.382-.816 3.389-1.311 3.389-1.555C3.389-2.469 2.894-3.229 2.218-3.229C1.534-3.229 1.165-2.873 .962-2.671C1.053-3.626 1.541-4.289 2.294-4.289C2.434-4.289 2.713-4.275 3.062-4.142V-4.582ZM.969-1.534C.969-1.576 .969-1.681 .976-1.716C.976-2.19 1.276-2.769 1.897-2.769C2.748-2.769 2.748-1.792 2.748-1.555C2.748-1.29 2.748-.997 2.559-.704C2.392-.453 2.183-.314 1.862-.314C1.123-.314 1.004-1.227 .969-1.534Z'/>
-<path id='g0-55' d='M1.723-4.038C1.806-4.038 1.89-4.045 1.974-4.045H2.852C1.792-3.006 1.116-1.548 1.116 .07H1.771C1.771-1.967 2.762-3.431 3.389-4.087V-4.575H.307V-4.038H1.723Z'/>
-<path id='g0-56' d='M2.385-2.469C2.845-2.615 3.285-2.985 3.285-3.501C3.285-4.135 2.678-4.721 1.848-4.721S.411-4.135 .411-3.501C.411-2.978 .865-2.608 1.311-2.469C.697-2.28 .307-1.806 .307-1.269C.307-.523 .969 .146 1.848 .146S3.389-.523 3.389-1.269C3.389-1.806 2.992-2.28 2.385-2.469ZM1.848-2.699C1.353-2.699 .948-2.985 .948-3.494C.948-3.94 1.262-4.289 1.848-4.289C2.427-4.289 2.748-3.94 2.748-3.494C2.748-2.999 2.357-2.699 1.848-2.699ZM1.848-.314C1.367-.314 .941-.621 .941-1.276C.941-1.904 1.346-2.239 1.848-2.239S2.755-1.897 2.755-1.276C2.755-.621 2.322-.314 1.848-.314Z'/>
-<path id='g0-57' d='M.537-.174C.879 .077 1.193 .146 1.52 .146C2.497 .146 3.389-.837 3.389-2.336C3.389-4.24 2.545-4.721 1.876-4.721C1.255-4.721 .969-4.428 .767-4.226C.321-3.773 .307-3.292 .307-3.02C.307-2.12 .795-1.346 1.478-1.346C2.267-1.346 2.699-1.869 2.734-1.911C2.636-.802 2.092-.314 1.52-.314C1.158-.314 .934-.446 .774-.579L.537-.174ZM2.713-3.027C2.72-2.985 2.72-2.915 2.72-2.873C2.72-2.357 2.406-1.806 1.799-1.806C1.534-1.806 1.325-1.883 1.144-2.169C.962-2.441 .948-2.706 .948-3.02C.948-3.292 .948-3.605 1.165-3.912C1.311-4.122 1.52-4.289 1.869-4.289C2.545-4.289 2.692-3.473 2.713-3.027Z'/>
-<path id='g0-78' d='M1.646-4.84H.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-.551H3.933L1.646-4.84Z'/>
-<path id='g0-97' d='M2.971-2.008C2.971-2.72 2.427-3.201 1.736-3.201C1.297-3.201 .962-3.11 .572-2.901L.614-2.392C.844-2.545 1.186-2.755 1.736-2.755C2.043-2.755 2.364-2.525 2.364-2.001V-1.723C1.332-1.688 .314-1.471 .314-.823C.314-.474 .551 .07 1.165 .07C1.465 .07 2.015 .007 2.385-.265V0H2.971V-2.008ZM2.364-.99C2.364-.851 2.364-.669 2.12-.523C1.897-.398 1.625-.391 1.548-.391C1.165-.391 .872-.565 .872-.83C.872-1.276 2.05-1.318 2.364-1.332V-.99Z'/>
-<path id='g0-98' d='M1.179-4.84H.593V0H1.2V-.328C1.353-.195 1.688 .07 2.197 .07C2.957 .07 3.571-.642 3.571-1.555C3.571-2.399 3.089-3.166 2.392-3.166C1.953-3.166 1.527-3.027 1.179-2.769V-4.84ZM1.2-2.197C1.2-2.308 1.2-2.392 1.444-2.552C1.548-2.615 1.736-2.706 1.974-2.706C2.441-2.706 2.964-2.392 2.964-1.555C2.964-.704 2.385-.391 1.897-.391C1.639-.391 1.395-.509 1.2-.823V-2.197Z'/>
-<path id='g0-99' d='M3.034-.76C2.685-.537 2.308-.411 1.876-.411C1.234-.411 .858-.928 .858-1.555C.858-2.092 1.137-2.72 1.897-2.72C2.371-2.72 2.594-2.622 2.95-2.399L3.041-2.901C2.622-3.11 2.441-3.201 1.897-3.201C.851-3.201 .251-2.357 .251-1.548C.251-.697 .921 .07 1.869 .07C2.357 .07 2.776-.077 3.075-.251L3.034-.76Z'/>
-<path id='g0-100' d='M3.229-4.84H2.643V-2.797C2.197-3.124 1.743-3.166 1.541-3.166C.809-3.166 .251-2.434 .251-1.548S.802 .07 1.52 .07C1.953 .07 2.357-.126 2.622-.363V0H3.229V-4.84ZM2.622-.865C2.448-.579 2.183-.391 1.848-.391C1.36-.391 .858-.732 .858-1.541C.858-2.413 1.451-2.706 1.925-2.706C2.204-2.706 2.441-2.587 2.622-2.35V-.865Z'/>
-<path id='g0-101' d='M2.999-.76C2.608-.481 2.169-.391 1.869-.391C1.262-.391 .802-.886 .781-1.527H3.068C3.068-1.848 3.034-2.315 2.762-2.713C2.511-3.068 2.092-3.201 1.75-3.201C.9-3.201 .244-2.455 .244-1.569C.244-.676 .941 .07 1.862 .07C2.267 .07 2.685-.049 3.041-.265L2.999-.76ZM.83-1.946C.99-2.504 1.402-2.741 1.75-2.741C2.057-2.741 2.511-2.594 2.643-1.946H.83Z'/>
-<path id='g0-102' d='M1.325-2.657H2.12V-3.096H1.304V-3.898C1.304-4.38 1.743-4.449 1.974-4.449C2.12-4.449 2.308-4.428 2.566-4.331V-4.84C2.385-4.882 2.169-4.91 1.981-4.91C1.262-4.91 .739-4.394 .739-3.703V-3.096H.202V-2.657H.739V0H1.325V-2.657Z'/>
-<path id='g0-105' d='M1.227-4.784H.523V-4.08H1.227V-4.784ZM1.172-3.096H.586V0H1.172V-3.096Z'/>
-<path id='g0-108' d='M1.172-4.84H.586V0H1.172V-4.84Z'/>
-<path id='g0-109' d='M5.3-2.064C5.3-2.608 5.14-3.166 4.282-3.166C3.696-3.166 3.333-2.824 3.166-2.601C3.096-2.79 2.922-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-1.695C3.243-2.155 3.438-2.706 3.975-2.706C4.693-2.706 4.693-2.218 4.693-2.015V0H5.3V-2.064Z'/>
-<path id='g0-110' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-111' d='M3.487-1.527C3.487-2.448 2.755-3.201 1.848-3.201S.209-2.441 .209-1.527C.209-.642 .948 .07 1.848 .07C2.755 .07 3.487-.642 3.487-1.527ZM1.848-.411C1.297-.411 .816-.816 .816-1.604S1.332-2.741 1.848-2.741C2.371-2.741 2.88-2.378 2.88-1.604C2.88-.809 2.385-.411 1.848-.411Z'/>
-<path id='g0-112' d='M1.2-.328C1.569 .007 1.967 .07 2.204 .07C2.943 .07 3.571-.635 3.571-1.555C3.571-2.392 3.11-3.166 2.42-3.166C2.106-3.166 1.583-3.075 1.179-2.762V-3.096H.593V1.353H1.2V-.328ZM1.2-2.315C1.36-2.511 1.632-2.685 1.967-2.685C2.525-2.685 2.964-2.169 2.964-1.555C2.964-.865 2.441-.391 1.897-.391C1.792-.391 1.618-.404 1.437-.551C1.227-.711 1.2-.816 1.2-.948V-2.315Z'/>
-<path id='g0-114' d='M1.179-1.485C1.179-2.239 1.806-2.643 2.42-2.65V-3.166C1.834-3.159 1.409-2.873 1.13-2.504V-3.145H.593V0H1.179V-1.485Z'/>
-<path id='g0-115' d='M2.545-2.985C2.071-3.18 1.723-3.201 1.471-3.201C1.297-3.201 .244-3.201 .244-2.273C.244-1.946 .425-1.764 .516-1.681C.76-1.437 1.053-1.381 1.423-1.311C1.75-1.248 2.127-1.179 2.127-.844C2.127-.404 1.548-.404 1.451-.404C1.004-.404 .586-.565 .307-.76L.209-.237C.446-.119 .872 .07 1.451 .07C1.764 .07 2.071 .021 2.329-.167C2.587-.363 2.671-.669 2.671-.907C2.671-1.032 2.657-1.304 2.364-1.569C2.106-1.799 1.855-1.848 1.52-1.911C1.109-1.988 .788-2.05 .788-2.357C.788-2.755 1.297-2.755 1.402-2.755C1.799-2.755 2.106-2.671 2.455-2.49L2.545-2.985Z'/>
-<path id='g0-116' d='M1.311-2.657H2.343V-3.096H1.311V-3.982H.774V-3.096H.139V-2.657H.753V-.893C.753-.425 .872 .07 1.374 .07S2.26-.091 2.469-.188L2.35-.635C2.12-.467 1.876-.411 1.681-.411C1.388-.411 1.311-.697 1.311-1.018V-2.657Z'/>
-<path id='g0-119' d='M4.951-3.096H4.407C4.345-2.901 3.954-1.723 3.738-.997C3.682-.795 3.612-.572 3.592-.411H3.585C3.543-.697 3.299-1.451 3.285-1.499L2.769-3.096H2.239C2.036-2.497 1.513-.934 1.458-.425H1.451C1.395-.921 .879-2.462 .767-2.797C.711-2.964 .711-2.978 .676-3.096H.105L1.123 0H1.709C1.716-.028 1.904-.579 2.148-1.353C2.253-1.695 2.462-2.364 2.497-2.671L2.504-2.678C2.518-2.532 2.559-2.378 2.608-2.204S2.706-1.841 2.755-1.681L3.292 0H3.933L4.951-3.096Z'/>
-<path id='g0-120' d='M1.932-1.597L3.285-3.096H2.671L1.681-1.953L.669-3.096H.042L1.437-1.597L0 0H.621L1.681-1.311L2.783 0H3.41L1.932-1.597Z'/>
-<path id='g4-1' d='M1.445-1.245C1.445-1.41 1.305-1.549 1.141-1.549S.837-1.41 .837-1.245S.976-.941 1.141-.941S1.445-1.081 1.445-1.245Z'/>
-<use id='g2-46' xlink:href='#g0-46' transform='scale(.714)'/>
-<use id='g2-48' xlink:href='#g0-48' transform='scale(.714)'/>
-<use id='g2-49' xlink:href='#g0-49' transform='scale(.714)'/>
-<use id='g2-50' xlink:href='#g0-50' transform='scale(.714)'/>
-<use id='g2-51' xlink:href='#g0-51' transform='scale(.714)'/>
-<use id='g2-52' xlink:href='#g0-52' transform='scale(.714)'/>
-<use id='g2-53' xlink:href='#g0-53' transform='scale(.714)'/>
-<use id='g2-54' xlink:href='#g0-54' transform='scale(.714)'/>
-<use id='g2-55' xlink:href='#g0-55' transform='scale(.714)'/>
-<use id='g2-56' xlink:href='#g0-56' transform='scale(.714)'/>
-<use id='g2-57' xlink:href='#g0-57' transform='scale(.714)'/>
-<use id='g2-120' xlink:href='#g0-120' transform='scale(.714)'/>
-</defs>
-<g id='page1'>
-<path d='M140.82 255.492V246.637M199.488 255.492V246.637M258.156 255.492V246.637M316.824 255.492V246.637M375.496 255.492V246.637M140.82 70.016V78.871M199.488 70.016V78.871M258.156 70.016V78.871M316.824 70.016V78.871M375.496 70.016V78.871' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M111.484 250.887V246.637M170.152 250.887V246.637M228.824 250.887V246.637M287.492 250.887V246.637M346.16 250.887V246.637M404.828 250.887V246.637M111.484 74.617V78.871M170.152 74.617V78.871M228.824 74.617V78.871M287.492 74.617V78.871M346.16 74.617V78.871M404.828 74.617V78.871' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M82.148 246.637H86.402M82.148 213.082H86.402M82.148 179.531H86.402M82.148 145.977H86.402M82.148 112.426H86.402M82.148 78.871H86.402M434.164 246.637H429.91M434.164 213.082H429.91M434.164 179.531H429.91M434.164 145.977H429.91M434.164 112.426H429.91M434.164 78.871H429.91' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M82.148 246.637V78.871H434.164V246.637H82.148Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -11.54 34.954)'>
-<use x='114.487' y='226.079' xlink:href='#g3-99'/>
-<use x='118.25' y='226.079' xlink:href='#g3-102'/>
-<use x='120.838' y='226.079' xlink:href='#g3-114'/>
-<use x='123.73' y='226.079' xlink:href='#g3-97'/>
-<use x='127.798' y='226.079' xlink:href='#g3-99'/>
-</g>
-<g transform='matrix(1 0 0 1 45.565 34.954)'>
-<use x='114.487' y='226.079' xlink:href='#g3-108'/>
-<use x='116.507' y='226.079' xlink:href='#g3-101'/>
-<use x='120.271' y='226.079' xlink:href='#g3-97'/>
-<use x='124.339' y='226.079' xlink:href='#g3-110'/>
-<use x='128.711' y='226.079' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 106.188 34.954)'>
-<use x='114.487' y='226.079' xlink:href='#g3-114'/>
-<use x='117.379' y='226.079' xlink:href='#g3-101'/>
-<use x='121.142' y='226.079' xlink:href='#g3-100'/>
-<use x='125.515' y='226.079' xlink:href='#g3-105'/>
-<use x='127.535' y='226.079' xlink:href='#g3-115'/>
-</g>
-<g transform='matrix(1 0 0 1 159.716 34.954)'>
-<use x='114.487' y='226.079' xlink:href='#g3-108'/>
-<use x='116.507' y='226.079' xlink:href='#g3-97'/>
-<use x='120.34' y='226.079' xlink:href='#g3-114'/>
-<use x='123.232' y='226.079' xlink:href='#g3-115'/>
-<use x='126.478' y='226.079' xlink:href='#g3-111'/>
-<use x='130.712' y='226.079' xlink:href='#g3-110'/>
-<use x='135.085' y='226.079' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 215.596 34.954)'>
-<use x='114.487' y='226.079' xlink:href='#g3-109'/>
-<use x='121.211' y='226.079' xlink:href='#g3-115'/>
-<use x='124.458' y='226.079' xlink:href='#g3-116'/>
-<use x='127.516' y='226.079' xlink:href='#g3-114'/>
-<use x='130.408' y='226.079' xlink:href='#g3-101'/>
-<use x='134.171' y='226.079' xlink:href='#g3-115'/>
-<use x='137.418' y='226.079' xlink:href='#g3-115'/>
-<use x='140.664' y='226.079' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 277.158 34.954)'>
-<use x='114.487' y='226.079' xlink:href='#g3-114'/>
-<use x='117.379' y='226.079' xlink:href='#g3-112'/>
-<use x='121.751' y='226.079' xlink:href='#g3-116'/>
-<use x='124.809' y='226.079' xlink:href='#g3-101'/>
-<use x='128.573' y='226.079' xlink:href='#g3-115'/>
-<use x='131.819' y='226.079' xlink:href='#g3-116'/>
-<use x='134.877' y='226.079' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 22.192)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -11.361)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-53'/>
-<use x='121.25' y='226.079' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -44.915)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -78.468)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-53'/>
-<use x='121.25' y='226.079' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -112.021)'>
-<use x='114.487' y='226.079' xlink:href='#g2-50'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -145.574)'>
-<use x='114.487' y='226.079' xlink:href='#g2-50'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-53'/>
-<use x='121.25' y='226.079' xlink:href='#g2-120'/>
-</g>
-<path d='M82.148 179.531H434.164' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M86.328 246.637H89.566V179.531H86.328ZM144.996 246.637H148.234V179.531H144.996ZM203.668 246.637H206.902V179.531H203.668ZM262.336 246.637H265.574V179.531H262.336ZM321.004 246.637H324.242V179.531H321.004ZM379.672 246.637H382.91V179.531H379.672Z' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M86.328 246.637H89.566V179.531H86.328ZM144.996 246.637H148.234V179.531H144.996ZM203.668 246.637H206.902V179.531H203.668ZM262.336 246.637H265.574V179.531H262.336ZM321.004 246.637H324.242V179.531H321.004ZM379.672 246.637H382.91V179.531H379.672Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M87.949 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M85.953 179.531H89.938' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M87.949 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M85.953 179.531H89.938' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M146.617 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M144.625 179.531H148.609' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M146.617 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M144.625 179.531H148.609' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M205.285 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M203.293 179.531H207.277' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M205.285 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M203.293 179.531H207.277' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M263.953 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M261.961 179.531H265.945' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M263.953 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M261.961 179.531H265.945' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M322.625 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M320.629 179.531H324.617' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M322.625 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M320.629 179.531H324.617' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M381.293 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M379.301 179.531H383.285' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M381.293 179.531' fill='#fff' clip-path='url(#clip1)'/>
-<path d='M379.301 179.531H383.285' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M91.559 246.637H94.797V180.336H91.559ZM150.227 246.637H153.465V177.449H150.227ZM208.899 246.637H212.133V179.598H208.899ZM267.567 246.637H270.805V186.441H267.567ZM326.234 246.637H329.473V78.871H326.234ZM384.902 246.637H388.141V162.754H384.902Z' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M91.559 246.637H94.797V180.336H91.559ZM150.227 246.637H153.465V177.449H150.227ZM208.899 246.637H212.133V179.598H208.899ZM267.567 246.637H270.805V186.441H267.567ZM326.234 246.637H329.473V78.871H326.234ZM384.902 246.637H388.141V162.754H384.902Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M93.18 180.336' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M91.184 180.336H95.168' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M93.18 180.336' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M91.184 180.336H95.168' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M151.848 177.449' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M149.855 177.45H153.84' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M151.848 177.449' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M149.855 177.45H153.84' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M210.516 179.598' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M208.523 179.598H212.507' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M210.516 179.598' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M208.523 179.598H212.507' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M269.184 186.441' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M267.191 186.442H271.175' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M269.184 186.441' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M267.191 186.442H271.175' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M327.856 78.871' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M325.859 78.871H329.847' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M327.856 78.871' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M325.859 78.871H329.847' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M386.524 162.754' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M384.531 162.753H388.515' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M386.524 162.754' fill='#f0e0f0' clip-path='url(#clip1)'/>
-<path d='M384.531 162.753H388.515' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M96.789 246.637H100.027V87.73H96.789ZM155.457 246.637H158.695V189.262H155.457ZM214.129 246.637H217.363V161.074H214.129ZM272.797 246.637H276.035V221.738H272.797ZM331.465 246.637H334.703V194.965H331.465ZM390.133 246.637H393.371V212.949H390.133Z' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M96.789 246.637H100.027V87.73H96.789ZM155.457 246.637H158.695V189.262H155.457ZM214.129 246.637H217.363V161.074H214.129ZM272.797 246.637H276.035V221.738H272.797ZM331.465 246.637H334.703V194.965H331.465ZM390.133 246.637H393.371V212.949H390.133Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M98.41 87.73' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M96.414 87.73H100.399' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M98.41 87.73' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M96.414 87.73H100.399' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M157.078 189.262' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M155.086 189.261H159.071' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M157.078 189.262' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M155.086 189.261H159.071' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M215.746 161.074' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M213.754 161.074H217.738' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M215.746 161.074' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M213.754 161.074H217.738' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M274.414 221.738' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M272.422 221.739H276.406' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M274.414 221.738' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M272.422 221.739H276.406' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M333.086 194.965' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M331.09 194.964H335.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M333.086 194.965' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M331.09 194.964H335.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M391.754 212.949' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M389.762 212.949H393.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M391.754 212.949' fill='#e1c2e1' clip-path='url(#clip1)'/>
-<path d='M389.762 212.949H393.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M102.02 246.637H105.258V152.219H102.02ZM160.688 246.637H163.926V180.535H160.688ZM219.359 246.637H222.594V174.766H219.359ZM278.027 246.637H281.266V206.172H278.027ZM336.695 246.637H339.934V192.953H336.695ZM395.363 246.637H398.602V183.223H395.363Z' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M102.02 246.637H105.258V152.219H102.02ZM160.688 246.637H163.926V180.535H160.688ZM219.359 246.637H222.594V174.766H219.359ZM278.027 246.637H281.266V206.172H278.027ZM336.695 246.637H339.934V192.953H336.695ZM395.363 246.637H398.602V183.223H395.363Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M103.641 152.219' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M101.644 152.219H105.629' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M103.641 152.219' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M101.644 152.219H105.629' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M162.309 180.535' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M160.316 180.536H164.301' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M162.309 180.535' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M160.316 180.536H164.301' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M220.977 174.766' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M218.984 174.765H222.969' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M220.977 174.766' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M218.984 174.765H222.969' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M279.645 206.172' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M277.652 206.172H281.636' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M279.645 206.172' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M277.652 206.172H281.636' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M338.317 192.953' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M336.32 192.953H340.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M338.317 192.953' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M336.32 192.953H340.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M396.984 183.223' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M394.992 183.223H398.976' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M396.984 183.223' fill='#d1a3d1' clip-path='url(#clip1)'/>
-<path d='M394.992 183.223H398.976' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M107.25 246.637H110.488V154.5H107.25ZM165.918 246.637H169.156V169.734H165.918ZM224.59 246.637H227.824V134.703H224.59ZM283.258 246.637H286.496V192.281H283.258ZM341.926 246.637H345.164V197.313H341.926ZM400.594 246.637H403.832V195.703H400.594Z' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M107.25 246.637H110.488V154.5H107.25ZM165.918 246.637H169.156V169.734H165.918ZM224.59 246.637H227.824V134.703H224.59ZM283.258 246.637H286.496V192.281H283.258ZM341.926 246.637H345.164V197.313H341.926ZM400.594 246.637H403.832V195.703H400.594Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M108.871 154.5' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M106.875 154.5H110.86' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M108.871 154.5' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M106.875 154.5H110.86' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M167.539 169.734' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M165.547 169.734H169.532' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M167.539 169.734' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M165.547 169.734H169.532' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M226.207 134.703' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M224.215 134.703H228.2' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M226.207 134.703' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M224.215 134.703H228.2' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M284.875 192.281' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M282.883 192.281H286.868' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M284.875 192.281' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M282.883 192.281H286.868' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M343.547 197.313' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M341.551 197.312H345.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M343.547 197.313' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M341.551 197.312H345.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M402.215 195.703' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M400.223 195.704H404.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M402.215 195.703' fill='#c285c2' clip-path='url(#clip1)'/>
-<path d='M400.223 195.704H404.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M112.481 246.637H115.719V167.922H112.481ZM171.149 246.637H174.387V172.148H171.149ZM229.82 246.637H233.055V160.07H229.82ZM288.488 246.637H291.727V196.305H288.488ZM347.156 246.637H350.395V78.871H347.156ZM405.824 246.637H409.063V146.379H405.824Z' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M112.481 246.637H115.719V167.922H112.481ZM171.149 246.637H174.387V172.148H171.149ZM229.82 246.637H233.055V160.07H229.82ZM288.488 246.637H291.727V196.305H288.488ZM347.156 246.637H350.395V78.871H347.156ZM405.824 246.637H409.063V146.379H405.824Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M114.098 167.922' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M112.105 167.922H116.09' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M114.098 167.922' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M112.105 167.922H116.09' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M172.77 172.148' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M170.777 172.148H174.762' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M172.77 172.148' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M170.777 172.148H174.762' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M231.438 160.07' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M229.445 160.07H233.43' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M231.438 160.07' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M229.445 160.07H233.43' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M290.106 196.305' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M288.113 196.304H292.098' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M290.106 196.305' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M288.113 196.304H292.098' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M348.777 78.871' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M346.781 78.871H350.769' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M348.777 78.871' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M346.781 78.871H350.769' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M407.445 146.379' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M405.453 146.379H409.437' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M407.445 146.379' fill='#b366b3' clip-path='url(#clip1)'/>
-<path d='M405.453 146.379H409.437' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M117.711 246.637H120.949V153.223H117.711ZM176.379 246.637H179.617V169.465H176.379ZM235.051 246.637H238.285V174.633H235.051ZM293.719 246.637H296.957V215.766H293.719ZM352.387 246.637H355.625V78.871H352.387ZM411.055 246.637H414.293V191.742H411.055Z' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M117.711 246.637H120.949V153.223H117.711ZM176.379 246.637H179.617V169.465H176.379ZM235.051 246.637H238.285V174.633H235.051ZM293.719 246.637H296.957V215.766H293.719ZM352.387 246.637H355.625V78.871H352.387ZM411.055 246.637H414.293V191.742H411.055Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M119.328 153.223' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M117.336 153.222H121.321' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M119.328 153.223' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M117.336 153.222H121.321' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M178 169.465' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M176.008 169.465H179.993' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M178 169.465' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M176.008 169.465H179.993' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M236.668 174.633' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M234.676 174.633H238.661' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M236.668 174.633' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M234.676 174.633H238.661' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M295.336 215.766' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M293.344 215.765H297.329' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M295.336 215.766' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M293.344 215.765H297.329' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M354.008 78.871' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M352.012 78.871H356' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M354.008 78.871' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M352.012 78.871H356' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M412.676 191.742' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M410.684 191.742H414.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M412.676 191.742' fill='#a447a4' clip-path='url(#clip1)'/>
-<path d='M410.684 191.742H414.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M122.941 246.637H126.18V177.047H122.941ZM181.609 246.637H184.848V178.457H181.609ZM240.281 246.637H243.516V178.992H240.281ZM298.949 246.637H302.188V221.875H298.949ZM357.617 246.637H360.856V78.871H357.617ZM416.285 246.637H419.524V157.25H416.285Z' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M122.941 246.637H126.18V177.047H122.941ZM181.609 246.637H184.848V178.457H181.609ZM240.281 246.637H243.516V178.992H240.281ZM298.949 246.637H302.188V221.875H298.949ZM357.617 246.637H360.856V78.871H357.617ZM416.285 246.637H419.524V157.25H416.285Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M124.559 177.047' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M122.566 177.047H126.551' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M124.559 177.047' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M122.566 177.047H126.551' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M183.231 178.457' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M181.238 178.457H185.223' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M183.231 178.457' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M181.238 178.457H185.223' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M241.899 178.992' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M239.906 178.992H243.891' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M241.899 178.992' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M239.906 178.992H243.891' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M300.567 221.875' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M298.574 221.875H302.559' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M300.567 221.875' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M298.574 221.875H302.559' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M359.238 78.871' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M357.242 78.871H361.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M359.238 78.871' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M357.242 78.871H361.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M417.906 157.25' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M415.914 157.25H419.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M417.906 157.25' fill='#942994' clip-path='url(#clip1)'/>
-<path d='M415.914 157.25H419.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M128.172 246.637H131.41V182.414H128.172ZM186.84 246.637H190.078V170.805H186.84ZM245.512 246.637H248.746V179.059H245.512ZM304.18 246.637H307.418V207.176H304.18ZM362.848 246.637H366.086V153.629H362.848ZM421.516 246.637H424.754V207.313H421.516Z' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M128.172 246.637H131.41V182.414H128.172ZM186.84 246.637H190.078V170.805H186.84ZM245.512 246.637H248.746V179.059H245.512ZM304.18 246.637H307.418V207.176H304.18ZM362.848 246.637H366.086V153.629H362.848ZM421.516 246.637H424.754V207.313H421.516Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M129.789 182.414' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M127.797 182.415H131.782' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M129.789 182.414' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M127.797 182.415H131.782' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M188.461 170.805' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M186.469 170.805H190.454' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M188.461 170.805' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M186.469 170.805H190.454' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M247.129 179.059' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M245.137 179.058H249.122' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M247.129 179.059' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M245.137 179.058H249.122' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M305.797 207.176' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M303.804 207.176H307.789' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M305.797 207.176' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M303.804 207.176H307.789' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M364.469 153.629' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M362.473 153.629H366.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M364.469 153.629' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M362.473 153.629H366.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M423.137 207.313' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M421.144 207.313H425.128' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M423.137 207.313' fill='#850a85' clip-path='url(#clip1)'/>
-<path d='M421.144 207.313H425.128' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M133.402 246.637H136.641V178.055H133.402ZM192.07 246.637H195.309V164.969H192.07ZM250.742 246.637H253.977V175.703H250.742ZM309.41 246.637H312.649V184.027H309.41ZM368.078 246.637H371.317V99.809H368.078ZM426.746 246.637H429.984V143.023H426.746Z' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M133.402 246.637H136.641V178.055H133.402ZM192.07 246.637H195.309V164.969H192.07ZM250.742 246.637H253.977V175.703H250.742ZM309.41 246.637H312.649V184.027H309.41ZM368.078 246.637H371.317V99.809H368.078ZM426.746 246.637H429.984V143.023H426.746Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M135.02 178.055' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M133.027 178.055H137.012' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M135.02 178.055' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M133.027 178.055H137.012' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M193.692 164.969' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M191.699 164.969H195.684' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M193.692 164.969' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M191.699 164.969H195.684' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M252.359 175.703' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M250.367 175.703H254.352' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M252.359 175.703' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M250.367 175.703H254.352' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M311.027 184.027' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M309.035 184.027H313.02' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M311.027 184.027' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M309.035 184.027H313.02' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M369.699 99.809' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M367.703 99.809H371.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M369.699 99.809' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M367.703 99.809H371.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M428.367 143.023' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M426.375 143.023H430.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M428.367 143.023' fill='#760076' clip-path='url(#clip1)'/>
-<path d='M426.375 143.023H430.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<g transform='matrix(0 -1 1 0 -136.497 287.813)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -77.828 287.813)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -19.159 287.813)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 39.51 287.813)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 98.179 287.813)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 156.848 287.813)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -131.267 288.618)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-57'/>
-<use x='121.25' y='226.079' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 -72.598 285.733)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 -13.929 287.88)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 44.74 294.725)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-57'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 103.409 187.154)'>
-<use x='109.598' y='226.079' xlink:href='#g4-1'/>
-<use x='113.103' y='226.079' xlink:href='#g4-1'/>
-<use x='116.608' y='226.079' xlink:href='#g4-1'/>
-<use x='120.114' y='226.079' xlink:href='#g2-51'/>
-<use x='122.76' y='226.079' xlink:href='#g2-46'/>
-<use x='124.23' y='226.079' xlink:href='#g2-49'/>
-<use x='126.877' y='226.079' xlink:href='#g2-55'/>
-<use x='129.523' y='226.079' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 162.078 271.036)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-50'/>
-<use x='121.25' y='226.079' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 -126.036 196.012)'>
-<use x='114.487' y='226.079' xlink:href='#g2-50'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-51'/>
-<use x='121.25' y='226.079' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 -67.367 297.543)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-56'/>
-<use x='121.25' y='226.079' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -8.698 269.359)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-50'/>
-<use x='121.25' y='226.079' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 49.971 330.023)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-51'/>
-<use x='121.25' y='226.079' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 108.64 303.247)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-55'/>
-<use x='121.25' y='226.079' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 167.309 321.232)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-53'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -120.806 260.501)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-52'/>
-<use x='121.25' y='226.079' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 -62.137 288.819)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-57'/>
-<use x='121.25' y='226.079' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 -3.468 283.048)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 55.201 314.454)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-54'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 113.87 301.234)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-56'/>
-<use x='121.25' y='226.079' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 172.539 291.504)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-57'/>
-<use x='121.25' y='226.079' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 -115.575 262.782)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-51'/>
-<use x='121.25' y='226.079' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 -56.906 278.015)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-49'/>
-<use x='121.25' y='226.079' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 1.763 242.986)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-54'/>
-<use x='121.25' y='226.079' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 60.432 300.563)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-56'/>
-<use x='121.25' y='226.079' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 119.101 305.596)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-55'/>
-<use x='121.25' y='226.079' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 177.77 303.985)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-55'/>
-<use x='121.25' y='226.079' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -110.345 276.204)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-49'/>
-<use x='121.25' y='226.079' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 -51.676 280.431)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-49'/>
-<use x='121.25' y='226.079' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 6.993 268.352)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-50'/>
-<use x='121.25' y='226.079' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 65.662 304.589)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-55'/>
-<use x='121.25' y='226.079' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 124.331 187.154)'>
-<use x='109.598' y='226.079' xlink:href='#g4-1'/>
-<use x='113.103' y='226.079' xlink:href='#g4-1'/>
-<use x='116.608' y='226.079' xlink:href='#g4-1'/>
-<use x='120.114' y='226.079' xlink:href='#g2-53'/>
-<use x='122.76' y='226.079' xlink:href='#g2-46'/>
-<use x='124.23' y='226.079' xlink:href='#g2-51'/>
-<use x='126.877' y='226.079' xlink:href='#g2-50'/>
-<use x='129.523' y='226.079' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 183 254.663)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-52'/>
-<use x='121.25' y='226.079' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 -105.114 261.507)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-51'/>
-<use x='121.25' y='226.079' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 -46.445 277.747)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-49'/>
-<use x='121.25' y='226.079' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 12.224 282.914)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 70.893 324.05)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-52'/>
-<use x='121.25' y='226.079' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 129.562 187.154)'>
-<use x='109.598' y='226.079' xlink:href='#g4-1'/>
-<use x='113.103' y='226.079' xlink:href='#g4-1'/>
-<use x='116.608' y='226.079' xlink:href='#g4-1'/>
-<use x='120.114' y='226.079' xlink:href='#g2-50'/>
-<use x='122.76' y='226.079' xlink:href='#g2-46'/>
-<use x='124.23' y='226.079' xlink:href='#g2-56'/>
-<use x='126.877' y='226.079' xlink:href='#g2-53'/>
-<use x='129.523' y='226.079' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 188.231 300.026)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-56'/>
-<use x='121.25' y='226.079' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 -99.884 285.33)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 -41.215 286.739)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 17.454 287.276)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 76.123 330.157)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-51'/>
-<use x='121.25' y='226.079' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 134.792 187.154)'>
-<use x='109.598' y='226.079' xlink:href='#g4-1'/>
-<use x='113.103' y='226.079' xlink:href='#g4-1'/>
-<use x='116.608' y='226.079' xlink:href='#g4-1'/>
-<use x='120.114' y='226.079' xlink:href='#g2-52'/>
-<use x='122.76' y='226.079' xlink:href='#g2-46'/>
-<use x='124.23' y='226.079' xlink:href='#g2-50'/>
-<use x='126.877' y='226.079' xlink:href='#g2-51'/>
-<use x='129.523' y='226.079' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 193.461 265.534)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-51'/>
-<use x='121.25' y='226.079' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 -94.654 290.698)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-57'/>
-<use x='121.25' y='226.079' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -35.985 279.089)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-49'/>
-<use x='121.25' y='226.079' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 22.684 287.343)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 81.353 315.461)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-53'/>
-<use x='121.25' y='226.079' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 140.022 261.91)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-51'/>
-<use x='121.25' y='226.079' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 198.691 315.595)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-53'/>
-<use x='121.25' y='226.079' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 -89.423 286.337)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 -30.754 273.251)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-50'/>
-<use x='121.25' y='226.079' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 27.915 283.988)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-48'/>
-<use x='121.25' y='226.079' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 86.584 292.309)'>
-<use x='114.487' y='226.079' xlink:href='#g2-48'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-57'/>
-<use x='121.25' y='226.079' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 145.253 208.091)'>
-<use x='114.487' y='226.079' xlink:href='#g2-50'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-49'/>
-<use x='121.25' y='226.079' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 203.922 251.307)'>
-<use x='114.487' y='226.079' xlink:href='#g2-49'/>
-<use x='117.133' y='226.079' xlink:href='#g2-46'/>
-<use x='118.603' y='226.079' xlink:href='#g2-53'/>
-<use x='121.25' y='226.079' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 -166.719 329.135)'>
-<use x='114.487' y='226.079' xlink:href='#g1-82'/>
-<use x='120.457' y='226.079' xlink:href='#g1-101'/>
-<use x='124.553' y='226.079' xlink:href='#g1-108'/>
-<use x='126.753' y='226.079' xlink:href='#g1-97'/>
-<use x='131.181' y='226.079' xlink:href='#g1-116'/>
-<use x='134.509' y='226.079' xlink:href='#g1-105'/>
-<use x='136.709' y='226.079' xlink:href='#g1-118'/>
-<use x='140.957' y='226.079' xlink:href='#g1-101'/>
-<use x='148.124' y='226.079' xlink:href='#g1-114'/>
-<use x='151.272' y='226.079' xlink:href='#g1-115'/>
-<use x='154.805' y='226.079' xlink:href='#g1-115'/>
-<use x='161.409' y='226.079' xlink:href='#g3-40'/>
-<use x='164.702' y='226.079' xlink:href='#g3-108'/>
-<use x='166.722' y='226.079' xlink:href='#g3-111'/>
-<use x='170.721' y='226.079' xlink:href='#g3-119'/>
-<use x='176.27' y='226.079' xlink:href='#g3-101'/>
-<use x='180.034' y='226.079' xlink:href='#g3-114'/>
-<use x='185.749' y='226.079' xlink:href='#g3-105'/>
-<use x='187.769' y='226.079' xlink:href='#g3-115'/>
-<use x='193.838' y='226.079' xlink:href='#g3-98'/>
-<use x='198.446' y='226.079' xlink:href='#g3-101'/>
-<use x='202.209' y='226.079' xlink:href='#g3-116'/>
-<use x='205.267' y='226.079' xlink:href='#g3-116'/>
-<use x='208.325' y='226.079' xlink:href='#g3-101'/>
-<use x='212.089' y='226.079' xlink:href='#g3-114'/>
-<use x='214.981' y='226.079' xlink:href='#g3-41'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-b.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-b.svg
deleted file mode 100644
index c81072e..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-b.svg
+++ /dev/null
@@ -1,1131 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.9.1 -->
-<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='381.627pt' height='254.34pt' viewBox='106.732 54.992 381.627 254.34'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip2'>
-<path d='M135.949 246.637H487.961V78.871H135.949Z'/>
-</clipPath>
-<path id='g1-82' d='M3.891-2.914C4.806-3.165 5.452-3.811 5.452-4.546C5.452-5.469 4.411-6.223 3.129-6.223H.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891-2.914ZM1.704-3.407V-5.694H3.022C4.062-5.694 4.671-5.192 4.671-4.546C4.671-3.963 4.125-3.407 3.022-3.407H1.704Z'/>
-<path id='g1-97' d='M3.694-2.591C3.694-3.479 3.04-4.133 2.152-4.133C1.569-4.133 1.139-3.981 .708-3.739L.762-3.102C1.21-3.434 1.65-3.569 2.143-3.569C2.645-3.569 2.95-3.165 2.95-2.582V-2.206C1.408-2.17 .395-1.766 .395-1.04C.395-.619 .672 .099 1.453 .099C1.632 .099 2.412 .081 2.977-.341V0H3.694V-2.591ZM2.95-1.255C2.95-1.067 2.95-.843 2.627-.655C2.403-.52 2.107-.484 1.928-.484C1.47-.484 1.085-.699 1.085-1.058C1.085-1.695 2.833-1.722 2.95-1.722V-1.255Z'/>
-<path id='g1-101' d='M3.829-1.964C3.829-2.242 3.82-2.923 3.47-3.461C3.093-4.026 2.52-4.133 2.179-4.133C1.139-4.133 .314-3.174 .314-2.026C.314-.843 1.193 .099 2.313 .099C2.744 .099 3.264-.009 3.784-.341L3.73-.959C3.165-.556 2.636-.484 2.322-.484C1.578-.484 1.004-1.139 .977-1.964H3.829ZM1.031-2.493C1.175-3.067 1.614-3.551 2.179-3.551C2.511-3.551 3.12-3.398 3.291-2.493H1.031Z'/>
-<path id='g1-105' d='M1.524-6.133H.664V-5.272H1.524V-6.133ZM1.453-3.981H.735V0H1.453V-3.981Z'/>
-<path id='g1-108' d='M1.453-6.223H.735V0H1.453V-6.223Z'/>
-<path id='g1-114' d='M1.462-1.91C1.462-2.851 2.197-3.425 3.013-3.434V-4.08C2.367-4.071 1.775-3.748 1.408-3.219V-4.035H.744V0H1.462V-1.91Z'/>
-<path id='g1-115' d='M3.165-3.847C2.609-4.098 2.197-4.133 1.829-4.133C1.623-4.133 .305-4.133 .305-2.95C.305-2.52 .565-2.251 .664-2.152C1.004-1.856 1.237-1.811 1.847-1.695C2.134-1.641 2.645-1.542 2.645-1.085C2.645-.502 1.919-.502 1.802-.502C1.273-.502 .762-.681 .377-.95L.26-.296C.798-.009 1.345 .099 1.802 .099C2.385 .099 3.318-.09 3.318-1.157C3.318-1.47 3.192-1.784 2.878-2.053C2.573-2.313 2.304-2.367 1.748-2.475C1.426-2.537 .977-2.618 .977-3.04C.977-3.569 1.614-3.569 1.748-3.569C2.403-3.569 2.789-3.362 3.049-3.219L3.165-3.847Z'/>
-<path id='g1-116' d='M1.623-3.425H2.914V-3.981H1.623V-5.12H.959V-3.981H.17V-3.425H.933V-1.13C.933-.601 1.049 .099 1.704 .099C2.098 .099 2.564 .018 3.067-.233L2.914-.798C2.681-.619 2.367-.511 2.089-.511C1.739-.511 1.623-.825 1.623-1.291V-3.425Z'/>
-<path id='g1-118' d='M4.116-3.981H3.407L2.699-2.161C2.52-1.695 2.188-.825 2.143-.493H2.125C2.107-.646 2.08-.816 1.587-2.107C1.318-2.833 .879-3.927 .861-3.981H.126L1.704 0H2.537L4.116-3.981Z'/>
-<use id='g3-40' xlink:href='#g0-40' transform='scale(1.143)'/>
-<use id='g3-41' xlink:href='#g0-41' transform='scale(1.143)'/>
-<use id='g3-45' xlink:href='#g0-45' transform='scale(1.143)'/>
-<use id='g3-49' xlink:href='#g0-49' transform='scale(1.143)'/>
-<use id='g3-54' xlink:href='#g0-54' transform='scale(1.143)'/>
-<use id='g3-56' xlink:href='#g0-56' transform='scale(1.143)'/>
-<use id='g3-58' xlink:href='#g0-58' transform='scale(1.143)'/>
-<use id='g3-78' xlink:href='#g0-78' transform='scale(1.143)'/>
-<use id='g3-97' xlink:href='#g0-97' transform='scale(1.143)'/>
-<use id='g3-98' xlink:href='#g0-98' transform='scale(1.143)'/>
-<use id='g3-99' xlink:href='#g0-99' transform='scale(1.143)'/>
-<use id='g3-100' xlink:href='#g0-100' transform='scale(1.143)'/>
-<use id='g3-101' xlink:href='#g0-101' transform='scale(1.143)'/>
-<use id='g3-103' xlink:href='#g0-103' transform='scale(1.143)'/>
-<use id='g3-104' xlink:href='#g0-104' transform='scale(1.143)'/>
-<use id='g3-105' xlink:href='#g0-105' transform='scale(1.143)'/>
-<use id='g3-106' xlink:href='#g0-106' transform='scale(1.143)'/>
-<use id='g3-108' xlink:href='#g0-108' transform='scale(1.143)'/>
-<use id='g3-109' xlink:href='#g0-109' transform='scale(1.143)'/>
-<use id='g3-110' xlink:href='#g0-110' transform='scale(1.143)'/>
-<use id='g3-111' xlink:href='#g0-111' transform='scale(1.143)'/>
-<use id='g3-112' xlink:href='#g0-112' transform='scale(1.143)'/>
-<use id='g3-114' xlink:href='#g0-114' transform='scale(1.143)'/>
-<use id='g3-115' xlink:href='#g0-115' transform='scale(1.143)'/>
-<use id='g3-116' xlink:href='#g0-116' transform='scale(1.143)'/>
-<use id='g3-119' xlink:href='#g0-119' transform='scale(1.143)'/>
-<use id='g3-120' xlink:href='#g0-120' transform='scale(1.143)'/>
-<path id='g0-40' d='M2.127-5.23C2.008-5.23 1.995-5.23 1.911-5.154C1.032-4.387 .586-3.145 .586-1.743C.586-.425 .983 .844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 .063C1.276-.481 1.193-1.053 1.193-1.743C1.193-4.156 2.322-5.112 2.462-5.23H2.127Z'/>
-<path id='g0-41' d='M.746 1.743C.865 1.743 .879 1.743 .962 1.667C1.841 .9 2.287-.342 2.287-1.743C2.287-3.062 1.89-4.331 .969-5.14C.879-5.23 .865-5.23 .746-5.23H.411C.432-5.216 1.109-4.638 1.43-3.55C1.597-3.006 1.681-2.434 1.681-1.743C1.681 .669 .551 1.625 .411 1.743H.746Z'/>
-<path id='g0-44' d='M1.339-.007V-.628H.711V0H.907L.704 .893H1.018L1.339-.007Z'/>
-<path id='g0-45' d='M2.05-1.332V-1.771H.084V-1.332H2.05Z'/>
-<path id='g0-46' d='M1.339-.628H.711V0H1.339V-.628Z'/>
-<path id='g0-48' d='M3.403-2.267C3.403-2.601 3.403-3.417 3.075-3.989C2.72-4.617 2.183-4.721 1.848-4.721C1.534-4.721 .99-4.624 .642-4.024C.307-3.466 .293-2.706 .293-2.267C.293-1.75 .321-1.116 .614-.586C.921-.021 1.437 .146 1.848 .146C2.545 .146 2.929-.258 3.138-.697C3.382-1.193 3.403-1.834 3.403-2.267ZM1.848-.314C1.555-.314 1.22-.481 1.046-.983C.907-1.409 .9-1.848 .9-2.357C.9-2.999 .9-4.261 1.848-4.261S2.797-2.999 2.797-2.357C2.797-1.897 2.797-1.374 2.629-.928C2.434-.425 2.078-.314 1.848-.314Z'/>
-<path id='g0-49' d='M2.239-4.721H2.085C1.632-4.303 1.06-4.275 .642-4.261V-3.822C.914-3.829 1.262-3.843 1.611-3.982V-.439H.683V0H3.166V-.439H2.239V-4.721Z'/>
-<path id='g0-50' d='M1.974-.537C1.89-.537 1.806-.53 1.723-.53H.928L2.008-1.485C2.134-1.597 2.476-1.855 2.608-1.967C2.915-2.246 3.327-2.608 3.327-3.215C3.327-4.003 2.741-4.721 1.743-4.721C1.004-4.721 .544-4.324 .307-3.612L.635-3.201C.795-3.787 1.039-4.24 1.646-4.24C2.232-4.24 2.678-3.829 2.678-3.201C2.678-2.622 2.336-2.294 1.918-1.897C1.778-1.757 1.402-1.444 1.255-1.304C1.053-1.123 .572-.656 .37-.481V0H3.327V-.537H1.974Z'/>
-<path id='g0-51' d='M.697-3.578C.983-4.135 1.485-4.289 1.82-4.289C2.232-4.289 2.538-4.052 2.538-3.654C2.538-3.285 2.287-2.831 1.757-2.741C1.723-2.734 1.695-2.734 1.234-2.699V-2.239H1.778C2.441-2.239 2.685-1.716 2.685-1.276C2.685-.732 2.35-.314 1.806-.314C1.311-.314 .746-.551 .398-.997L.307-.544C.711-.091 1.276 .146 1.82 .146C2.734 .146 3.389-.537 3.389-1.269C3.389-1.841 2.929-2.301 2.378-2.462C2.908-2.734 3.18-3.201 3.18-3.654C3.18-4.247 2.573-4.721 1.827-4.721C1.213-4.721 .704-4.4 .411-3.982L.697-3.578Z'/>
-<path id='g0-52' d='M2.762-1.165H3.487V-1.625H2.762V-4.575H2.071L.209-1.625V-1.165H2.162V0H2.762V-1.165ZM.802-1.625C1.011-1.953 2.211-3.815 2.211-4.233V-1.625H.802Z'/>
-<path id='g0-53' d='M1.144-4.094H3.075V-4.575H.586V-1.967H1.095C1.262-2.343 1.59-2.511 1.904-2.511C2.19-2.511 2.622-2.315 2.622-1.43C2.622-.516 2.043-.314 1.688-.314C1.227-.314 .781-.558 .544-.955L.279-.537C.621-.112 1.137 .146 1.688 .146C2.608 .146 3.327-.565 3.327-1.416C3.327-2.28 2.685-2.971 1.918-2.971C1.618-2.971 1.353-2.866 1.144-2.692V-4.094Z'/>
-<path id='g0-54' d='M3.062-4.582C2.685-4.721 2.42-4.721 2.287-4.721C1.227-4.721 .307-3.724 .307-2.253C.307-.363 1.158 .146 1.862 .146C2.427 .146 2.72-.119 2.936-.342C3.382-.816 3.389-1.311 3.389-1.555C3.389-2.469 2.894-3.229 2.218-3.229C1.534-3.229 1.165-2.873 .962-2.671C1.053-3.626 1.541-4.289 2.294-4.289C2.434-4.289 2.713-4.275 3.062-4.142V-4.582ZM.969-1.534C.969-1.576 .969-1.681 .976-1.716C.976-2.19 1.276-2.769 1.897-2.769C2.748-2.769 2.748-1.792 2.748-1.555C2.748-1.29 2.748-.997 2.559-.704C2.392-.453 2.183-.314 1.862-.314C1.123-.314 1.004-1.227 .969-1.534Z'/>
-<path id='g0-55' d='M1.723-4.038C1.806-4.038 1.89-4.045 1.974-4.045H2.852C1.792-3.006 1.116-1.548 1.116 .07H1.771C1.771-1.967 2.762-3.431 3.389-4.087V-4.575H.307V-4.038H1.723Z'/>
-<path id='g0-56' d='M2.385-2.469C2.845-2.615 3.285-2.985 3.285-3.501C3.285-4.135 2.678-4.721 1.848-4.721S.411-4.135 .411-3.501C.411-2.978 .865-2.608 1.311-2.469C.697-2.28 .307-1.806 .307-1.269C.307-.523 .969 .146 1.848 .146S3.389-.523 3.389-1.269C3.389-1.806 2.992-2.28 2.385-2.469ZM1.848-2.699C1.353-2.699 .948-2.985 .948-3.494C.948-3.94 1.262-4.289 1.848-4.289C2.427-4.289 2.748-3.94 2.748-3.494C2.748-2.999 2.357-2.699 1.848-2.699ZM1.848-.314C1.367-.314 .941-.621 .941-1.276C.941-1.904 1.346-2.239 1.848-2.239S2.755-1.897 2.755-1.276C2.755-.621 2.322-.314 1.848-.314Z'/>
-<path id='g0-57' d='M.537-.174C.879 .077 1.193 .146 1.52 .146C2.497 .146 3.389-.837 3.389-2.336C3.389-4.24 2.545-4.721 1.876-4.721C1.255-4.721 .969-4.428 .767-4.226C.321-3.773 .307-3.292 .307-3.02C.307-2.12 .795-1.346 1.478-1.346C2.267-1.346 2.699-1.869 2.734-1.911C2.636-.802 2.092-.314 1.52-.314C1.158-.314 .934-.446 .774-.579L.537-.174ZM2.713-3.027C2.72-2.985 2.72-2.915 2.72-2.873C2.72-2.357 2.406-1.806 1.799-1.806C1.534-1.806 1.325-1.883 1.144-2.169C.962-2.441 .948-2.706 .948-3.02C.948-3.292 .948-3.605 1.165-3.912C1.311-4.122 1.52-4.289 1.869-4.289C2.545-4.289 2.692-3.473 2.713-3.027Z'/>
-<path id='g0-58' d='M1.339-3.096H.711V-2.469H1.339V-3.096ZM.711-.628V0H1.339V-.628H.711Z'/>
-<path id='g0-64' d='M4.142-.614C4.038-.614 4.024-.614 3.968-.586C3.626-.467 3.271-.391 2.901-.391C1.778-.391 .976-1.339 .976-2.42C.976-3.592 1.883-4.449 2.859-4.449C3.055-4.449 3.515-4.4 3.745-3.843C3.55-3.954 3.333-4.003 3.152-4.003C2.406-4.003 1.778-3.306 1.778-2.42C1.778-1.513 2.427-.837 3.145-.837C3.689-.837 4.519-1.276 4.519-2.518C4.519-3.222 4.47-4.91 2.866-4.91C1.541-4.91 .411-3.815 .411-2.42C.411-1.039 1.527 .07 2.873 .07C3.515 .07 4.115-.195 4.519-.614H4.142ZM3.152-1.297C2.72-1.297 2.343-1.778 2.343-2.42C2.343-3.082 2.734-3.543 3.145-3.543C3.578-3.543 3.954-3.062 3.954-2.42C3.954-1.757 3.564-1.297 3.152-1.297Z'/>
-<path id='g0-67' d='M4.317-.851C3.829-.551 3.605-.418 2.908-.418C1.827-.418 1.172-1.43 1.172-2.434C1.172-3.466 1.89-4.435 2.908-4.435C3.368-4.435 3.843-4.289 4.163-4.045L4.275-4.679C3.787-4.861 3.396-4.917 2.887-4.917C1.506-4.917 .474-3.773 .474-2.427C.474-.99 1.569 .07 2.929 .07C3.612 .07 3.898-.07 4.359-.321L4.317-.851Z'/>
-<path id='g0-71' d='M4.442-2.085H2.88V-1.625H3.829V-.558C3.522-.481 3.222-.418 2.908-.418C1.834-.418 1.172-1.43 1.172-2.427C1.172-3.382 1.82-4.435 2.873-4.435C3.515-4.435 3.919-4.24 4.268-3.947L4.38-4.582C3.898-4.812 3.473-4.924 2.943-4.924C1.534-4.924 .474-3.822 .474-2.427C.474-1.067 1.527 .07 2.901 .07C3.403 .07 3.996-.042 4.442-.272V-2.085Z'/>
-<path id='g0-73' d='M1.381-4.84H.676V0H1.381V-4.84Z'/>
-<path id='g0-78' d='M1.646-4.84H.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-.551H3.933L1.646-4.84Z'/>
-<path id='g0-85' d='M4.4-4.84H3.794V-1.625C3.794-.69 3.166-.265 2.566-.265S1.381-.697 1.381-1.618V-4.84H.676V-1.632C.676-.607 1.555 .146 2.559 .146C3.557 .146 4.4-.614 4.4-1.632V-4.84Z'/>
-<path id='g0-88' d='M2.755-2.552L4.519-4.84H3.759L2.413-3.055L1.039-4.84H.209L2.071-2.552L.105 0H.865L2.413-2.099L3.996 0H4.826L2.755-2.552Z'/>
-<path id='g0-97' d='M2.971-2.008C2.971-2.72 2.427-3.201 1.736-3.201C1.297-3.201 .962-3.11 .572-2.901L.614-2.392C.844-2.545 1.186-2.755 1.736-2.755C2.043-2.755 2.364-2.525 2.364-2.001V-1.723C1.332-1.688 .314-1.471 .314-.823C.314-.474 .551 .07 1.165 .07C1.465 .07 2.015 .007 2.385-.265V0H2.971V-2.008ZM2.364-.99C2.364-.851 2.364-.669 2.12-.523C1.897-.398 1.625-.391 1.548-.391C1.165-.391 .872-.565 .872-.83C.872-1.276 2.05-1.318 2.364-1.332V-.99Z'/>
-<path id='g0-98' d='M1.179-4.84H.593V0H1.2V-.328C1.353-.195 1.688 .07 2.197 .07C2.957 .07 3.571-.642 3.571-1.555C3.571-2.399 3.089-3.166 2.392-3.166C1.953-3.166 1.527-3.027 1.179-2.769V-4.84ZM1.2-2.197C1.2-2.308 1.2-2.392 1.444-2.552C1.548-2.615 1.736-2.706 1.974-2.706C2.441-2.706 2.964-2.392 2.964-1.555C2.964-.704 2.385-.391 1.897-.391C1.639-.391 1.395-.509 1.2-.823V-2.197Z'/>
-<path id='g0-99' d='M3.034-.76C2.685-.537 2.308-.411 1.876-.411C1.234-.411 .858-.928 .858-1.555C.858-2.092 1.137-2.72 1.897-2.72C2.371-2.72 2.594-2.622 2.95-2.399L3.041-2.901C2.622-3.11 2.441-3.201 1.897-3.201C.851-3.201 .251-2.357 .251-1.548C.251-.697 .921 .07 1.869 .07C2.357 .07 2.776-.077 3.075-.251L3.034-.76Z'/>
-<path id='g0-100' d='M3.229-4.84H2.643V-2.797C2.197-3.124 1.743-3.166 1.541-3.166C.809-3.166 .251-2.434 .251-1.548S.802 .07 1.52 .07C1.953 .07 2.357-.126 2.622-.363V0H3.229V-4.84ZM2.622-.865C2.448-.579 2.183-.391 1.848-.391C1.36-.391 .858-.732 .858-1.541C.858-2.413 1.451-2.706 1.925-2.706C2.204-2.706 2.441-2.587 2.622-2.35V-.865Z'/>
-<path id='g0-101' d='M2.999-.76C2.608-.481 2.169-.391 1.869-.391C1.262-.391 .802-.886 .781-1.527H3.068C3.068-1.848 3.034-2.315 2.762-2.713C2.511-3.068 2.092-3.201 1.75-3.201C.9-3.201 .244-2.455 .244-1.569C.244-.676 .941 .07 1.862 .07C2.267 .07 2.685-.049 3.041-.265L2.999-.76ZM.83-1.946C.99-2.504 1.402-2.741 1.75-2.741C2.057-2.741 2.511-2.594 2.643-1.946H.83Z'/>
-<path id='g0-103' d='M3.508-3.166C3.354-3.166 2.887-3.159 2.357-2.957L2.343-2.95C2.092-3.117 1.848-3.166 1.646-3.166C.962-3.166 .453-2.629 .453-2.029C.453-1.785 .537-1.534 .697-1.339C.6-1.22 .495-1.025 .495-.76C.495-.488 .607-.314 .669-.23C.286-.007 .209 .314 .209 .481C.209 1.011 .941 1.43 1.848 1.43C2.762 1.43 3.487 1.011 3.487 .481C3.487-.502 2.267-.502 1.967-.502H1.318C1.206-.502 .907-.502 .907-.865C.907-1.004 .955-1.074 .962-1.088C1.206-.934 1.451-.886 1.639-.886C2.322-.886 2.831-1.423 2.831-2.022C2.831-2.246 2.769-2.448 2.643-2.636C2.615-2.678 2.615-2.685 2.615-2.692C2.615-2.72 3.034-2.72 3.068-2.72C3.075-2.72 3.34-2.72 3.592-2.692L3.508-3.166ZM1.646-1.318C1.269-1.318 .99-1.555 .99-2.022C.99-2.566 1.339-2.734 1.639-2.734C2.015-2.734 2.294-2.497 2.294-2.029C2.294-1.485 1.946-1.318 1.646-1.318ZM1.974 .042C2.134 .042 2.957 .042 2.957 .488C2.957 .788 2.434 .997 1.848 .997S.739 .788 .739 .488C.739 .453 .739 .042 1.304 .042H1.974Z'/>
-<path id='g0-104' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.625-3.166 1.304-2.817 1.165-2.671V-4.84H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-105' d='M1.227-4.784H.523V-4.08H1.227V-4.784ZM1.172-3.096H.586V0H1.172V-3.096Z'/>
-<path id='g0-106' d='M1.381-4.784H.676V-4.08H1.381V-4.784ZM-.453 1.186C-.133 1.36 .181 1.423 .446 1.423C.928 1.423 1.381 1.053 1.381 .411V-3.096H.795V.46C.795 .586 .795 .697 .649 .816C.488 .934 .293 .934 .23 .934C-.063 .934-.244 .802-.328 .725L-.453 1.186Z'/>
-<path id='g0-108' d='M1.172-4.84H.586V0H1.172V-4.84Z'/>
-<path id='g0-109' d='M5.3-2.064C5.3-2.608 5.14-3.166 4.282-3.166C3.696-3.166 3.333-2.824 3.166-2.601C3.096-2.79 2.922-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-1.695C3.243-2.155 3.438-2.706 3.975-2.706C4.693-2.706 4.693-2.218 4.693-2.015V0H5.3V-2.064Z'/>
-<path id='g0-110' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-111' d='M3.487-1.527C3.487-2.448 2.755-3.201 1.848-3.201S.209-2.441 .209-1.527C.209-.642 .948 .07 1.848 .07C2.755 .07 3.487-.642 3.487-1.527ZM1.848-.411C1.297-.411 .816-.816 .816-1.604S1.332-2.741 1.848-2.741C2.371-2.741 2.88-2.378 2.88-1.604C2.88-.809 2.385-.411 1.848-.411Z'/>
-<path id='g0-112' d='M1.2-.328C1.569 .007 1.967 .07 2.204 .07C2.943 .07 3.571-.635 3.571-1.555C3.571-2.392 3.11-3.166 2.42-3.166C2.106-3.166 1.583-3.075 1.179-2.762V-3.096H.593V1.353H1.2V-.328ZM1.2-2.315C1.36-2.511 1.632-2.685 1.967-2.685C2.525-2.685 2.964-2.169 2.964-1.555C2.964-.865 2.441-.391 1.897-.391C1.792-.391 1.618-.404 1.437-.551C1.227-.711 1.2-.816 1.2-.948V-2.315Z'/>
-<path id='g0-114' d='M1.179-1.485C1.179-2.239 1.806-2.643 2.42-2.65V-3.166C1.834-3.159 1.409-2.873 1.13-2.504V-3.145H.593V0H1.179V-1.485Z'/>
-<path id='g0-115' d='M2.545-2.985C2.071-3.18 1.723-3.201 1.471-3.201C1.297-3.201 .244-3.201 .244-2.273C.244-1.946 .425-1.764 .516-1.681C.76-1.437 1.053-1.381 1.423-1.311C1.75-1.248 2.127-1.179 2.127-.844C2.127-.404 1.548-.404 1.451-.404C1.004-.404 .586-.565 .307-.76L.209-.237C.446-.119 .872 .07 1.451 .07C1.764 .07 2.071 .021 2.329-.167C2.587-.363 2.671-.669 2.671-.907C2.671-1.032 2.657-1.304 2.364-1.569C2.106-1.799 1.855-1.848 1.52-1.911C1.109-1.988 .788-2.05 .788-2.357C.788-2.755 1.297-2.755 1.402-2.755C1.799-2.755 2.106-2.671 2.455-2.49L2.545-2.985Z'/>
-<path id='g0-116' d='M1.311-2.657H2.343V-3.096H1.311V-3.982H.774V-3.096H.139V-2.657H.753V-.893C.753-.425 .872 .07 1.374 .07S2.26-.091 2.469-.188L2.35-.635C2.12-.467 1.876-.411 1.681-.411C1.388-.411 1.311-.697 1.311-1.018V-2.657Z'/>
-<path id='g0-117' d='M3.243-3.096H2.636V-1.074C2.636-.516 2.162-.342 1.757-.342C1.241-.342 1.186-.481 1.186-.802V-3.096H.579V-.76C.579-.139 .851 .07 1.339 .07C1.625 .07 2.239 .014 2.657-.321V0H3.243V-3.096Z'/>
-<path id='g0-119' d='M4.951-3.096H4.407C4.345-2.901 3.954-1.723 3.738-.997C3.682-.795 3.612-.572 3.592-.411H3.585C3.543-.697 3.299-1.451 3.285-1.499L2.769-3.096H2.239C2.036-2.497 1.513-.934 1.458-.425H1.451C1.395-.921 .879-2.462 .767-2.797C.711-2.964 .711-2.978 .676-3.096H.105L1.123 0H1.709C1.716-.028 1.904-.579 2.148-1.353C2.253-1.695 2.462-2.364 2.497-2.671L2.504-2.678C2.518-2.532 2.559-2.378 2.608-2.204S2.706-1.841 2.755-1.681L3.292 0H3.933L4.951-3.096Z'/>
-<path id='g0-120' d='M1.932-1.597L3.285-3.096H2.671L1.681-1.953L.669-3.096H.042L1.437-1.597L0 0H.621L1.681-1.311L2.783 0H3.41L1.932-1.597Z'/>
-<path id='g0-122' d='M2.957-2.803V-3.096H.307V-2.65H1.332C1.416-2.65 1.499-2.657 1.583-2.657H2.127L.209-.307V0H2.978V-.467H1.897C1.813-.467 1.73-.46 1.646-.46H1.039L2.957-2.803Z'/>
-<path id='g4-1' d='M1.445-1.245C1.445-1.41 1.305-1.549 1.141-1.549S.837-1.41 .837-1.245S.976-.941 1.141-.941S1.445-1.081 1.445-1.245Z'/>
-<path id='g4-2' d='M4.13-2.481C4.184-2.535 4.204-2.57 4.204-2.615C4.204-2.69 4.139-2.755 4.065-2.755C4.01-2.755 3.985-2.73 3.93-2.675L2.7-1.445L1.465-2.68C1.41-2.735 1.375-2.755 1.33-2.755C1.255-2.755 1.191-2.69 1.191-2.615C1.191-2.56 1.215-2.535 1.27-2.481L2.501-1.245L1.27-.01C1.215 .045 1.191 .07 1.191 .125C1.191 .199 1.255 .264 1.33 .264C1.385 .264 1.41 .239 1.46 .189L2.695-1.046L3.97 .229C3.995 .249 4.03 .264 4.065 .264C4.139 .264 4.204 .199 4.204 .125C4.204 .095 4.194 .075 4.184 .05C4.164 .02 3.238-.892 2.894-1.245L4.13-2.481Z'/>
-<use id='g2-41' xlink:href='#g0-41' transform='scale(.714)'/>
-<use id='g2-44' xlink:href='#g0-44' transform='scale(.714)'/>
-<use id='g2-45' xlink:href='#g0-45' transform='scale(.714)'/>
-<use id='g2-46' xlink:href='#g0-46' transform='scale(.714)'/>
-<use id='g2-48' xlink:href='#g0-48' transform='scale(.714)'/>
-<use id='g2-49' xlink:href='#g0-49' transform='scale(.714)'/>
-<use id='g2-50' xlink:href='#g0-50' transform='scale(.714)'/>
-<use id='g2-51' xlink:href='#g0-51' transform='scale(.714)'/>
-<use id='g2-52' xlink:href='#g0-52' transform='scale(.714)'/>
-<use id='g2-53' xlink:href='#g0-53' transform='scale(.714)'/>
-<use id='g2-54' xlink:href='#g0-54' transform='scale(.714)'/>
-<use id='g2-55' xlink:href='#g0-55' transform='scale(.714)'/>
-<use id='g2-56' xlink:href='#g0-56' transform='scale(.714)'/>
-<use id='g2-57' xlink:href='#g0-57' transform='scale(.714)'/>
-<use id='g2-64' xlink:href='#g0-64' transform='scale(.714)'/>
-<use id='g2-67' xlink:href='#g0-67' transform='scale(.714)'/>
-<use id='g2-71' xlink:href='#g0-71' transform='scale(.714)'/>
-<use id='g2-73' xlink:href='#g0-73' transform='scale(.714)'/>
-<use id='g2-85' xlink:href='#g0-85' transform='scale(.714)'/>
-<use id='g2-88' xlink:href='#g0-88' transform='scale(.714)'/>
-<use id='g2-97' xlink:href='#g0-97' transform='scale(.714)'/>
-<use id='g2-98' xlink:href='#g0-98' transform='scale(.714)'/>
-<use id='g2-99' xlink:href='#g0-99' transform='scale(.714)'/>
-<use id='g2-100' xlink:href='#g0-100' transform='scale(.714)'/>
-<use id='g2-101' xlink:href='#g0-101' transform='scale(.714)'/>
-<use id='g2-103' xlink:href='#g0-103' transform='scale(.714)'/>
-<use id='g2-104' xlink:href='#g0-104' transform='scale(.714)'/>
-<use id='g2-105' xlink:href='#g0-105' transform='scale(.714)'/>
-<use id='g2-108' xlink:href='#g0-108' transform='scale(.714)'/>
-<use id='g2-109' xlink:href='#g0-109' transform='scale(.714)'/>
-<use id='g2-110' xlink:href='#g0-110' transform='scale(.714)'/>
-<use id='g2-111' xlink:href='#g0-111' transform='scale(.714)'/>
-<use id='g2-114' xlink:href='#g0-114' transform='scale(.714)'/>
-<use id='g2-115' xlink:href='#g0-115' transform='scale(.714)'/>
-<use id='g2-116' xlink:href='#g0-116' transform='scale(.714)'/>
-<use id='g2-117' xlink:href='#g0-117' transform='scale(.714)'/>
-<use id='g2-120' xlink:href='#g0-120' transform='scale(.714)'/>
-<use id='g2-122' xlink:href='#g0-122' transform='scale(.714)'/>
-</defs>
-<g id='page2'>
-<path d='M194.617 255.492V246.637M253.285 255.492V246.637M311.953 255.492V246.637M370.625 255.492V246.637M429.293 255.492V246.637M194.617 70.016V78.871M253.285 70.016V78.871M311.953 70.016V78.871M370.625 70.016V78.871M429.293 70.016V78.871' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M165.281 250.887V246.637M223.953 250.887V246.637M282.621 250.887V246.637M341.289 250.887V246.637M399.957 250.887V246.637M458.629 250.887V246.637M165.281 74.617V78.871M223.953 74.617V78.871M282.621 74.617V78.871M341.289 74.617V78.871M399.957 74.617V78.871M458.629 74.617V78.871' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M135.949 246.637H140.199M135.949 213.082H140.199M135.949 179.531H140.199M135.949 145.976H140.199M135.949 112.426H140.199M135.949 78.871H140.199M487.961 246.637H483.711M487.961 213.082H483.711M487.961 179.531H483.711M487.961 145.976H483.711M487.961 112.426H483.711M487.961 78.871H483.711' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M135.949 246.637V78.871H487.961V246.637H135.949Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -21.265 74.992)'>
-<use x='168.285' y='186.041' xlink:href='#g3-97'/>
-<use x='172.353' y='186.041' xlink:href='#g3-108'/>
-<use x='174.373' y='186.041' xlink:href='#g3-108'/>
-<use x='176.393' y='186.041' xlink:href='#g3-111'/>
-<use x='180.863' y='186.041' xlink:href='#g3-99'/>
-<use x='184.627' y='186.041' xlink:href='#g3-45'/>
-<use x='187.449' y='186.041' xlink:href='#g3-116'/>
-<use x='190.507' y='186.041' xlink:href='#g3-101'/>
-<use x='194.271' y='186.041' xlink:href='#g3-115'/>
-<use x='197.517' y='186.041' xlink:href='#g3-116'/>
-<use x='200.575' y='186.041' xlink:href='#g3-49'/>
-</g>
-<g transform='matrix(1 0 0 1 36.532 74.992)'>
-<use x='168.285' y='186.041' xlink:href='#g3-97'/>
-<use x='172.353' y='186.041' xlink:href='#g3-108'/>
-<use x='174.373' y='186.041' xlink:href='#g3-108'/>
-<use x='176.393' y='186.041' xlink:href='#g3-111'/>
-<use x='180.863' y='186.041' xlink:href='#g3-99'/>
-<use x='184.627' y='186.041' xlink:href='#g3-45'/>
-<use x='187.449' y='186.041' xlink:href='#g3-116'/>
-<use x='190.507' y='186.041' xlink:href='#g3-101'/>
-<use x='194.271' y='186.041' xlink:href='#g3-115'/>
-<use x='197.517' y='186.041' xlink:href='#g3-116'/>
-<use x='200.575' y='186.041' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 94.98 74.992)'>
-<use x='168.285' y='186.041' xlink:href='#g3-115'/>
-<use x='171.531' y='186.041' xlink:href='#g3-104'/>
-<use x='175.904' y='186.041' xlink:href='#g3-54'/>
-<use x='180.138' y='186.041' xlink:href='#g3-98'/>
-<use x='184.746' y='186.041' xlink:href='#g3-101'/>
-<use x='188.509' y='186.041' xlink:href='#g3-110'/>
-<use x='192.882' y='186.041' xlink:href='#g3-99'/>
-<use x='196.646' y='186.041' xlink:href='#g3-104'/>
-<use x='201.018' y='186.041' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 153.649 74.992)'>
-<use x='168.285' y='186.041' xlink:href='#g3-115'/>
-<use x='171.531' y='186.041' xlink:href='#g3-104'/>
-<use x='175.904' y='186.041' xlink:href='#g3-56'/>
-<use x='180.138' y='186.041' xlink:href='#g3-98'/>
-<use x='184.746' y='186.041' xlink:href='#g3-101'/>
-<use x='188.509' y='186.041' xlink:href='#g3-110'/>
-<use x='192.882' y='186.041' xlink:href='#g3-99'/>
-<use x='196.646' y='186.041' xlink:href='#g3-104'/>
-<use x='201.018' y='186.041' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 207.225 74.992)'>
-<use x='168.285' y='186.041' xlink:href='#g3-120'/>
-<use x='172.187' y='186.041' xlink:href='#g3-109'/>
-<use x='178.912' y='186.041' xlink:href='#g3-97'/>
-<use x='182.98' y='186.041' xlink:href='#g3-108'/>
-<use x='185' y='186.041' xlink:href='#g3-108'/>
-<use x='187.02' y='186.041' xlink:href='#g3-111'/>
-<use x='191.49' y='186.041' xlink:href='#g3-99'/>
-<use x='195.254' y='186.041' xlink:href='#g3-45'/>
-<use x='198.076' y='186.041' xlink:href='#g3-116'/>
-<use x='201.134' y='186.041' xlink:href='#g3-101'/>
-<use x='204.898' y='186.041' xlink:href='#g3-115'/>
-<use x='208.144' y='186.041' xlink:href='#g3-116'/>
-<use x='211.202' y='186.041' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 263.494 74.992)'>
-<use x='168.285' y='186.041' xlink:href='#g3-99'/>
-<use x='172.049' y='186.041' xlink:href='#g3-97'/>
-<use x='176.117' y='186.041' xlink:href='#g3-99'/>
-<use x='179.88' y='186.041' xlink:href='#g3-104'/>
-<use x='184.253' y='186.041' xlink:href='#g3-101'/>
-<use x='188.017' y='186.041' xlink:href='#g3-45'/>
-<use x='190.839' y='186.041' xlink:href='#g3-115'/>
-<use x='194.086' y='186.041' xlink:href='#g3-99'/>
-<use x='197.849' y='186.041' xlink:href='#g3-114'/>
-<use x='200.741' y='186.041' xlink:href='#g3-97'/>
-<use x='204.81' y='186.041' xlink:href='#g3-116'/>
-<use x='207.868' y='186.041' xlink:href='#g3-99'/>
-<use x='211.631' y='186.041' xlink:href='#g3-104'/>
-<use x='216.004' y='186.041' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 62.23)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 28.677)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-53'/>
-<use x='175.048' y='186.041' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -4.876)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -38.43)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-53'/>
-<use x='175.048' y='186.041' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -71.983)'>
-<use x='168.285' y='186.041' xlink:href='#g2-50'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -105.536)'>
-<use x='168.285' y='186.041' xlink:href='#g2-50'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-53'/>
-<use x='175.048' y='186.041' xlink:href='#g2-120'/>
-</g>
-<path d='M135.949 179.531H487.961' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M140.125 246.637H143.363V179.531H140.125ZM198.797 246.637H202.035V179.531H198.797ZM257.465 246.637H260.703V179.531H257.465ZM316.133 246.637H319.371V179.531H316.133ZM374.801 246.637H378.039V179.531H374.801ZM433.473 246.637H436.711V179.531H433.473Z' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M140.125 246.637H143.363V179.531H140.125ZM198.797 246.637H202.035V179.531H198.797ZM257.465 246.637H260.703V179.531H257.465ZM316.133 246.637H319.371V179.531H316.133ZM374.801 246.637H378.039V179.531H374.801ZM433.473 246.637H436.711V179.531H433.473Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M141.746 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M139.754 179.531H143.738' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M141.746 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M139.754 179.531H143.738' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M200.414 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M198.422 179.531H202.406' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M200.414 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M198.422 179.531H202.406' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M259.082 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M257.09 179.531H261.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M259.082 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M257.09 179.531H261.078' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M317.754 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M315.762 179.531H319.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M317.754 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M315.762 179.531H319.746' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M376.422 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M374.43 179.531H378.414' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M376.422 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M374.43 179.531H378.414' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M435.09 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M433.098 179.531H437.082' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M435.09 179.531' fill='#fff' clip-path='url(#clip2)'/>
-<path d='M433.098 179.531H437.082' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M145.356 246.637H148.594V180.066H145.356ZM204.028 246.637H207.266V179.195H204.028ZM262.695 246.637H265.934V181.008H262.695ZM321.363 246.637H324.602V179.934H321.363ZM380.031 246.637H383.27V175.637H380.031ZM438.703 246.637H441.942V179.664H438.703Z' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M145.356 246.637H148.594V180.066H145.356ZM204.028 246.637H207.266V179.195H204.028ZM262.695 246.637H265.934V181.008H262.695ZM321.363 246.637H324.602V179.934H321.363ZM380.031 246.637H383.27V175.637H380.031ZM438.703 246.637H441.942V179.664H438.703Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M146.977 180.066' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M144.984 180.067H148.968' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M146.977 180.066' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M144.984 180.067H148.968' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M205.645 179.195' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M203.652 179.196H207.636' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M205.645 179.195' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M203.652 179.196H207.636' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M264.313 181.008' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M262.32 181.007H266.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M264.313 181.008' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M262.32 181.007H266.308' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M322.984 179.934' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M320.992 179.934H324.976' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M322.984 179.934' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M320.992 179.934H324.976' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M381.652 175.637' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M379.66 175.637H383.644' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M381.652 175.637' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M379.66 175.637H383.644' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M440.32 179.664' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M438.328 179.664H442.312' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M440.32 179.664' fill='#f0e0f0' clip-path='url(#clip2)'/>
-<path d='M438.328 179.664H442.312' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M150.586 246.637H153.824V163.426H150.586ZM209.258 246.637H212.496V159.062H209.258ZM267.926 246.637H271.164V184.027H267.926ZM326.594 246.637H329.832V203.687H326.594ZM385.262 246.637H388.5V219.859H385.262ZM443.934 246.637H447.172V139.734H443.934Z' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M150.586 246.637H153.824V163.426H150.586ZM209.258 246.637H212.496V159.062H209.258ZM267.926 246.637H271.164V184.027H267.926ZM326.594 246.637H329.832V203.687H326.594ZM385.262 246.637H388.5V219.859H385.262ZM443.934 246.637H447.172V139.734H443.934Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M152.207 163.426' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M150.215 163.426H154.199' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M152.207 163.426' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M150.215 163.426H154.199' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M210.875 159.062' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M208.883 159.063H212.867' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M210.875 159.062' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M208.883 159.063H212.867' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M269.543 184.027' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M267.551 184.027H271.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M269.543 184.027' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M267.551 184.027H271.539' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M328.215 203.687' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M326.223 203.687H330.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M328.215 203.687' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M326.223 203.687H330.207' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M386.883 219.859' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M384.891 219.86H388.875' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M386.883 219.859' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M384.891 219.86H388.875' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M445.551 139.734' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M443.559 139.734H447.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M445.551 139.734' fill='#e1c2e1' clip-path='url(#clip2)'/>
-<path d='M443.559 139.734H447.543' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M155.817 246.637H159.055V183.824H155.817ZM214.488 246.637H217.727V176.109H214.488ZM273.156 246.637H276.395V181.344H273.156ZM331.824 246.637H335.063V193.086H331.824ZM390.492 246.637H393.731V195.164H390.492ZM449.164 246.637H452.402V144.566H449.164Z' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M155.817 246.637H159.055V183.824H155.817ZM214.488 246.637H217.727V176.109H214.488ZM273.156 246.637H276.395V181.344H273.156ZM331.824 246.637H335.063V193.086H331.824ZM390.492 246.637H393.731V195.164H390.492ZM449.164 246.637H452.402V144.566H449.164Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M157.438 183.824' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M155.445 183.824H159.429' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M157.438 183.824' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M155.445 183.824H159.429' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M216.106 176.109' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M214.113 176.11H218.097' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M216.106 176.109' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M214.113 176.11H218.097' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M274.774 181.344' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M272.781 181.344H276.769' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M274.774 181.344' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M272.781 181.344H276.769' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M333.445 193.086' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M331.453 193.085H335.437' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M333.445 193.086' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M331.453 193.085H335.437' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M392.113 195.164' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M390.121 195.164H394.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M392.113 195.164' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M390.121 195.164H394.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M450.781 144.566' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M448.789 144.567H452.773' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M450.781 144.566' fill='#d1a3d1' clip-path='url(#clip2)'/>
-<path d='M448.789 144.567H452.773' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M161.047 246.637H164.285V178.926H161.047ZM219.719 246.637H222.957V169.934H219.719ZM278.387 246.637H281.625V176.644H278.387ZM337.055 246.637H340.293V195.234H337.055ZM395.723 246.637H398.961V182.078H395.723ZM454.395 246.637H457.633V177.652H454.395Z' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M161.047 246.637H164.285V178.926H161.047ZM219.719 246.637H222.957V169.934H219.719ZM278.387 246.637H281.625V176.644H278.387ZM337.055 246.637H340.293V195.234H337.055ZM395.723 246.637H398.961V182.078H395.723ZM454.395 246.637H457.633V177.652H454.395Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M162.668 178.926' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M160.676 178.926H164.66' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M162.668 178.926' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M160.676 178.926H164.66' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M221.336 169.934' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M219.344 169.934H223.328' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M221.336 169.934' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M219.344 169.934H223.328' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M280.004 176.644' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M278.012 176.644H282' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M280.004 176.644' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M278.012 176.644H282' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M338.676 195.234' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M336.684 195.235H340.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M338.676 195.234' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M336.684 195.235H340.668' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M397.344 182.078' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M395.352 182.078H399.336' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M397.344 182.078' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M395.352 182.078H399.336' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M456.012 177.652' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M454.02 177.652H458.004' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M456.012 177.652' fill='#c285c2' clip-path='url(#clip2)'/>
-<path d='M454.02 177.652H458.004' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M166.278 246.637H169.516V179.598H166.278ZM224.949 246.637H228.188V144.098H224.949ZM283.617 246.637H286.856V172.82H283.617ZM342.285 246.637H345.524V155.91H342.285ZM400.953 246.637H404.192V172.484H400.953ZM459.625 246.637H462.863V172.016H459.625Z' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M166.278 246.637H169.516V179.598H166.278ZM224.949 246.637H228.188V144.098H224.949ZM283.617 246.637H286.856V172.82H283.617ZM342.285 246.637H345.524V155.91H342.285ZM400.953 246.637H404.192V172.484H400.953ZM459.625 246.637H462.863V172.016H459.625Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M167.899 179.598' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M165.906 179.598H169.89' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M167.899 179.598' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M165.906 179.598H169.89' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M226.567 144.098' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M224.574 144.098H228.558' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M226.567 144.098' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M224.574 144.098H228.558' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M285.234 172.82' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M283.242 172.82H287.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M285.234 172.82' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M283.242 172.82H287.23' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M343.906 155.91' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M341.914 155.91H345.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M343.906 155.91' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M341.914 155.91H345.898' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M402.574 172.484' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M400.582 172.484H404.566' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M402.574 172.484' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M400.582 172.484H404.566' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M461.242 172.016' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M459.25 172.015H463.234' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M461.242 172.016' fill='#b366b3' clip-path='url(#clip2)'/>
-<path d='M459.25 172.015H463.234' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M171.508 246.637H174.746V177.113H171.508ZM230.18 246.637H233.414V179.465H230.18ZM288.848 246.637H292.086V166.176H288.848ZM347.516 246.637H350.754V160.605H347.516ZM406.184 246.637H409.422V78.871H406.184ZM464.856 246.637H468.094V189.797H464.856Z' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M171.508 246.637H174.746V177.113H171.508ZM230.18 246.637H233.414V179.465H230.18ZM288.848 246.637H292.086V166.176H288.848ZM347.516 246.637H350.754V160.605H347.516ZM406.184 246.637H409.422V78.871H406.184ZM464.856 246.637H468.094V189.797H464.856Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M173.129 177.113' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M171.137 177.113H175.121' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M173.129 177.113' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M171.137 177.113H175.121' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M231.797 179.465' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M229.805 179.465H233.789' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M231.797 179.465' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M229.805 179.465H233.789' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M290.465 166.176' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M288.473 166.176H292.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M290.465 166.176' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M288.473 166.176H292.461' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M349.137 160.605' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M347.145 160.605H351.129' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M349.137 160.605' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M347.145 160.605H351.129' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M407.805 78.871' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M405.813 78.871H409.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M407.805 78.871' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M405.813 78.871H409.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M466.473 189.797' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M464.481 189.797H468.465' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M466.473 189.797' fill='#a447a4' clip-path='url(#clip2)'/>
-<path d='M464.481 189.797H468.465' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M176.738 246.637H179.977V167.383H176.738ZM235.41 246.637H238.645V78.871H235.41ZM294.078 246.637H297.317V143.09H294.078ZM352.746 246.637H355.984V166.711H352.746ZM411.414 246.637H414.652V219.391H411.414ZM470.086 246.637H473.324V160.336H470.086Z' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M176.738 246.637H179.977V167.383H176.738ZM235.41 246.637H238.645V78.871H235.41ZM294.078 246.637H297.317V143.09H294.078ZM352.746 246.637H355.984V166.711H352.746ZM411.414 246.637H414.652V219.391H411.414ZM470.086 246.637H473.324V160.336H470.086Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M178.36 167.383' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M176.367 167.383H180.351' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M178.36 167.383' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M176.367 167.383H180.351' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M237.027 78.871' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M235.035 78.871H239.019' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M237.027 78.871' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M235.035 78.871H239.019' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M295.695 143.09' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M293.703 143.089H297.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M295.695 143.09' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M293.703 143.089H297.691' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M354.367 166.711' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M352.375 166.711H356.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M354.367 166.711' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M352.375 166.711H356.359' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M413.035 219.391' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M411.043 219.391H415.027' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M413.035 219.391' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M411.043 219.391H415.027' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M471.703 160.336' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M469.711 160.336H473.695' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M471.703 160.336' fill='#942994' clip-path='url(#clip2)'/>
-<path d='M469.711 160.336H473.695' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M181.969 246.637H185.207V176.711H181.969ZM240.641 246.637H243.875V169.062H240.641ZM299.309 246.637H302.547V151.547H299.309ZM357.977 246.637H361.215V113.43H357.977ZM416.645 246.637H419.883V188.387H416.645ZM475.317 246.637H478.555V190.402H475.317Z' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M181.969 246.637H185.207V176.711H181.969ZM240.641 246.637H243.875V169.062H240.641ZM299.309 246.637H302.547V151.547H299.309ZM357.977 246.637H361.215V113.43H357.977ZM416.645 246.637H419.883V188.387H416.645ZM475.317 246.637H478.555V190.402H475.317Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M183.59 176.711' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M181.598 176.711H185.583' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M183.59 176.711' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M181.598 176.711H185.583' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M242.258 169.062' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M240.266 169.062H244.25' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M242.258 169.062' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M240.266 169.062H244.25' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M300.926 151.547' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M298.933 151.547H302.921' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M300.926 151.547' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M298.933 151.547H302.921' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M359.598 113.43' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M357.606 113.43H361.59' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M359.598 113.43' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M357.606 113.43H361.59' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M418.266 188.387' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M416.274 188.387H420.258' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M418.266 188.387' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M416.274 188.387H420.258' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M476.934 190.402' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M474.942 190.402H478.926' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M476.934 190.402' fill='#850a85' clip-path='url(#clip2)'/>
-<path d='M474.942 190.402H478.926' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M187.199 246.637H190.438V179.465H187.199ZM245.871 246.637H249.106V113.094H245.871ZM304.539 246.637H307.777V164.094H304.539ZM363.207 246.637H366.445V156.578H363.207ZM421.875 246.637H425.113V174.496H421.875ZM480.547 246.637H483.785V176.375H480.547Z' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M187.199 246.637H190.438V179.465H187.199ZM245.871 246.637H249.106V113.094H245.871ZM304.539 246.637H307.777V164.094H304.539ZM363.207 246.637H366.445V156.578H363.207ZM421.875 246.637H425.113V174.496H421.875ZM480.547 246.637H483.785V176.375H480.547Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M188.82 179.465' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M186.828 179.465H190.813' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M188.82 179.465' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M186.828 179.465H190.813' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M247.488 113.094' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M245.496 113.094H249.481' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M247.488 113.094' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M245.496 113.094H249.481' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M306.156 164.094' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M304.164 164.094H308.152' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M306.156 164.094' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M304.164 164.094H308.152' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M364.828 156.578' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M362.836 156.578H366.82' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M364.828 156.578' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M362.836 156.578H366.82' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M423.496 174.496' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M421.504 174.496H425.488' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M423.496 174.496' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M421.504 174.496H425.488' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M482.164 176.375' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M480.172 176.375H484.156' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M482.164 176.375' fill='#760076' clip-path='url(#clip2)'/>
-<path d='M480.172 176.375H484.156' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<path d='M369.781 308.934H487.762V273.68H369.781Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip2)'/>
-<g transform='matrix(1 0 0 1 204.818 118.327)'>
-<use x='168.285' y='162.131' xlink:href='#g2-99'/>
-<use x='170.637' y='162.131' xlink:href='#g2-53'/>
-<use x='173.284' y='162.131' xlink:href='#g2-45'/>
-<use x='175.048' y='162.131' xlink:href='#g2-49'/>
-<use x='177.694' y='162.131' xlink:href='#g2-56'/>
-<use x='180.341' y='162.131' xlink:href='#g2-120'/>
-<use x='182.779' y='162.131' xlink:href='#g2-108'/>
-<use x='184.042' y='162.131' xlink:href='#g2-97'/>
-<use x='186.438' y='162.131' xlink:href='#g2-114'/>
-<use x='188.245' y='162.131' xlink:href='#g2-103'/>
-<use x='190.891' y='162.131' xlink:href='#g2-101'/>
-<use x='193.244' y='162.131' xlink:href='#g2-44'/>
-<use x='196.478' y='162.131' xlink:href='#g2-49'/>
-<use x='199.124' y='162.131' xlink:href='#g2-52'/>
-<use x='201.771' y='162.131' xlink:href='#g2-52'/>
-<use x='204.417' y='162.131' xlink:href='#g2-71'/>
-<use x='207.946' y='162.131' xlink:href='#g2-98'/>
-<use x='168.285' y='168.109' xlink:href='#g2-50'/>
-<use x='170.931' y='168.109' xlink:href='#g4-2'/>
-<use x='178.092' y='168.109' xlink:href='#g2-49'/>
-<use x='180.738' y='168.109' xlink:href='#g2-56'/>
-<use x='183.385' y='168.109' xlink:href='#g2-45'/>
-<use x='185.149' y='168.109' xlink:href='#g2-99'/>
-<use x='187.501' y='168.109' xlink:href='#g2-111'/>
-<use x='190.001' y='168.109' xlink:href='#g2-114'/>
-<use x='191.808' y='168.109' xlink:href='#g2-101'/>
-<use x='195.925' y='168.109' xlink:href='#g2-73'/>
-<use x='197.395' y='168.109' xlink:href='#g2-110'/>
-<use x='200.128' y='168.109' xlink:href='#g2-116'/>
-<use x='202.039' y='168.109' xlink:href='#g2-101'/>
-<use x='204.391' y='168.109' xlink:href='#g2-108'/>
-<use x='207.418' y='168.109' xlink:href='#g2-88'/>
-<use x='210.947' y='168.109' xlink:href='#g2-101'/>
-<use x='213.299' y='168.109' xlink:href='#g2-111'/>
-<use x='215.945' y='168.109' xlink:href='#g2-110'/>
-<use x='220.442' y='168.109' xlink:href='#g2-64'/>
-<use x='223.971' y='168.109' xlink:href='#g2-51'/>
-<use x='226.617' y='168.109' xlink:href='#g2-71'/>
-<use x='230.146' y='168.109' xlink:href='#g2-104'/>
-<use x='232.879' y='168.109' xlink:href='#g2-122'/>
-<use x='168.285' y='174.086' xlink:href='#g2-85'/>
-<use x='171.917' y='174.086' xlink:href='#g2-98'/>
-<use x='174.65' y='174.086' xlink:href='#g2-117'/>
-<use x='177.383' y='174.086' xlink:href='#g2-110'/>
-<use x='180.116' y='174.086' xlink:href='#g2-116'/>
-<use x='182.027' y='174.086' xlink:href='#g2-117'/>
-<use x='186.524' y='174.086' xlink:href='#g2-50'/>
-<use x='189.17' y='174.086' xlink:href='#g2-48'/>
-<use x='191.817' y='174.086' xlink:href='#g2-46'/>
-<use x='193.287' y='174.086' xlink:href='#g2-48'/>
-<use x='195.933' y='174.086' xlink:href='#g2-52'/>
-<use x='198.58' y='174.086' xlink:href='#g2-44'/>
-<use x='201.814' y='174.086' xlink:href='#g2-71'/>
-<use x='205.343' y='174.086' xlink:href='#g2-67'/>
-<use x='208.724' y='174.086' xlink:href='#g2-67'/>
-<use x='213.87' y='174.086' xlink:href='#g2-57'/>
-<use x='216.516' y='174.086' xlink:href='#g2-46'/>
-<use x='217.986' y='174.086' xlink:href='#g2-51'/>
-<use x='220.633' y='174.086' xlink:href='#g2-46'/>
-<use x='222.103' y='174.086' xlink:href='#g2-48'/>
-<use x='224.749' y='174.086' xlink:href='#g2-44'/>
-<use x='227.984' y='174.086' xlink:href='#g2-103'/>
-<use x='230.63' y='174.086' xlink:href='#g2-108'/>
-<use x='231.893' y='174.086' xlink:href='#g2-105'/>
-<use x='233.155' y='174.086' xlink:href='#g2-98'/>
-<use x='236.035' y='174.086' xlink:href='#g2-99'/>
-<use x='240.152' y='174.086' xlink:href='#g2-50'/>
-<use x='242.798' y='174.086' xlink:href='#g2-46'/>
-<use x='244.268' y='174.086' xlink:href='#g2-51'/>
-<use x='246.915' y='174.086' xlink:href='#g2-49'/>
-<use x='249.561' y='174.086' xlink:href='#g2-44'/>
-<use x='252.796' y='174.086' xlink:href='#g2-99'/>
-<use x='255.148' y='174.086' xlink:href='#g2-108'/>
-<use x='256.41' y='174.086' xlink:href='#g2-97'/>
-<use x='258.953' y='174.086' xlink:href='#g2-110'/>
-<use x='261.686' y='174.086' xlink:href='#g2-103'/>
-<use x='266.097' y='174.086' xlink:href='#g2-49'/>
-<use x='268.743' y='174.086' xlink:href='#g2-48'/>
-<use x='271.389' y='174.086' xlink:href='#g2-46'/>
-<use x='272.859' y='174.086' xlink:href='#g2-48'/>
-<use x='275.506' y='174.086' xlink:href='#g2-46'/>
-<use x='276.976' y='174.086' xlink:href='#g2-48'/>
-<use x='168.285' y='180.064' xlink:href='#g2-55'/>
-<use x='170.931' y='180.064' xlink:href='#g2-50'/>
-<use x='175.342' y='180.064' xlink:href='#g2-108'/>
-<use x='176.604' y='180.064' xlink:href='#g2-111'/>
-<use x='179.251' y='180.064' xlink:href='#g2-103'/>
-<use x='181.897' y='180.064' xlink:href='#g2-105'/>
-<use x='183.16' y='180.064' xlink:href='#g2-99'/>
-<use x='185.512' y='180.064' xlink:href='#g2-97'/>
-<use x='188.055' y='180.064' xlink:href='#g2-108'/>
-<use x='191.082' y='180.064' xlink:href='#g2-99'/>
-<use x='193.434' y='180.064' xlink:href='#g2-111'/>
-<use x='195.933' y='180.064' xlink:href='#g2-114'/>
-<use x='197.741' y='180.064' xlink:href='#g2-101'/>
-<use x='200.093' y='180.064' xlink:href='#g2-115'/>
-<use x='203.886' y='180.064' xlink:href='#g2-111'/>
-<use x='206.533' y='180.064' xlink:href='#g2-110'/>
-<use x='211.03' y='180.064' xlink:href='#g2-50'/>
-<use x='215.44' y='180.064' xlink:href='#g2-110'/>
-<use x='218.173' y='180.064' xlink:href='#g2-117'/>
-<use x='220.906' y='180.064' xlink:href='#g2-109'/>
-<use x='225.109' y='180.064' xlink:href='#g2-97'/>
-<use x='229.416' y='180.064' xlink:href='#g2-110'/>
-<use x='232.149' y='180.064' xlink:href='#g2-111'/>
-<use x='234.942' y='180.064' xlink:href='#g2-100'/>
-<use x='237.675' y='180.064' xlink:href='#g2-101'/>
-<use x='240.027' y='180.064' xlink:href='#g2-115'/>
-<use x='168.285' y='186.041' xlink:href='#g2-50'/>
-<use x='170.931' y='186.041' xlink:href='#g2-48'/>
-<use x='173.578' y='186.041' xlink:href='#g2-50'/>
-<use x='176.224' y='186.041' xlink:href='#g2-49'/>
-<use x='178.87' y='186.041' xlink:href='#g2-45'/>
-<use x='180.635' y='186.041' xlink:href='#g2-48'/>
-<use x='183.281' y='186.041' xlink:href='#g2-49'/>
-<use x='185.927' y='186.041' xlink:href='#g2-45'/>
-<use x='187.692' y='186.041' xlink:href='#g2-51'/>
-<use x='190.338' y='186.041' xlink:href='#g2-48'/>
-<use x='192.984' y='186.041' xlink:href='#g2-41'/>
-</g>
-<g transform='matrix(0 -1 1 0 -42.661 341.611)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 16.008 341.611)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 74.677 341.611)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 133.346 341.611)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 192.015 341.611)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 250.684 341.611)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -37.431 342.148)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-57'/>
-<use x='175.048' y='186.041' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 21.238 341.275)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 79.907 343.087)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-57'/>
-<use x='175.048' y='186.041' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 138.576 342.014)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-57'/>
-<use x='175.048' y='186.041' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 197.245 337.719)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 255.914 341.745)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -32.2 325.505)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-50'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 26.469 321.144)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-51'/>
-<use x='175.048' y='186.041' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 85.138 346.107)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-57'/>
-<use x='175.048' y='186.041' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 143.807 365.769)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-54'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 202.476 381.942)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-52'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 261.145 301.817)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-53'/>
-<use x='175.048' y='186.041' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 -26.97 345.906)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-57'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 31.699 338.189)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 90.368 343.423)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-57'/>
-<use x='175.048' y='186.041' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 149.037 355.166)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-56'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 207.706 357.247)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-55'/>
-<use x='175.048' y='186.041' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 266.375 306.649)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-53'/>
-<use x='175.048' y='186.041' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 -21.739 341.007)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 36.93 332.015)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-49'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 95.599 338.725)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 154.268 357.314)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-55'/>
-<use x='175.048' y='186.041' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 212.937 344.161)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-57'/>
-<use x='175.048' y='186.041' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 271.606 339.732)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 -16.509 341.678)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 42.16 306.179)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-53'/>
-<use x='175.048' y='186.041' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 100.829 334.9)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-49'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 159.498 317.99)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-51'/>
-<use x='175.048' y='186.041' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 218.167 334.565)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-49'/>
-<use x='175.048' y='186.041' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 276.836 334.095)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-49'/>
-<use x='175.048' y='186.041' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 -11.278 339.195)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 47.391 341.544)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 106.06 328.257)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-50'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 164.729 322.687)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-50'/>
-<use x='175.048' y='186.041' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 223.398 240.952)'>
-<use x='163.396' y='186.041' xlink:href='#g4-1'/>
-<use x='166.901' y='186.041' xlink:href='#g4-1'/>
-<use x='170.407' y='186.041' xlink:href='#g4-1'/>
-<use x='173.912' y='186.041' xlink:href='#g2-57'/>
-<use x='176.558' y='186.041' xlink:href='#g2-46'/>
-<use x='178.029' y='186.041' xlink:href='#g2-54'/>
-<use x='180.675' y='186.041' xlink:href='#g2-56'/>
-<use x='183.321' y='186.041' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 282.067 351.878)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-56'/>
-<use x='175.048' y='186.041' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 -6.048 329.465)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-49'/>
-<use x='175.048' y='186.041' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 52.621 240.952)'>
-<use x='163.396' y='186.041' xlink:href='#g4-1'/>
-<use x='166.901' y='186.041' xlink:href='#g4-1'/>
-<use x='170.407' y='186.041' xlink:href='#g4-1'/>
-<use x='173.912' y='186.041' xlink:href='#g2-50'/>
-<use x='176.558' y='186.041' xlink:href='#g2-46'/>
-<use x='178.029' y='186.041' xlink:href='#g2-54'/>
-<use x='180.675' y='186.041' xlink:href='#g2-50'/>
-<use x='183.321' y='186.041' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 111.29 305.172)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-53'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 169.959 328.794)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-49'/>
-<use x='175.048' y='186.041' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 228.628 381.472)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-52'/>
-<use x='175.048' y='186.041' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 287.297 322.419)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-50'/>
-<use x='175.048' y='186.041' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 -.818 338.793)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 57.851 331.142)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-49'/>
-<use x='175.048' y='186.041' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 116.52 313.628)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-52'/>
-<use x='175.048' y='186.041' xlink:href='#g2-50'/>
-</g>
-<g transform='matrix(0 -1 1 0 175.189 275.511)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-57'/>
-<use x='175.048' y='186.041' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 233.858 350.469)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-56'/>
-<use x='175.048' y='186.041' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 292.527 352.482)'>
-<use x='168.285' y='186.041' xlink:href='#g2-48'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-56'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 4.413 341.544)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 63.082 275.176)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-57'/>
-<use x='175.048' y='186.041' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 121.751 326.177)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-50'/>
-<use x='175.048' y='186.041' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 180.42 318.661)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-51'/>
-<use x='175.048' y='186.041' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 239.089 336.578)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 297.758 338.457)'>
-<use x='168.285' y='186.041' xlink:href='#g2-49'/>
-<use x='170.931' y='186.041' xlink:href='#g2-46'/>
-<use x='172.401' y='186.041' xlink:href='#g2-48'/>
-<use x='175.048' y='186.041' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 -72.883 382.933)'>
-<use x='168.285' y='186.041' xlink:href='#g1-82'/>
-<use x='174.255' y='186.041' xlink:href='#g1-101'/>
-<use x='178.351' y='186.041' xlink:href='#g1-108'/>
-<use x='180.551' y='186.041' xlink:href='#g1-97'/>
-<use x='184.979' y='186.041' xlink:href='#g1-116'/>
-<use x='188.307' y='186.041' xlink:href='#g1-105'/>
-<use x='190.507' y='186.041' xlink:href='#g1-118'/>
-<use x='194.755' y='186.041' xlink:href='#g1-101'/>
-<use x='201.922' y='186.041' xlink:href='#g1-114'/>
-<use x='205.07' y='186.041' xlink:href='#g1-115'/>
-<use x='208.603' y='186.041' xlink:href='#g1-115'/>
-<use x='215.207' y='186.041' xlink:href='#g3-40'/>
-<use x='218.5' y='186.041' xlink:href='#g3-108'/>
-<use x='220.521' y='186.041' xlink:href='#g3-111'/>
-<use x='224.52' y='186.041' xlink:href='#g3-119'/>
-<use x='230.068' y='186.041' xlink:href='#g3-101'/>
-<use x='233.832' y='186.041' xlink:href='#g3-114'/>
-<use x='239.547' y='186.041' xlink:href='#g3-105'/>
-<use x='241.567' y='186.041' xlink:href='#g3-115'/>
-<use x='247.636' y='186.041' xlink:href='#g3-98'/>
-<use x='252.244' y='186.041' xlink:href='#g3-101'/>
-<use x='256.008' y='186.041' xlink:href='#g3-116'/>
-<use x='259.066' y='186.041' xlink:href='#g3-116'/>
-<use x='262.124' y='186.041' xlink:href='#g3-101'/>
-<use x='265.887' y='186.041' xlink:href='#g3-114'/>
-<use x='268.779' y='186.041' xlink:href='#g3-41'/>
-</g>
-<path d='M136.149 307.031H346.746V277.031H136.149Z' fill='#fff'/>
-<path d='M136.149 307.031H346.746V277.031H136.149Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<path d='M139.336 287.523H142.324V279.551H139.336ZM145.313 287.523H148.301V281.543H145.313Z' fill='#fff'/>
-<path d='M139.336 287.523H142.324V279.551H139.336ZM145.313 287.523H148.301V281.543H145.313Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -40.354 114.479)'>
-<use x='191.843' y='173.035' xlink:href='#g3-120'/>
-<use x='195.745' y='173.035' xlink:href='#g3-109'/>
-<use x='202.47' y='173.035' xlink:href='#g3-105'/>
-<use x='204.49' y='173.035' xlink:href='#g3-58'/>
-<use x='206.843' y='173.035' xlink:href='#g0-54'/>
-<use x='210.548' y='173.035' xlink:href='#g0-56'/>
-</g>
-<path d='M177.086 287.523H180.074V279.551H177.086ZM183.063 287.523H186.055V281.543H183.063Z' fill='#f0e0f0'/>
-<path d='M177.086 287.523H180.074V279.551H177.086ZM183.063 287.523H186.055V281.543H183.063Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -38.403 114.479)'>
-<use x='233.123' y='173.035' xlink:href='#g3-109'/>
-<use x='239.848' y='173.035' xlink:href='#g3-105'/>
-<use x='241.869' y='173.035' xlink:href='#g3-58'/>
-<use x='244.221' y='173.035' xlink:href='#g0-54'/>
-<use x='247.926' y='173.035' xlink:href='#g0-56'/>
-</g>
-<path d='M221.895 287.523H224.883V279.551H221.895ZM227.875 287.523H230.863V281.543H227.875Z' fill='#e1c2e1'/>
-<path d='M221.895 287.523H224.883V279.551H221.895ZM227.875 287.523H230.863V281.543H227.875Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.441 114.036)'>
-<use x='277.134' y='173.035' xlink:href='#g3-116'/>
-<use x='280.192' y='173.035' xlink:href='#g3-99'/>
-<use x='283.956' y='173.035' xlink:href='#g3-58'/>
-<use x='286.308' y='173.035' xlink:href='#g0-55'/>
-<use x='290.013' y='173.035' xlink:href='#g0-50'/>
-</g>
-<path d='M265.109 287.523H268.098V279.551H265.109ZM271.086 287.523H274.074V281.543H271.086Z' fill='#d1a3d1'/>
-<path d='M265.109 287.523H268.098V279.551H265.109ZM271.086 287.523H274.074V281.543H271.086Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.04 114.479)'>
-<use x='319.615' y='173.035' xlink:href='#g3-106'/>
-<use x='321.871' y='173.035' xlink:href='#g3-101'/>
-<use x='325.634' y='173.035' xlink:href='#g3-58'/>
-<use x='327.987' y='173.035' xlink:href='#g0-55'/>
-<use x='331.691' y='173.035' xlink:href='#g0-49'/>
-</g>
-<path d='M306.859 287.523H309.848V279.551H306.859ZM312.836 287.523H315.824V281.543H312.836Z' fill='#c285c2'/>
-<path d='M306.859 287.523H309.848V279.551H306.859ZM312.836 287.523H315.824V281.543H312.836Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -39.932 114.515)'>
-<use x='359.038' y='173.035' xlink:href='#g3-116'/>
-<use x='362.096' y='173.035' xlink:href='#g3-98'/>
-<use x='366.469' y='173.035' xlink:href='#g3-98'/>
-<use x='370.842' y='173.035' xlink:href='#g3-58'/>
-<use x='373.194' y='173.035' xlink:href='#g0-54'/>
-<use x='376.899' y='173.035' xlink:href='#g0-51'/>
-</g>
-<path d='M139.336 300.527H142.324V292.559H139.336ZM145.313 300.527H148.301V294.551H145.313Z' fill='#b366b3'/>
-<path d='M139.336 300.527H142.324V292.559H139.336ZM145.313 300.527H148.301V294.551H145.313Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.662 114.036)'>
-<use x='191.843' y='186.041' xlink:href='#g3-114'/>
-<use x='194.735' y='186.041' xlink:href='#g3-112'/>
-<use x='199.108' y='186.041' xlink:href='#g3-58'/>
-<use x='201.46' y='186.041' xlink:href='#g0-52'/>
-<use x='205.165' y='186.041' xlink:href='#g0-50'/>
-</g>
-<path d='M177.086 300.527H180.074V292.559H177.086ZM183.063 300.527H186.055V294.551H183.063Z' fill='#a447a4'/>
-<path d='M177.086 300.527H180.074V292.559H177.086ZM183.063 300.527H186.055V294.551H183.063Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -43.882 114.515)'>
-<use x='233.123' y='186.041' xlink:href='#g3-104'/>
-<use x='237.496' y='186.041' xlink:href='#g3-111'/>
-<use x='241.73' y='186.041' xlink:href='#g3-97'/>
-<use x='245.563' y='186.041' xlink:href='#g3-114'/>
-<use x='248.455' y='186.041' xlink:href='#g3-100'/>
-<use x='252.828' y='186.041' xlink:href='#g3-58'/>
-<use x='255.18' y='186.041' xlink:href='#g0-53'/>
-<use x='258.885' y='186.041' xlink:href='#g0-51'/>
-</g>
-<path d='M221.895 300.527H224.883V292.559H221.895ZM227.875 300.527H230.863V294.551H227.875Z' fill='#942994'/>
-<path d='M221.895 300.527H224.883V292.559H221.895ZM227.875 300.527H230.863V294.551H227.875Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -43.084 114.515)'>
-<use x='277.134' y='186.041' xlink:href='#g3-109'/>
-<use x='283.859' y='186.041' xlink:href='#g3-101'/>
-<use x='287.622' y='186.041' xlink:href='#g3-115'/>
-<use x='290.869' y='186.041' xlink:href='#g3-104'/>
-<use x='295.241' y='186.041' xlink:href='#g3-58'/>
-<use x='297.593' y='186.041' xlink:href='#g0-53'/>
-<use x='301.298' y='186.041' xlink:href='#g0-50'/>
-</g>
-<path d='M265.109 300.527H268.098V292.559H265.109ZM271.086 300.527H274.074V294.551H271.086Z' fill='#850a85'/>
-<path d='M265.109 300.527H268.098V292.559H265.109ZM271.086 300.527H274.074V294.551H271.086Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -42.353 114.515)'>
-<use x='319.615' y='186.041' xlink:href='#g3-103'/>
-<use x='323.849' y='186.041' xlink:href='#g3-108'/>
-<use x='325.869' y='186.041' xlink:href='#g3-105'/>
-<use x='327.89' y='186.041' xlink:href='#g3-98'/>
-<use x='332.498' y='186.041' xlink:href='#g3-99'/>
-<use x='336.261' y='186.041' xlink:href='#g3-58'/>
-<use x='338.614' y='186.041' xlink:href='#g0-54'/>
-<use x='342.318' y='186.041' xlink:href='#g0-52'/>
-</g>
-<path d='M306.859 300.527H309.848V292.559H306.859ZM312.836 300.527H315.824V294.551H312.836Z' fill='#760076'/>
-<path d='M306.859 300.527H309.848V292.559H306.859ZM312.836 300.527H315.824V294.551H312.836Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -40.026 114.479)'>
-<use x='359.038' y='186.041' xlink:href='#g3-115'/>
-<use x='362.285' y='186.041' xlink:href='#g3-109'/>
-<use x='369.009' y='186.041' xlink:href='#g3-105'/>
-<use x='371.03' y='186.041' xlink:href='#g3-58'/>
-<use x='373.382' y='186.041' xlink:href='#g0-52'/>
-<use x='377.087' y='186.041' xlink:href='#g0-51'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-macmini-2021-01-30.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-macmini-2021-01-30.svg
deleted file mode 100644
index ece6418..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/bench-2021/bench-macmini-2021-01-30.svg
+++ /dev/null
@@ -1,766 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- This file was generated by dvisvgm 2.9.1 -->
-<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='315.585pt' height='208.604pt' viewBox='52.934 54.994 315.585 208.604'>
-<rect width="1000%" height="1000%" fill="white"/>
-<defs>
-<clipPath id='clip1'>
-<path d='M82.148 203.938H368.121V78.692H82.148Z'/>
-</clipPath>
-<use id='g2-44' xlink:href='#g0-44' transform='scale(.714)'/>
-<use id='g2-45' xlink:href='#g0-45' transform='scale(.714)'/>
-<use id='g2-46' xlink:href='#g0-46' transform='scale(.714)'/>
-<use id='g2-48' xlink:href='#g0-48' transform='scale(.714)'/>
-<use id='g2-49' xlink:href='#g0-49' transform='scale(.714)'/>
-<use id='g2-50' xlink:href='#g0-50' transform='scale(.714)'/>
-<use id='g2-51' xlink:href='#g0-51' transform='scale(.714)'/>
-<use id='g2-52' xlink:href='#g0-52' transform='scale(.714)'/>
-<use id='g2-53' xlink:href='#g0-53' transform='scale(.714)'/>
-<use id='g2-54' xlink:href='#g0-54' transform='scale(.714)'/>
-<use id='g2-55' xlink:href='#g0-55' transform='scale(.714)'/>
-<use id='g2-56' xlink:href='#g0-56' transform='scale(.714)'/>
-<use id='g2-57' xlink:href='#g0-57' transform='scale(.714)'/>
-<use id='g2-64' xlink:href='#g0-64' transform='scale(.714)'/>
-<use id='g2-65' xlink:href='#g0-65' transform='scale(.714)'/>
-<use id='g2-67' xlink:href='#g0-67' transform='scale(.714)'/>
-<use id='g2-71' xlink:href='#g0-71' transform='scale(.714)'/>
-<use id='g2-73' xlink:href='#g0-73' transform='scale(.714)'/>
-<use id='g2-79' xlink:href='#g0-79' transform='scale(.714)'/>
-<use id='g2-83' xlink:href='#g0-83' transform='scale(.714)'/>
-<use id='g2-97' xlink:href='#g0-97' transform='scale(.714)'/>
-<use id='g2-98' xlink:href='#g0-98' transform='scale(.714)'/>
-<use id='g2-99' xlink:href='#g0-99' transform='scale(.714)'/>
-<use id='g2-101' xlink:href='#g0-101' transform='scale(.714)'/>
-<use id='g2-103' xlink:href='#g0-103' transform='scale(.714)'/>
-<use id='g2-104' xlink:href='#g0-104' transform='scale(.714)'/>
-<use id='g2-105' xlink:href='#g0-105' transform='scale(.714)'/>
-<use id='g2-108' xlink:href='#g0-108' transform='scale(.714)'/>
-<use id='g2-109' xlink:href='#g0-109' transform='scale(.714)'/>
-<use id='g2-110' xlink:href='#g0-110' transform='scale(.714)'/>
-<use id='g2-111' xlink:href='#g0-111' transform='scale(.714)'/>
-<use id='g2-112' xlink:href='#g0-112' transform='scale(.714)'/>
-<use id='g2-114' xlink:href='#g0-114' transform='scale(.714)'/>
-<use id='g2-115' xlink:href='#g0-115' transform='scale(.714)'/>
-<use id='g2-116' xlink:href='#g0-116' transform='scale(.714)'/>
-<use id='g2-120' xlink:href='#g0-120' transform='scale(.714)'/>
-<use id='g2-122' xlink:href='#g0-122' transform='scale(.714)'/>
-<use id='g3-40' xlink:href='#g0-40' transform='scale(1.143)'/>
-<use id='g3-41' xlink:href='#g0-41' transform='scale(1.143)'/>
-<use id='g3-45' xlink:href='#g0-45' transform='scale(1.143)'/>
-<use id='g3-58' xlink:href='#g0-58' transform='scale(1.143)'/>
-<use id='g3-78' xlink:href='#g0-78' transform='scale(1.143)'/>
-<use id='g3-97' xlink:href='#g0-97' transform='scale(1.143)'/>
-<use id='g3-98' xlink:href='#g0-98' transform='scale(1.143)'/>
-<use id='g3-99' xlink:href='#g0-99' transform='scale(1.143)'/>
-<use id='g3-100' xlink:href='#g0-100' transform='scale(1.143)'/>
-<use id='g3-101' xlink:href='#g0-101' transform='scale(1.143)'/>
-<use id='g3-102' xlink:href='#g0-102' transform='scale(1.143)'/>
-<use id='g3-104' xlink:href='#g0-104' transform='scale(1.143)'/>
-<use id='g3-105' xlink:href='#g0-105' transform='scale(1.143)'/>
-<use id='g3-106' xlink:href='#g0-106' transform='scale(1.143)'/>
-<use id='g3-108' xlink:href='#g0-108' transform='scale(1.143)'/>
-<use id='g3-109' xlink:href='#g0-109' transform='scale(1.143)'/>
-<use id='g3-110' xlink:href='#g0-110' transform='scale(1.143)'/>
-<use id='g3-111' xlink:href='#g0-111' transform='scale(1.143)'/>
-<use id='g3-114' xlink:href='#g0-114' transform='scale(1.143)'/>
-<use id='g3-115' xlink:href='#g0-115' transform='scale(1.143)'/>
-<use id='g3-116' xlink:href='#g0-116' transform='scale(1.143)'/>
-<use id='g3-119' xlink:href='#g0-119' transform='scale(1.143)'/>
-<use id='g3-120' xlink:href='#g0-120' transform='scale(1.143)'/>
-<use id='g3-121' xlink:href='#g0-121' transform='scale(1.143)'/>
-<path id='g4-1' d='M1.445-1.245C1.445-1.41 1.305-1.549 1.141-1.549S.837-1.41 .837-1.245S.976-.941 1.141-.941S1.445-1.081 1.445-1.245Z'/>
-<path id='g1-82' d='M3.891-2.914C4.806-3.165 5.452-3.811 5.452-4.546C5.452-5.469 4.411-6.223 3.129-6.223H.87V0H1.704V-2.824H3.138L4.842 0H5.703L3.891-2.914ZM1.704-3.407V-5.694H3.022C4.062-5.694 4.671-5.192 4.671-4.546C4.671-3.963 4.125-3.407 3.022-3.407H1.704Z'/>
-<path id='g1-97' d='M3.694-2.591C3.694-3.479 3.04-4.133 2.152-4.133C1.569-4.133 1.139-3.981 .708-3.739L.762-3.102C1.21-3.434 1.65-3.569 2.143-3.569C2.645-3.569 2.95-3.165 2.95-2.582V-2.206C1.408-2.17 .395-1.766 .395-1.04C.395-.619 .672 .099 1.453 .099C1.632 .099 2.412 .081 2.977-.341V0H3.694V-2.591ZM2.95-1.255C2.95-1.067 2.95-.843 2.627-.655C2.403-.52 2.107-.484 1.928-.484C1.47-.484 1.085-.699 1.085-1.058C1.085-1.695 2.833-1.722 2.95-1.722V-1.255Z'/>
-<path id='g1-101' d='M3.829-1.964C3.829-2.242 3.82-2.923 3.47-3.461C3.093-4.026 2.52-4.133 2.179-4.133C1.139-4.133 .314-3.174 .314-2.026C.314-.843 1.193 .099 2.313 .099C2.744 .099 3.264-.009 3.784-.341L3.73-.959C3.165-.556 2.636-.484 2.322-.484C1.578-.484 1.004-1.139 .977-1.964H3.829ZM1.031-2.493C1.175-3.067 1.614-3.551 2.179-3.551C2.511-3.551 3.12-3.398 3.291-2.493H1.031Z'/>
-<path id='g1-105' d='M1.524-6.133H.664V-5.272H1.524V-6.133ZM1.453-3.981H.735V0H1.453V-3.981Z'/>
-<path id='g1-108' d='M1.453-6.223H.735V0H1.453V-6.223Z'/>
-<path id='g1-109' d='M6.581-2.663C6.581-3.327 6.402-4.08 5.317-4.08C4.564-4.08 4.142-3.622 3.927-3.344C3.865-3.524 3.676-4.08 2.762-4.08C2.053-4.08 1.623-3.667 1.417-3.398V-4.035H.726V0H1.47V-2.188C1.47-2.78 1.704-3.497 2.385-3.497C3.282-3.497 3.282-2.86 3.282-2.6V0H4.026V-2.188C4.026-2.78 4.259-3.497 4.94-3.497C5.837-3.497 5.837-2.86 5.837-2.6V0H6.581V-2.663Z'/>
-<path id='g1-116' d='M1.623-3.425H2.914V-3.981H1.623V-5.12H.959V-3.981H.17V-3.425H.933V-1.13C.933-.601 1.049 .099 1.704 .099C2.098 .099 2.564 .018 3.067-.233L2.914-.798C2.681-.619 2.367-.511 2.089-.511C1.739-.511 1.623-.825 1.623-1.291V-3.425Z'/>
-<path id='g1-118' d='M4.116-3.981H3.407L2.699-2.161C2.52-1.695 2.188-.825 2.143-.493H2.125C2.107-.646 2.08-.816 1.587-2.107C1.318-2.833 .879-3.927 .861-3.981H.126L1.704 0H2.537L4.116-3.981Z'/>
-<path id='g0-40' d='M2.127-5.23C2.008-5.23 1.995-5.23 1.911-5.154C1.032-4.387 .586-3.145 .586-1.743C.586-.425 .983 .844 1.904 1.653C1.995 1.743 2.008 1.743 2.127 1.743H2.462C2.441 1.73 1.764 1.151 1.444 .063C1.276-.481 1.193-1.053 1.193-1.743C1.193-4.156 2.322-5.112 2.462-5.23H2.127Z'/>
-<path id='g0-41' d='M.746 1.743C.865 1.743 .879 1.743 .962 1.667C1.841 .9 2.287-.342 2.287-1.743C2.287-3.062 1.89-4.331 .969-5.14C.879-5.23 .865-5.23 .746-5.23H.411C.432-5.216 1.109-4.638 1.43-3.55C1.597-3.006 1.681-2.434 1.681-1.743C1.681 .669 .551 1.625 .411 1.743H.746Z'/>
-<path id='g0-44' d='M1.339-.007V-.628H.711V0H.907L.704 .893H1.018L1.339-.007Z'/>
-<path id='g0-45' d='M2.05-1.332V-1.771H.084V-1.332H2.05Z'/>
-<path id='g0-46' d='M1.339-.628H.711V0H1.339V-.628Z'/>
-<path id='g0-48' d='M3.403-2.267C3.403-2.601 3.403-3.417 3.075-3.989C2.72-4.617 2.183-4.721 1.848-4.721C1.534-4.721 .99-4.624 .642-4.024C.307-3.466 .293-2.706 .293-2.267C.293-1.75 .321-1.116 .614-.586C.921-.021 1.437 .146 1.848 .146C2.545 .146 2.929-.258 3.138-.697C3.382-1.193 3.403-1.834 3.403-2.267ZM1.848-.314C1.555-.314 1.22-.481 1.046-.983C.907-1.409 .9-1.848 .9-2.357C.9-2.999 .9-4.261 1.848-4.261S2.797-2.999 2.797-2.357C2.797-1.897 2.797-1.374 2.629-.928C2.434-.425 2.078-.314 1.848-.314Z'/>
-<path id='g0-49' d='M2.239-4.721H2.085C1.632-4.303 1.06-4.275 .642-4.261V-3.822C.914-3.829 1.262-3.843 1.611-3.982V-.439H.683V0H3.166V-.439H2.239V-4.721Z'/>
-<path id='g0-50' d='M1.974-.537C1.89-.537 1.806-.53 1.723-.53H.928L2.008-1.485C2.134-1.597 2.476-1.855 2.608-1.967C2.915-2.246 3.327-2.608 3.327-3.215C3.327-4.003 2.741-4.721 1.743-4.721C1.004-4.721 .544-4.324 .307-3.612L.635-3.201C.795-3.787 1.039-4.24 1.646-4.24C2.232-4.24 2.678-3.829 2.678-3.201C2.678-2.622 2.336-2.294 1.918-1.897C1.778-1.757 1.402-1.444 1.255-1.304C1.053-1.123 .572-.656 .37-.481V0H3.327V-.537H1.974Z'/>
-<path id='g0-51' d='M.697-3.578C.983-4.135 1.485-4.289 1.82-4.289C2.232-4.289 2.538-4.052 2.538-3.654C2.538-3.285 2.287-2.831 1.757-2.741C1.723-2.734 1.695-2.734 1.234-2.699V-2.239H1.778C2.441-2.239 2.685-1.716 2.685-1.276C2.685-.732 2.35-.314 1.806-.314C1.311-.314 .746-.551 .398-.997L.307-.544C.711-.091 1.276 .146 1.82 .146C2.734 .146 3.389-.537 3.389-1.269C3.389-1.841 2.929-2.301 2.378-2.462C2.908-2.734 3.18-3.201 3.18-3.654C3.18-4.247 2.573-4.721 1.827-4.721C1.213-4.721 .704-4.4 .411-3.982L.697-3.578Z'/>
-<path id='g0-52' d='M2.762-1.165H3.487V-1.625H2.762V-4.575H2.071L.209-1.625V-1.165H2.162V0H2.762V-1.165ZM.802-1.625C1.011-1.953 2.211-3.815 2.211-4.233V-1.625H.802Z'/>
-<path id='g0-53' d='M1.144-4.094H3.075V-4.575H.586V-1.967H1.095C1.262-2.343 1.59-2.511 1.904-2.511C2.19-2.511 2.622-2.315 2.622-1.43C2.622-.516 2.043-.314 1.688-.314C1.227-.314 .781-.558 .544-.955L.279-.537C.621-.112 1.137 .146 1.688 .146C2.608 .146 3.327-.565 3.327-1.416C3.327-2.28 2.685-2.971 1.918-2.971C1.618-2.971 1.353-2.866 1.144-2.692V-4.094Z'/>
-<path id='g0-54' d='M3.062-4.582C2.685-4.721 2.42-4.721 2.287-4.721C1.227-4.721 .307-3.724 .307-2.253C.307-.363 1.158 .146 1.862 .146C2.427 .146 2.72-.119 2.936-.342C3.382-.816 3.389-1.311 3.389-1.555C3.389-2.469 2.894-3.229 2.218-3.229C1.534-3.229 1.165-2.873 .962-2.671C1.053-3.626 1.541-4.289 2.294-4.289C2.434-4.289 2.713-4.275 3.062-4.142V-4.582ZM.969-1.534C.969-1.576 .969-1.681 .976-1.716C.976-2.19 1.276-2.769 1.897-2.769C2.748-2.769 2.748-1.792 2.748-1.555C2.748-1.29 2.748-.997 2.559-.704C2.392-.453 2.183-.314 1.862-.314C1.123-.314 1.004-1.227 .969-1.534Z'/>
-<path id='g0-55' d='M1.723-4.038C1.806-4.038 1.89-4.045 1.974-4.045H2.852C1.792-3.006 1.116-1.548 1.116 .07H1.771C1.771-1.967 2.762-3.431 3.389-4.087V-4.575H.307V-4.038H1.723Z'/>
-<path id='g0-56' d='M2.385-2.469C2.845-2.615 3.285-2.985 3.285-3.501C3.285-4.135 2.678-4.721 1.848-4.721S.411-4.135 .411-3.501C.411-2.978 .865-2.608 1.311-2.469C.697-2.28 .307-1.806 .307-1.269C.307-.523 .969 .146 1.848 .146S3.389-.523 3.389-1.269C3.389-1.806 2.992-2.28 2.385-2.469ZM1.848-2.699C1.353-2.699 .948-2.985 .948-3.494C.948-3.94 1.262-4.289 1.848-4.289C2.427-4.289 2.748-3.94 2.748-3.494C2.748-2.999 2.357-2.699 1.848-2.699ZM1.848-.314C1.367-.314 .941-.621 .941-1.276C.941-1.904 1.346-2.239 1.848-2.239S2.755-1.897 2.755-1.276C2.755-.621 2.322-.314 1.848-.314Z'/>
-<path id='g0-57' d='M.537-.174C.879 .077 1.193 .146 1.52 .146C2.497 .146 3.389-.837 3.389-2.336C3.389-4.24 2.545-4.721 1.876-4.721C1.255-4.721 .969-4.428 .767-4.226C.321-3.773 .307-3.292 .307-3.02C.307-2.12 .795-1.346 1.478-1.346C2.267-1.346 2.699-1.869 2.734-1.911C2.636-.802 2.092-.314 1.52-.314C1.158-.314 .934-.446 .774-.579L.537-.174ZM2.713-3.027C2.72-2.985 2.72-2.915 2.72-2.873C2.72-2.357 2.406-1.806 1.799-1.806C1.534-1.806 1.325-1.883 1.144-2.169C.962-2.441 .948-2.706 .948-3.02C.948-3.292 .948-3.605 1.165-3.912C1.311-4.122 1.52-4.289 1.869-4.289C2.545-4.289 2.692-3.473 2.713-3.027Z'/>
-<path id='g0-58' d='M1.339-3.096H.711V-2.469H1.339V-3.096ZM.711-.628V0H1.339V-.628H.711Z'/>
-<path id='g0-64' d='M4.142-.614C4.038-.614 4.024-.614 3.968-.586C3.626-.467 3.271-.391 2.901-.391C1.778-.391 .976-1.339 .976-2.42C.976-3.592 1.883-4.449 2.859-4.449C3.055-4.449 3.515-4.4 3.745-3.843C3.55-3.954 3.333-4.003 3.152-4.003C2.406-4.003 1.778-3.306 1.778-2.42C1.778-1.513 2.427-.837 3.145-.837C3.689-.837 4.519-1.276 4.519-2.518C4.519-3.222 4.47-4.91 2.866-4.91C1.541-4.91 .411-3.815 .411-2.42C.411-1.039 1.527 .07 2.873 .07C3.515 .07 4.115-.195 4.519-.614H4.142ZM3.152-1.297C2.72-1.297 2.343-1.778 2.343-2.42C2.343-3.082 2.734-3.543 3.145-3.543C3.578-3.543 3.954-3.062 3.954-2.42C3.954-1.757 3.564-1.297 3.152-1.297Z'/>
-<path id='g0-65' d='M2.803-4.84H2.127L.209 0H.781L1.325-1.381H3.445L3.989 0H4.721L2.803-4.84ZM2.392-4.31L3.271-1.792H1.499L2.392-4.31Z'/>
-<path id='g0-67' d='M4.317-.851C3.829-.551 3.605-.418 2.908-.418C1.827-.418 1.172-1.43 1.172-2.434C1.172-3.466 1.89-4.435 2.908-4.435C3.368-4.435 3.843-4.289 4.163-4.045L4.275-4.679C3.787-4.861 3.396-4.917 2.887-4.917C1.506-4.917 .474-3.773 .474-2.427C.474-.99 1.569 .07 2.929 .07C3.612 .07 3.898-.07 4.359-.321L4.317-.851Z'/>
-<path id='g0-71' d='M4.442-2.085H2.88V-1.625H3.829V-.558C3.522-.481 3.222-.418 2.908-.418C1.834-.418 1.172-1.43 1.172-2.427C1.172-3.382 1.82-4.435 2.873-4.435C3.515-4.435 3.919-4.24 4.268-3.947L4.38-4.582C3.898-4.812 3.473-4.924 2.943-4.924C1.534-4.924 .474-3.822 .474-2.427C.474-1.067 1.527 .07 2.901 .07C3.403 .07 3.996-.042 4.442-.272V-2.085Z'/>
-<path id='g0-73' d='M1.381-4.84H.676V0H1.381V-4.84Z'/>
-<path id='g0-78' d='M1.646-4.84H.697V0H1.283V-4.289H1.29L3.578 0H4.526V-4.84H3.94V-.551H3.933L1.646-4.84Z'/>
-<path id='g0-79' d='M5.056-2.399C5.056-3.843 3.996-4.986 2.734-4.986S.411-3.843 .411-2.399S1.485 .146 2.734 .146C3.989 .146 5.056-.962 5.056-2.399ZM2.734-.349C1.89-.349 1.116-1.193 1.116-2.511C1.116-3.745 1.897-4.505 2.734-4.505S4.352-3.745 4.352-2.511C4.352-1.186 3.578-.349 2.734-.349Z'/>
-<path id='g0-83' d='M3.445-4.645C2.999-4.875 2.601-4.986 2.085-4.986C1.032-4.986 .411-4.275 .411-3.605C.411-3.32 .502-2.985 .844-2.664C1.151-2.378 1.471-2.308 1.904-2.204C2.49-2.064 2.65-2.029 2.852-1.82C2.985-1.688 3.096-1.492 3.096-1.255C3.096-.823 2.706-.377 2.029-.377C1.632-.377 .99-.495 .439-.962L.328-.335C.676-.133 1.255 .146 2.036 .146C3.006 .146 3.696-.558 3.696-1.339C3.696-1.904 3.368-2.225 3.229-2.371C2.936-2.657 2.615-2.734 2.078-2.859C1.653-2.957 1.43-3.013 1.262-3.173C1.172-3.264 1.011-3.424 1.011-3.689C1.011-4.08 1.402-4.484 2.078-4.484C2.608-4.484 2.978-4.317 3.333-4.017L3.445-4.645Z'/>
-<path id='g0-97' d='M2.971-2.008C2.971-2.72 2.427-3.201 1.736-3.201C1.297-3.201 .962-3.11 .572-2.901L.614-2.392C.844-2.545 1.186-2.755 1.736-2.755C2.043-2.755 2.364-2.525 2.364-2.001V-1.723C1.332-1.688 .314-1.471 .314-.823C.314-.474 .551 .07 1.165 .07C1.465 .07 2.015 .007 2.385-.265V0H2.971V-2.008ZM2.364-.99C2.364-.851 2.364-.669 2.12-.523C1.897-.398 1.625-.391 1.548-.391C1.165-.391 .872-.565 .872-.83C.872-1.276 2.05-1.318 2.364-1.332V-.99Z'/>
-<path id='g0-98' d='M1.179-4.84H.593V0H1.2V-.328C1.353-.195 1.688 .07 2.197 .07C2.957 .07 3.571-.642 3.571-1.555C3.571-2.399 3.089-3.166 2.392-3.166C1.953-3.166 1.527-3.027 1.179-2.769V-4.84ZM1.2-2.197C1.2-2.308 1.2-2.392 1.444-2.552C1.548-2.615 1.736-2.706 1.974-2.706C2.441-2.706 2.964-2.392 2.964-1.555C2.964-.704 2.385-.391 1.897-.391C1.639-.391 1.395-.509 1.2-.823V-2.197Z'/>
-<path id='g0-99' d='M3.034-.76C2.685-.537 2.308-.411 1.876-.411C1.234-.411 .858-.928 .858-1.555C.858-2.092 1.137-2.72 1.897-2.72C2.371-2.72 2.594-2.622 2.95-2.399L3.041-2.901C2.622-3.11 2.441-3.201 1.897-3.201C.851-3.201 .251-2.357 .251-1.548C.251-.697 .921 .07 1.869 .07C2.357 .07 2.776-.077 3.075-.251L3.034-.76Z'/>
-<path id='g0-100' d='M3.229-4.84H2.643V-2.797C2.197-3.124 1.743-3.166 1.541-3.166C.809-3.166 .251-2.434 .251-1.548S.802 .07 1.52 .07C1.953 .07 2.357-.126 2.622-.363V0H3.229V-4.84ZM2.622-.865C2.448-.579 2.183-.391 1.848-.391C1.36-.391 .858-.732 .858-1.541C.858-2.413 1.451-2.706 1.925-2.706C2.204-2.706 2.441-2.587 2.622-2.35V-.865Z'/>
-<path id='g0-101' d='M2.999-.76C2.608-.481 2.169-.391 1.869-.391C1.262-.391 .802-.886 .781-1.527H3.068C3.068-1.848 3.034-2.315 2.762-2.713C2.511-3.068 2.092-3.201 1.75-3.201C.9-3.201 .244-2.455 .244-1.569C.244-.676 .941 .07 1.862 .07C2.267 .07 2.685-.049 3.041-.265L2.999-.76ZM.83-1.946C.99-2.504 1.402-2.741 1.75-2.741C2.057-2.741 2.511-2.594 2.643-1.946H.83Z'/>
-<path id='g0-102' d='M1.325-2.657H2.12V-3.096H1.304V-3.898C1.304-4.38 1.743-4.449 1.974-4.449C2.12-4.449 2.308-4.428 2.566-4.331V-4.84C2.385-4.882 2.169-4.91 1.981-4.91C1.262-4.91 .739-4.394 .739-3.703V-3.096H.202V-2.657H.739V0H1.325V-2.657Z'/>
-<path id='g0-103' d='M3.508-3.166C3.354-3.166 2.887-3.159 2.357-2.957L2.343-2.95C2.092-3.117 1.848-3.166 1.646-3.166C.962-3.166 .453-2.629 .453-2.029C.453-1.785 .537-1.534 .697-1.339C.6-1.22 .495-1.025 .495-.76C.495-.488 .607-.314 .669-.23C.286-.007 .209 .314 .209 .481C.209 1.011 .941 1.43 1.848 1.43C2.762 1.43 3.487 1.011 3.487 .481C3.487-.502 2.267-.502 1.967-.502H1.318C1.206-.502 .907-.502 .907-.865C.907-1.004 .955-1.074 .962-1.088C1.206-.934 1.451-.886 1.639-.886C2.322-.886 2.831-1.423 2.831-2.022C2.831-2.246 2.769-2.448 2.643-2.636C2.615-2.678 2.615-2.685 2.615-2.692C2.615-2.72 3.034-2.72 3.068-2.72C3.075-2.72 3.34-2.72 3.592-2.692L3.508-3.166ZM1.646-1.318C1.269-1.318 .99-1.555 .99-2.022C.99-2.566 1.339-2.734 1.639-2.734C2.015-2.734 2.294-2.497 2.294-2.029C2.294-1.485 1.946-1.318 1.646-1.318ZM1.974 .042C2.134 .042 2.957 .042 2.957 .488C2.957 .788 2.434 .997 1.848 .997S.739 .788 .739 .488C.739 .453 .739 .042 1.304 .042H1.974Z'/>
-<path id='g0-104' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.625-3.166 1.304-2.817 1.165-2.671V-4.84H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-105' d='M1.227-4.784H.523V-4.08H1.227V-4.784ZM1.172-3.096H.586V0H1.172V-3.096Z'/>
-<path id='g0-106' d='M1.381-4.784H.676V-4.08H1.381V-4.784ZM-.453 1.186C-.133 1.36 .181 1.423 .446 1.423C.928 1.423 1.381 1.053 1.381 .411V-3.096H.795V.46C.795 .586 .795 .697 .649 .816C.488 .934 .293 .934 .23 .934C-.063 .934-.244 .802-.328 .725L-.453 1.186Z'/>
-<path id='g0-108' d='M1.172-4.84H.586V0H1.172V-4.84Z'/>
-<path id='g0-109' d='M5.3-2.064C5.3-2.608 5.14-3.166 4.282-3.166C3.696-3.166 3.333-2.824 3.166-2.601C3.096-2.79 2.922-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-1.695C3.243-2.155 3.438-2.706 3.975-2.706C4.693-2.706 4.693-2.218 4.693-2.015V0H5.3V-2.064Z'/>
-<path id='g0-110' d='M3.243-2.064C3.243-2.608 3.082-3.166 2.225-3.166C1.827-3.166 1.444-3.006 1.137-2.636V-3.145H.579V0H1.186V-1.695C1.186-2.155 1.381-2.706 1.918-2.706C2.636-2.706 2.636-2.218 2.636-2.015V0H3.243V-2.064Z'/>
-<path id='g0-111' d='M3.487-1.527C3.487-2.448 2.755-3.201 1.848-3.201S.209-2.441 .209-1.527C.209-.642 .948 .07 1.848 .07C2.755 .07 3.487-.642 3.487-1.527ZM1.848-.411C1.297-.411 .816-.816 .816-1.604S1.332-2.741 1.848-2.741C2.371-2.741 2.88-2.378 2.88-1.604C2.88-.809 2.385-.411 1.848-.411Z'/>
-<path id='g0-112' d='M1.2-.328C1.569 .007 1.967 .07 2.204 .07C2.943 .07 3.571-.635 3.571-1.555C3.571-2.392 3.11-3.166 2.42-3.166C2.106-3.166 1.583-3.075 1.179-2.762V-3.096H.593V1.353H1.2V-.328ZM1.2-2.315C1.36-2.511 1.632-2.685 1.967-2.685C2.525-2.685 2.964-2.169 2.964-1.555C2.964-.865 2.441-.391 1.897-.391C1.792-.391 1.618-.404 1.437-.551C1.227-.711 1.2-.816 1.2-.948V-2.315Z'/>
-<path id='g0-114' d='M1.179-1.485C1.179-2.239 1.806-2.643 2.42-2.65V-3.166C1.834-3.159 1.409-2.873 1.13-2.504V-3.145H.593V0H1.179V-1.485Z'/>
-<path id='g0-115' d='M2.545-2.985C2.071-3.18 1.723-3.201 1.471-3.201C1.297-3.201 .244-3.201 .244-2.273C.244-1.946 .425-1.764 .516-1.681C.76-1.437 1.053-1.381 1.423-1.311C1.75-1.248 2.127-1.179 2.127-.844C2.127-.404 1.548-.404 1.451-.404C1.004-.404 .586-.565 .307-.76L.209-.237C.446-.119 .872 .07 1.451 .07C1.764 .07 2.071 .021 2.329-.167C2.587-.363 2.671-.669 2.671-.907C2.671-1.032 2.657-1.304 2.364-1.569C2.106-1.799 1.855-1.848 1.52-1.911C1.109-1.988 .788-2.05 .788-2.357C.788-2.755 1.297-2.755 1.402-2.755C1.799-2.755 2.106-2.671 2.455-2.49L2.545-2.985Z'/>
-<path id='g0-116' d='M1.311-2.657H2.343V-3.096H1.311V-3.982H.774V-3.096H.139V-2.657H.753V-.893C.753-.425 .872 .07 1.374 .07S2.26-.091 2.469-.188L2.35-.635C2.12-.467 1.876-.411 1.681-.411C1.388-.411 1.311-.697 1.311-1.018V-2.657Z'/>
-<path id='g0-119' d='M4.951-3.096H4.407C4.345-2.901 3.954-1.723 3.738-.997C3.682-.795 3.612-.572 3.592-.411H3.585C3.543-.697 3.299-1.451 3.285-1.499L2.769-3.096H2.239C2.036-2.497 1.513-.934 1.458-.425H1.451C1.395-.921 .879-2.462 .767-2.797C.711-2.964 .711-2.978 .676-3.096H.105L1.123 0H1.709C1.716-.028 1.904-.579 2.148-1.353C2.253-1.695 2.462-2.364 2.497-2.671L2.504-2.678C2.518-2.532 2.559-2.378 2.608-2.204S2.706-1.841 2.755-1.681L3.292 0H3.933L4.951-3.096Z'/>
-<path id='g0-120' d='M1.932-1.597L3.285-3.096H2.671L1.681-1.953L.669-3.096H.042L1.437-1.597L0 0H.621L1.681-1.311L2.783 0H3.41L1.932-1.597Z'/>
-<path id='g0-121' d='M3.306-3.096H2.741C2.176-1.764 1.785-.865 1.757-.439C1.743-.635 1.618-.983 1.492-1.311C1.381-1.59 1.269-1.869 1.144-2.141L.704-3.096H.105L1.548 0C1.465 .202 1.325 .523 1.283 .614C1.137 .907 1.039 1.004 .851 1.004C.823 1.004 .565 1.004 .265 .879L.307 1.367C.37 1.381 .628 1.423 .844 1.423C1.123 1.423 1.374 1.318 1.667 .649L3.306-3.096Z'/>
-<path id='g0-122' d='M2.957-2.803V-3.096H.307V-2.65H1.332C1.416-2.65 1.499-2.657 1.583-2.657H2.127L.209-.307V0H2.978V-.467H1.897C1.813-.467 1.73-.46 1.646-.46H1.039L2.957-2.803Z'/>
-</defs>
-<g id='page1'>
-<path d='M139.344 212.797V203.938M196.539 212.797V203.938M253.734 212.797V203.938M310.926 212.797V203.938M139.344 69.836V78.692M196.539 69.836V78.692M253.734 69.836V78.692M310.926 69.836V78.692' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M110.746 208.192V203.938M167.941 208.192V203.938M225.137 208.192V203.938M282.332 208.192V203.938M339.524 208.192V203.938M110.746 74.442V78.692M167.941 74.442V78.692M225.137 74.442V78.692M282.332 74.442V78.692M339.524 74.442V78.692' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M82.148 203.938H86.402M82.148 172.629H86.402M82.148 141.317H86.402M82.148 110.004H86.402M82.148 78.692H86.402M368.121 203.938H363.871M368.121 172.629H363.871M368.121 141.317H363.871M368.121 110.004H363.871M368.121 78.692H363.871' stroke='#808080' fill='none' stroke-width='.199' stroke-miterlimit='10'/>
-<path d='M82.148 203.938V78.692H368.121V203.938H82.148Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -12.278 72.902)'>
-<use x='114.487' y='145.434' xlink:href='#g3-99'/>
-<use x='118.25' y='145.434' xlink:href='#g3-102'/>
-<use x='120.838' y='145.434' xlink:href='#g3-114'/>
-<use x='123.73' y='145.434' xlink:href='#g3-97'/>
-<use x='127.798' y='145.434' xlink:href='#g3-99'/>
-</g>
-<g transform='matrix(1 0 0 1 43.353 72.902)'>
-<use x='114.487' y='145.434' xlink:href='#g3-108'/>
-<use x='116.507' y='145.434' xlink:href='#g3-101'/>
-<use x='120.271' y='145.434' xlink:href='#g3-97'/>
-<use x='124.339' y='145.434' xlink:href='#g3-110'/>
-<use x='128.711' y='145.434' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 97.361 72.902)'>
-<use x='114.487' y='145.434' xlink:href='#g3-108'/>
-<use x='116.507' y='145.434' xlink:href='#g3-97'/>
-<use x='120.34' y='145.434' xlink:href='#g3-114'/>
-<use x='123.232' y='145.434' xlink:href='#g3-115'/>
-<use x='126.478' y='145.434' xlink:href='#g3-111'/>
-<use x='130.712' y='145.434' xlink:href='#g3-110'/>
-<use x='135.085' y='145.434' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 151.766 72.902)'>
-<use x='114.487' y='145.434' xlink:href='#g3-109'/>
-<use x='121.211' y='145.434' xlink:href='#g3-115'/>
-<use x='124.458' y='145.434' xlink:href='#g3-116'/>
-<use x='127.516' y='145.434' xlink:href='#g3-114'/>
-<use x='130.408' y='145.434' xlink:href='#g3-101'/>
-<use x='134.171' y='145.434' xlink:href='#g3-115'/>
-<use x='137.418' y='145.434' xlink:href='#g3-115'/>
-<use x='140.664' y='145.434' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 200.59 72.902)'>
-<use x='114.487' y='145.434' xlink:href='#g3-120'/>
-<use x='118.389' y='145.434' xlink:href='#g3-109'/>
-<use x='125.114' y='145.434' xlink:href='#g3-97'/>
-<use x='129.182' y='145.434' xlink:href='#g3-108'/>
-<use x='131.202' y='145.434' xlink:href='#g3-108'/>
-<use x='133.222' y='145.434' xlink:href='#g3-111'/>
-<use x='137.692' y='145.434' xlink:href='#g3-99'/>
-<use x='141.455' y='145.434' xlink:href='#g3-45'/>
-<use x='144.278' y='145.434' xlink:href='#g3-116'/>
-<use x='147.336' y='145.434' xlink:href='#g3-101'/>
-<use x='151.1' y='145.434' xlink:href='#g3-115'/>
-<use x='154.346' y='145.434' xlink:href='#g3-116'/>
-<use x='157.404' y='145.434' xlink:href='#g3-78'/>
-</g>
-<g transform='matrix(1 0 0 1 -40.942 60.139)'>
-<use x='114.487' y='145.434' xlink:href='#g2-48'/>
-<use x='117.133' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 28.828)'>
-<use x='114.487' y='145.434' xlink:href='#g2-48'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-53'/>
-<use x='121.25' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -2.484)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -33.795)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-53'/>
-<use x='121.25' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(1 0 0 1 -45.059 -65.107)'>
-<use x='114.487' y='145.434' xlink:href='#g2-50'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-120'/>
-</g>
-<path d='M82.148 141.317H368.121' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M96.051 203.938H99.289V141.317H96.051ZM153.246 203.938H156.484V141.317H153.246ZM210.442 203.938H213.68V141.317H210.442ZM267.637 203.938H270.875V141.317H267.637ZM324.828 203.938H328.067V141.317H324.828Z' fill='#933' clip-path='url(#clip1)'/>
-<path d='M96.051 203.938H99.289V141.317H96.051ZM153.246 203.938H156.484V141.317H153.246ZM210.442 203.938H213.68V141.317H210.442ZM267.637 203.938H270.875V141.317H267.637ZM324.828 203.938H328.067V141.317H324.828Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M97.672 141.317' fill='#933' clip-path='url(#clip1)'/>
-<path d='M95.68 141.317H99.664' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M97.672 141.317' fill='#933' clip-path='url(#clip1)'/>
-<path d='M95.68 141.317H99.664' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M154.867 141.317V141.067' fill='#933' clip-path='url(#clip1)'/>
-<path d='M154.867 141.317V141.067' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M152.871 141.066H156.859' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M154.867 141.317V141.567' fill='#933' clip-path='url(#clip1)'/>
-<path d='M154.867 141.317V141.567' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M156.86 141.566H152.875' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M212.059 141.317V141.067' fill='#933' clip-path='url(#clip1)'/>
-<path d='M212.059 141.317V141.067' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M210.066 141.066H214.05' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M212.059 141.317V141.567' fill='#933' clip-path='url(#clip1)'/>
-<path d='M212.059 141.317V141.567' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M214.054 141.566H210.066' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M269.254 141.317V141.254' fill='#933' clip-path='url(#clip1)'/>
-<path d='M269.254 141.317V141.254' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M267.262 141.254H271.246' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M269.254 141.317V141.379' fill='#933' clip-path='url(#clip1)'/>
-<path d='M269.254 141.317V141.379' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M271.246 141.379H267.262' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M326.449 141.317V141.067' fill='#933' clip-path='url(#clip1)'/>
-<path d='M326.449 141.317V141.067' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M324.457 141.066H328.441' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M326.449 141.317V141.567' fill='#933' clip-path='url(#clip1)'/>
-<path d='M326.449 141.317V141.567' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M328.441 141.566H324.457' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M101.281 203.938H104.52V142.067H101.281ZM158.477 203.938H161.715V140.817H158.477ZM215.672 203.938H218.91V143.696H215.672ZM272.867 203.938H276.106V141.442H272.867ZM330.059 203.938H333.297V138.122H330.059Z' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M101.281 203.938H104.52V142.067H101.281ZM158.477 203.938H161.715V140.817H158.477ZM215.672 203.938H218.91V143.696H215.672ZM272.867 203.938H276.106V141.442H272.867ZM330.059 203.938H333.297V138.122H330.059Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M102.902 142.067' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M100.91 142.066H104.895' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M102.902 142.067' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M100.91 142.066H104.895' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M160.098 140.817V140.563' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M160.098 140.817V140.563' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M158.101 140.562H162.089' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M160.098 140.817V141.067' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M160.098 140.817V141.067' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M162.09 141.066H158.105' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M217.289 143.696V143.508' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M217.289 143.696V143.508' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M215.297 143.507H219.282' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M217.289 143.696V143.883' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M217.289 143.696V143.883' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M219.285 143.883H215.297' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M274.484 141.442' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M272.492 141.442H276.476' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M274.484 141.442' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M272.492 141.442H276.476' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M331.68 138.122V138.059' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M331.68 138.122V138.059' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M329.688 138.058H333.672' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M331.68 138.122V138.184' fill='#bf8080' clip-path='url(#clip1)'/>
-<path d='M331.68 138.122V138.184' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M333.671 138.183H329.687' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M106.512 203.938H109.75V122.028H106.512ZM163.707 203.938H166.945V128.918H163.707ZM220.902 203.938H224.141V119.961H220.902ZM278.098 203.938H281.336V139.375H278.098ZM335.289 203.938H338.527V78.692H335.289Z' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M106.512 203.938H109.75V122.028H106.512ZM163.707 203.938H166.945V128.918H163.707ZM220.902 203.938H224.141V119.961H220.902ZM278.098 203.938H281.336V139.375H278.098ZM335.289 203.938H338.527V78.692H335.289Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M108.133 122.028' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M106.14 122.028H110.125' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M108.133 122.028' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M106.14 122.028H110.125' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M165.328 128.918V128.856' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M165.328 128.918V128.856' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M163.332 128.856H167.317' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M165.328 128.918V128.981' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M165.328 128.918V128.981' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M167.321 128.981H163.336' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M222.52 119.961V119.836' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M222.52 119.961V119.836' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M220.527 119.836H224.512' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M222.52 119.961V120.086' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M222.52 119.961V120.086' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M224.512 120.086H220.527' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M279.715 139.375V139.125' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M279.715 139.375V139.125' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M277.723 139.125H281.707' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M279.715 139.375V139.625' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M279.715 139.375V139.625' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M281.708 139.625H277.723' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M336.91 78.692' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M334.918 78.691H338.902' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M336.91 78.692' fill='#8080bf' clip-path='url(#clip1)'/>
-<path d='M334.918 78.691H338.902' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M111.742 203.938H114.981V120.086H111.742ZM168.938 203.938H172.176V136.43H168.938ZM226.133 203.938H229.371V136.809H226.133ZM283.328 203.938H286.567V78.692H283.328ZM340.52 203.938H343.758V112.571H340.52Z' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M111.742 203.938H114.981V120.086H111.742ZM168.938 203.938H172.176V136.43H168.938ZM226.133 203.938H229.371V136.809H226.133ZM283.328 203.938H286.567V78.692H283.328ZM340.52 203.938H343.758V112.571H340.52Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M113.363 120.086V119.899' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M113.363 120.086V119.899' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M111.371 119.899H115.356' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M113.363 120.086V120.274' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M113.363 120.086V120.274' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M115.356 120.273H111.371' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M170.559 136.43' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M168.562 136.43H172.547' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M170.559 136.43' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M168.562 136.43H172.547' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M227.75 136.809' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M225.758 136.809H229.743' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M227.75 136.809' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M225.758 136.809H229.743' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M284.945 78.692' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M282.953 78.691H286.937' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M284.945 78.692' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M282.953 78.691H286.937' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M342.141 112.571V112.383' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M342.141 112.571V112.383' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M340.149 112.383H344.133' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M342.141 112.571V112.758' fill='#ffb733' clip-path='url(#clip1)'/>
-<path d='M342.141 112.571V112.758' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M344.132 112.757H340.148' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M116.973 203.938H120.211V137.059H116.973ZM174.168 203.938H177.406V131.235H174.168ZM231.363 203.938H234.602V78.692H231.363ZM288.559 203.938H291.797V79.696H288.559ZM345.75 203.938H348.988V78.692H345.75Z' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M116.973 203.938H120.211V137.059H116.973ZM174.168 203.938H177.406V131.235H174.168ZM231.363 203.938H234.602V78.692H231.363ZM288.559 203.938H291.797V79.696H288.559ZM345.75 203.938H348.988V78.692H345.75Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M118.594 137.059V136.809' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M118.594 137.059V136.809' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M116.601 136.809H120.586' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M118.594 137.059V137.309' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M118.594 137.059V137.309' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M120.586 137.309H116.601' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M175.789 131.235V131.047' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M175.789 131.235V131.047' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M173.793 131.046H177.778' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M175.789 131.235V131.422' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M175.789 131.235V131.422' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M177.782 131.422H173.797' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M232.981 78.692' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M230.988 78.691H234.973' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M232.981 78.692' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M230.988 78.691H234.973' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M290.176 79.696V79.383' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M290.176 79.696V79.383' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M288.184 79.383H292.168' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M290.176 79.696V80.008' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M290.176 79.696V80.008' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M292.168 80.008H288.183' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M347.371 78.692' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M345.379 78.691H349.363' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M347.371 78.692' fill='#80bf80' clip-path='url(#clip1)'/>
-<path d='M345.379 78.691H349.363' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M122.203 203.938H125.441V78.692H122.203ZM179.399 203.938H182.637V93.286H179.399ZM236.594 203.938H239.832V78.692H236.594ZM293.789 203.938H297.024V78.692H293.789ZM350.981 203.938H354.219V78.692H350.981Z' fill='#399' clip-path='url(#clip1)'/>
-<path d='M122.203 203.938H125.441V78.692H122.203ZM179.399 203.938H182.637V93.286H179.399ZM236.594 203.938H239.832V78.692H236.594ZM293.789 203.938H297.024V78.692H293.789ZM350.981 203.938H354.219V78.692H350.981Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M123.824 78.692' fill='#399' clip-path='url(#clip1)'/>
-<path d='M121.832 78.691H125.817' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M123.824 78.692' fill='#399' clip-path='url(#clip1)'/>
-<path d='M121.832 78.691H125.817' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M181.02 93.286V93.161' fill='#399' clip-path='url(#clip1)'/>
-<path d='M181.02 93.286V93.161' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M179.023 93.16H183.008' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M181.02 93.286V93.411' fill='#399' clip-path='url(#clip1)'/>
-<path d='M181.02 93.286V93.411' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M183.012 93.41H179.027' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M238.211 78.692' fill='#399' clip-path='url(#clip1)'/>
-<path d='M236.219 78.691H240.204' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M238.211 78.692' fill='#399' clip-path='url(#clip1)'/>
-<path d='M236.219 78.691H240.204' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M295.406 78.692' fill='#399' clip-path='url(#clip1)'/>
-<path d='M293.414 78.691H297.398' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M295.406 78.692' fill='#399' clip-path='url(#clip1)'/>
-<path d='M293.414 78.691H297.398' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M352.602 78.692' fill='#399' clip-path='url(#clip1)'/>
-<path d='M350.609 78.691H354.593' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M352.602 78.692' fill='#399' clip-path='url(#clip1)'/>
-<path d='M350.609 78.691H354.593' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<path d='M263.02 263.2H367.922V229.188H263.02Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10' clip-path='url(#clip1)'/>
-<g transform='matrix(1 0 0 1 151.853 114.444)'>
-<use x='114.487' y='121.524' xlink:href='#g2-109'/>
-<use x='118.69' y='121.524' xlink:href='#g2-97'/>
-<use x='121.232' y='121.524' xlink:href='#g2-99'/>
-<use x='125.349' y='121.524' xlink:href='#g2-109'/>
-<use x='129.552' y='121.524' xlink:href='#g2-105'/>
-<use x='130.814' y='121.524' xlink:href='#g2-110'/>
-<use x='133.547' y='121.524' xlink:href='#g2-105'/>
-<use x='134.81' y='121.524' xlink:href='#g2-44'/>
-<use x='138.044' y='121.524' xlink:href='#g2-49'/>
-<use x='140.691' y='121.524' xlink:href='#g2-54'/>
-<use x='143.337' y='121.524' xlink:href='#g2-71'/>
-<use x='146.866' y='121.524' xlink:href='#g2-98'/>
-<use x='114.487' y='127.501' xlink:href='#g2-52'/>
-<use x='117.133' y='127.501' xlink:href='#g2-45'/>
-<use x='118.897' y='127.501' xlink:href='#g2-99'/>
-<use x='121.25' y='127.501' xlink:href='#g2-111'/>
-<use x='123.749' y='127.501' xlink:href='#g2-114'/>
-<use x='125.556' y='127.501' xlink:href='#g2-101'/>
-<use x='129.673' y='127.501' xlink:href='#g2-73'/>
-<use x='131.143' y='127.501' xlink:href='#g2-110'/>
-<use x='133.876' y='127.501' xlink:href='#g2-116'/>
-<use x='135.787' y='127.501' xlink:href='#g2-101'/>
-<use x='138.14' y='127.501' xlink:href='#g2-108'/>
-<use x='141.166' y='127.501' xlink:href='#g2-105'/>
-<use x='142.429' y='127.501' xlink:href='#g2-51'/>
-<use x='146.84' y='127.501' xlink:href='#g2-64'/>
-<use x='150.368' y='127.501' xlink:href='#g2-51'/>
-<use x='153.015' y='127.501' xlink:href='#g2-46'/>
-<use x='154.485' y='127.501' xlink:href='#g2-54'/>
-<use x='157.131' y='127.501' xlink:href='#g2-71'/>
-<use x='160.66' y='127.501' xlink:href='#g2-104'/>
-<use x='163.392' y='127.501' xlink:href='#g2-122'/>
-<use x='114.487' y='133.479' xlink:href='#g2-109'/>
-<use x='118.69' y='133.479' xlink:href='#g2-97'/>
-<use x='121.232' y='133.479' xlink:href='#g2-99'/>
-<use x='123.585' y='133.479' xlink:href='#g2-79'/>
-<use x='127.494' y='133.479' xlink:href='#g2-83'/>
-<use x='132.198' y='133.479' xlink:href='#g2-67'/>
-<use x='135.58' y='133.479' xlink:href='#g2-97'/>
-<use x='138.122' y='133.479' xlink:href='#g2-116'/>
-<use x='140.034' y='133.479' xlink:href='#g2-97'/>
-<use x='142.576' y='133.479' xlink:href='#g2-108'/>
-<use x='143.839' y='133.479' xlink:href='#g2-105'/>
-<use x='145.101' y='133.479' xlink:href='#g2-110'/>
-<use x='147.834' y='133.479' xlink:href='#g2-97'/>
-<use x='152.141' y='133.479' xlink:href='#g2-49'/>
-<use x='154.787' y='133.479' xlink:href='#g2-48'/>
-<use x='157.434' y='133.479' xlink:href='#g2-46'/>
-<use x='158.904' y='133.479' xlink:href='#g2-49'/>
-<use x='161.55' y='133.479' xlink:href='#g2-53'/>
-<use x='164.197' y='133.479' xlink:href='#g2-46'/>
-<use x='165.667' y='133.479' xlink:href='#g2-55'/>
-<use x='168.313' y='133.479' xlink:href='#g2-44'/>
-<use x='171.548' y='133.479' xlink:href='#g2-65'/>
-<use x='175.076' y='133.479' xlink:href='#g2-112'/>
-<use x='177.809' y='133.479' xlink:href='#g2-112'/>
-<use x='180.542' y='133.479' xlink:href='#g2-108'/>
-<use x='181.805' y='133.479' xlink:href='#g2-101'/>
-<use x='185.921' y='133.479' xlink:href='#g2-99'/>
-<use x='188.273' y='133.479' xlink:href='#g2-108'/>
-<use x='189.536' y='133.479' xlink:href='#g2-97'/>
-<use x='192.079' y='133.479' xlink:href='#g2-110'/>
-<use x='194.812' y='133.479' xlink:href='#g2-103'/>
-<use x='199.222' y='133.479' xlink:href='#g2-49'/>
-<use x='201.868' y='133.479' xlink:href='#g2-49'/>
-<use x='204.515' y='133.479' xlink:href='#g2-46'/>
-<use x='205.985' y='133.479' xlink:href='#g2-48'/>
-<use x='208.631' y='133.479' xlink:href='#g2-46'/>
-<use x='210.102' y='133.479' xlink:href='#g2-51'/>
-<use x='114.487' y='139.456' xlink:href='#g2-56'/>
-<use x='118.897' y='139.456' xlink:href='#g2-108'/>
-<use x='120.16' y='139.456' xlink:href='#g2-111'/>
-<use x='122.806' y='139.456' xlink:href='#g2-103'/>
-<use x='125.453' y='139.456' xlink:href='#g2-105'/>
-<use x='126.715' y='139.456' xlink:href='#g2-99'/>
-<use x='129.068' y='139.456' xlink:href='#g2-97'/>
-<use x='131.61' y='139.456' xlink:href='#g2-108'/>
-<use x='134.637' y='139.456' xlink:href='#g2-99'/>
-<use x='136.989' y='139.456' xlink:href='#g2-111'/>
-<use x='139.489' y='139.456' xlink:href='#g2-114'/>
-<use x='141.296' y='139.456' xlink:href='#g2-101'/>
-<use x='143.648' y='139.456' xlink:href='#g2-115'/>
-<use x='114.487' y='145.434' xlink:href='#g2-50'/>
-<use x='117.133' y='145.434' xlink:href='#g2-48'/>
-<use x='119.779' y='145.434' xlink:href='#g2-50'/>
-<use x='122.426' y='145.434' xlink:href='#g2-49'/>
-<use x='125.072' y='145.434' xlink:href='#g2-45'/>
-<use x='126.836' y='145.434' xlink:href='#g2-48'/>
-<use x='129.483' y='145.434' xlink:href='#g2-49'/>
-<use x='132.129' y='145.434' xlink:href='#g2-45'/>
-<use x='133.893' y='145.434' xlink:href='#g2-51'/>
-<use x='136.54' y='145.434' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -46.129 249.778)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 11.066 249.778)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 68.26 249.778)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 125.455 249.778)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 182.649 249.778)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 -40.898 250.529)'>
-<use x='114.487' y='145.434' xlink:href='#g2-48'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-57'/>
-<use x='121.25' y='145.434' xlink:href='#g2-57'/>
-</g>
-<g transform='matrix(0 -1 1 0 16.296 249.277)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 73.491 252.158)'>
-<use x='114.487' y='145.434' xlink:href='#g2-48'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-57'/>
-<use x='121.25' y='145.434' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 130.685 249.903)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 187.88 246.584)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-53'/>
-</g>
-<g transform='matrix(0 -1 1 0 -35.668 230.49)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-51'/>
-<use x='121.25' y='145.434' xlink:href='#g2-49'/>
-</g>
-<g transform='matrix(0 -1 1 0 21.527 237.378)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-50'/>
-<use x='121.25' y='145.434' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 78.721 228.423)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-51'/>
-<use x='121.25' y='145.434' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 135.916 247.837)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-51'/>
-</g>
-<g transform='matrix(0 -1 1 0 193.11 187.155)'>
-<use x='109.598' y='145.434' xlink:href='#g4-1'/>
-<use x='113.103' y='145.434' xlink:href='#g4-1'/>
-<use x='116.608' y='145.434' xlink:href='#g4-1'/>
-<use x='120.114' y='145.434' xlink:href='#g2-53'/>
-<use x='122.76' y='145.434' xlink:href='#g2-46'/>
-<use x='124.23' y='145.434' xlink:href='#g2-52'/>
-<use x='126.877' y='145.434' xlink:href='#g2-55'/>
-<use x='129.523' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -30.437 228.549)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-51'/>
-<use x='121.25' y='145.434' xlink:href='#g2-52'/>
-</g>
-<g transform='matrix(0 -1 1 0 26.757 244.893)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 83.952 245.269)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 141.146 187.155)'>
-<use x='109.598' y='145.434' xlink:href='#g4-1'/>
-<use x='113.103' y='145.434' xlink:href='#g4-1'/>
-<use x='116.608' y='145.434' xlink:href='#g4-1'/>
-<use x='120.114' y='145.434' xlink:href='#g2-51'/>
-<use x='122.76' y='145.434' xlink:href='#g2-46'/>
-<use x='124.23' y='145.434' xlink:href='#g2-50'/>
-<use x='126.877' y='145.434' xlink:href='#g2-49'/>
-<use x='129.523' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 198.34 221.034)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-52'/>
-<use x='121.25' y='145.434' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 -25.207 245.519)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-48'/>
-<use x='121.25' y='145.434' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 31.988 239.696)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-49'/>
-<use x='121.25' y='145.434' xlink:href='#g2-54'/>
-</g>
-<g transform='matrix(0 -1 1 0 89.182 187.155)'>
-<use x='109.598' y='145.434' xlink:href='#g4-1'/>
-<use x='113.103' y='145.434' xlink:href='#g4-1'/>
-<use x='116.608' y='145.434' xlink:href='#g4-1'/>
-<use x='120.114' y='145.434' xlink:href='#g2-50'/>
-<use x='122.76' y='145.434' xlink:href='#g2-46'/>
-<use x='124.23' y='145.434' xlink:href='#g2-49'/>
-<use x='126.877' y='145.434' xlink:href='#g2-52'/>
-<use x='129.523' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 146.376 188.157)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-57'/>
-<use x='121.25' y='145.434' xlink:href='#g2-56'/>
-</g>
-<g transform='matrix(0 -1 1 0 203.571 187.155)'>
-<use x='109.598' y='145.434' xlink:href='#g4-1'/>
-<use x='113.103' y='145.434' xlink:href='#g4-1'/>
-<use x='116.608' y='145.434' xlink:href='#g4-1'/>
-<use x='120.114' y='145.434' xlink:href='#g2-52'/>
-<use x='122.76' y='145.434' xlink:href='#g2-46'/>
-<use x='124.23' y='145.434' xlink:href='#g2-52'/>
-<use x='126.877' y='145.434' xlink:href='#g2-57'/>
-<use x='129.523' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -19.976 187.155)'>
-<use x='114.487' y='145.434' xlink:href='#g2-50'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-50'/>
-<use x='121.25' y='145.434' xlink:href='#g2-48'/>
-</g>
-<g transform='matrix(0 -1 1 0 37.218 201.746)'>
-<use x='114.487' y='145.434' xlink:href='#g2-49'/>
-<use x='117.133' y='145.434' xlink:href='#g2-46'/>
-<use x='118.603' y='145.434' xlink:href='#g2-55'/>
-<use x='121.25' y='145.434' xlink:href='#g2-55'/>
-</g>
-<g transform='matrix(0 -1 1 0 94.413 187.155)'>
-<use x='109.598' y='145.434' xlink:href='#g4-1'/>
-<use x='113.103' y='145.434' xlink:href='#g4-1'/>
-<use x='116.608' y='145.434' xlink:href='#g4-1'/>
-<use x='120.114' y='145.434' xlink:href='#g2-56'/>
-<use x='122.76' y='145.434' xlink:href='#g2-46'/>
-<use x='124.23' y='145.434' xlink:href='#g2-48'/>
-<use x='126.877' y='145.434' xlink:href='#g2-52'/>
-<use x='129.523' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 151.607 187.155)'>
-<use x='109.598' y='145.434' xlink:href='#g4-1'/>
-<use x='113.103' y='145.434' xlink:href='#g4-1'/>
-<use x='116.608' y='145.434' xlink:href='#g4-1'/>
-<use x='120.114' y='145.434' xlink:href='#g2-50'/>
-<use x='122.76' y='145.434' xlink:href='#g2-46'/>
-<use x='124.23' y='145.434' xlink:href='#g2-55'/>
-<use x='126.877' y='145.434' xlink:href='#g2-56'/>
-<use x='129.523' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 208.801 187.155)'>
-<use x='109.598' y='145.434' xlink:href='#g4-1'/>
-<use x='113.103' y='145.434' xlink:href='#g4-1'/>
-<use x='116.608' y='145.434' xlink:href='#g4-1'/>
-<use x='120.114' y='145.434' xlink:href='#g2-56'/>
-<use x='122.76' y='145.434' xlink:href='#g2-46'/>
-<use x='124.23' y='145.434' xlink:href='#g2-54'/>
-<use x='126.877' y='145.434' xlink:href='#g2-49'/>
-<use x='129.523' y='145.434' xlink:href='#g2-120'/>
-</g>
-<g transform='matrix(0 -1 1 0 -86.074 311.062)'>
-<use x='114.487' y='145.434' xlink:href='#g1-82'/>
-<use x='120.457' y='145.434' xlink:href='#g1-101'/>
-<use x='124.553' y='145.434' xlink:href='#g1-108'/>
-<use x='126.753' y='145.434' xlink:href='#g1-97'/>
-<use x='131.181' y='145.434' xlink:href='#g1-116'/>
-<use x='134.509' y='145.434' xlink:href='#g1-105'/>
-<use x='136.709' y='145.434' xlink:href='#g1-118'/>
-<use x='140.957' y='145.434' xlink:href='#g1-101'/>
-<use x='148.124' y='145.434' xlink:href='#g1-116'/>
-<use x='151.452' y='145.434' xlink:href='#g1-105'/>
-<use x='153.652' y='145.434' xlink:href='#g1-109'/>
-<use x='160.972' y='145.434' xlink:href='#g1-101'/>
-<use x='168.139' y='145.434' xlink:href='#g3-40'/>
-<use x='171.432' y='145.434' xlink:href='#g3-108'/>
-<use x='173.453' y='145.434' xlink:href='#g3-111'/>
-<use x='177.452' y='145.434' xlink:href='#g3-119'/>
-<use x='183' y='145.434' xlink:href='#g3-101'/>
-<use x='186.764' y='145.434' xlink:href='#g3-114'/>
-<use x='192.479' y='145.434' xlink:href='#g3-105'/>
-<use x='194.499' y='145.434' xlink:href='#g3-115'/>
-<use x='200.568' y='145.434' xlink:href='#g3-98'/>
-<use x='205.176' y='145.434' xlink:href='#g3-101'/>
-<use x='208.94' y='145.434' xlink:href='#g3-116'/>
-<use x='211.998' y='145.434' xlink:href='#g3-116'/>
-<use x='215.056' y='145.434' xlink:href='#g3-101'/>
-<use x='218.819' y='145.434' xlink:href='#g3-114'/>
-<use x='221.711' y='145.434' xlink:href='#g3-41'/>
-</g>
-<path d='M82.348 262.243H231.688V232.317H82.348Z' fill='#fff'/>
-<path d='M82.348 262.243H231.688V232.317H82.348Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<path d='M85.535 242.77H88.523V234.801H85.535ZM91.516 242.77H94.504V236.793H91.516Z' fill='#933'/>
-<path d='M85.535 242.77H88.523V234.801H85.535ZM91.516 242.77H94.504V236.793H91.516Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -40.354 110.298)'>
-<use x='141.573' y='132.464' xlink:href='#g3-120'/>
-<use x='145.475' y='132.464' xlink:href='#g3-109'/>
-<use x='152.2' y='132.464' xlink:href='#g3-105'/>
-<use x='154.221' y='132.464' xlink:href='#g3-58'/>
-<use x='156.573' y='132.464' xlink:href='#g0-57'/>
-<use x='160.278' y='132.464' xlink:href='#g0-48'/>
-</g>
-<path d='M130.344 242.77H133.336V234.801H130.344ZM136.324 242.77H139.313V236.793H136.324Z' fill='#bf8080'/>
-<path d='M130.344 242.77H133.336V234.801H130.344ZM136.324 242.77H139.313V236.793H136.324Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -38.403 110.298)'>
-<use x='181.727' y='132.464' xlink:href='#g3-109'/>
-<use x='188.452' y='132.464' xlink:href='#g3-105'/>
-<use x='190.472' y='132.464' xlink:href='#g3-58'/>
-<use x='192.825' y='132.464' xlink:href='#g0-57'/>
-<use x='196.53' y='132.464' xlink:href='#g0-51'/>
-</g>
-<path d='M165.844 242.77H168.832V234.801H165.844ZM171.82 242.77H174.813V236.793H171.82Z' fill='#8080bf'/>
-<path d='M165.844 242.77H168.832V234.801H165.844ZM171.82 242.77H174.813V236.793H171.82Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.441 109.855)'>
-<use x='215.44' y='132.464' xlink:href='#g3-116'/>
-<use x='218.498' y='132.464' xlink:href='#g3-99'/>
-<use x='222.262' y='132.464' xlink:href='#g3-58'/>
-<use x='224.614' y='132.464' xlink:href='#g0-53'/>
-<use x='228.319' y='132.464' xlink:href='#g0-48'/>
-</g>
-<path d='M197.77 242.77H200.758V234.801H197.77ZM203.75 242.77H206.738V236.793H203.75Z' fill='#ffb733'/>
-<path d='M197.77 242.77H200.758V234.801H197.77ZM203.75 242.77H206.738V236.793H203.75Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -37.04 110.298)'>
-<use x='246.965' y='132.464' xlink:href='#g3-106'/>
-<use x='249.221' y='132.464' xlink:href='#g3-101'/>
-<use x='252.984' y='132.464' xlink:href='#g3-58'/>
-<use x='255.337' y='132.464' xlink:href='#g0-53'/>
-<use x='259.041' y='132.464' xlink:href='#g0-51'/>
-</g>
-<path d='M85.535 255.742H88.523V247.77H85.535ZM91.516 255.742H94.504V249.762H91.516Z' fill='#80bf80'/>
-<path d='M85.535 255.742H88.523V247.77H85.535ZM91.516 255.742H94.504V249.762H91.516Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -43.882 110.334)'>
-<use x='141.573' y='145.434' xlink:href='#g3-104'/>
-<use x='145.946' y='145.434' xlink:href='#g3-111'/>
-<use x='150.18' y='145.434' xlink:href='#g3-97'/>
-<use x='154.013' y='145.434' xlink:href='#g3-114'/>
-<use x='156.905' y='145.434' xlink:href='#g3-100'/>
-<use x='161.278' y='145.434' xlink:href='#g3-58'/>
-<use x='163.63' y='145.434' xlink:href='#g0-53'/>
-<use x='167.335' y='145.434' xlink:href='#g0-51'/>
-</g>
-<path d='M130.344 255.742H133.336V247.77H130.344ZM136.324 255.742H139.313V249.762H136.324Z' fill='#399'/>
-<path d='M130.344 255.742H133.336V247.77H130.344ZM136.324 255.742H139.313V249.762H136.324Z' stroke='#000' fill='none' stroke-width='.399' stroke-miterlimit='10'/>
-<g transform='matrix(1 0 0 1 -39.227 109.855)'>
-<use x='181.727' y='145.434' xlink:href='#g3-115'/>
-<use x='184.974' y='145.434' xlink:href='#g3-121'/>
-<use x='188.876' y='145.434' xlink:href='#g3-115'/>
-<use x='192.122' y='145.434' xlink:href='#g3-58'/>
-<use x='194.474' y='145.434' xlink:href='#g0-50'/>
-<use x='198.179' y='145.434' xlink:href='#g0-51'/>
-</g>
-</g>
-</svg> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/doxyfile b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/doxyfile
deleted file mode 100644
index 55cae8b..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/doxyfile
+++ /dev/null
@@ -1,2659 +0,0 @@
-# Doxyfile 1.9.1
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a double hash (##) is considered a comment and is placed in
-# front of the TAG it is preceding.
-#
-# All text after a single hash (#) is considered a comment and will be ignored.
-# The format is:
-# TAG = value [value, ...]
-# For lists, items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (\" \").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the configuration
-# file that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
-# The default value is: UTF-8.
-
-DOXYFILE_ENCODING = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-# double-quotes, unless you are using Doxywizard) that should identify the
-# project for which the documentation is generated. This name is used in the
-# title of most generated pages and in a few other places.
-# The default value is: My Project.
-
-PROJECT_NAME = mi-malloc
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-# could be handy for archiving the generated documentation or if some version
-# control system is used.
-
-PROJECT_NUMBER = 1.8/2.1
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer a
-# quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF =
-
-# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
-# in the documentation. The maximum height of the logo should not exceed 55
-# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
-# the logo to the output directory.
-
-PROJECT_LOGO = mimalloc-logo.svg
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-# into which the generated documentation will be written. If a relative path is
-# entered, it will be relative to the location where doxygen was started. If
-# left blank the current directory will be used.
-
-OUTPUT_DIRECTORY = ..
-
-# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
-# directories (in 2 levels) under the output directory of each output format and
-# will distribute the generated files over these directories. Enabling this
-# option can be useful when feeding doxygen a huge amount of source files, where
-# putting all generated files in the same directory would otherwise causes
-# performance problems for the file system.
-# The default value is: NO.
-
-CREATE_SUBDIRS = NO
-
-# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
-# characters to appear in the names of generated files. If set to NO, non-ASCII
-# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
-# U+3044.
-# The default value is: NO.
-
-ALLOW_UNICODE_NAMES = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
-# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
-# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
-# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
-# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
-# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
-# Ukrainian and Vietnamese.
-# The default value is: English.
-
-OUTPUT_LANGUAGE = English
-
-# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all generated output in the proper direction.
-# Possible values are: None, LTR, RTL and Context.
-# The default value is: None.
-
-OUTPUT_TEXT_DIRECTION = None
-
-# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
-# descriptions after the members that are listed in the file and class
-# documentation (similar to Javadoc). Set to NO to disable this.
-# The default value is: YES.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
-# description of a member or function before the detailed description
-#
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-# The default value is: YES.
-
-REPEAT_BRIEF = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator that is
-# used to form the text in various listings. Each string in this list, if found
-# as the leading text of the brief description, will be stripped from the text
-# and the result, after processing the whole list, is used as the annotated
-# text. Otherwise, the brief description is used as-is. If left blank, the
-# following values are used ($name is automatically replaced with the name of
-# the entity):The $name class, The $name widget, The $name file, is, provides,
-# specifies, contains, represents, a, an and the.
-
-ABBREVIATE_BRIEF = "The $name class" \
- "The $name widget" \
- "The $name file" \
- is \
- provides \
- specifies \
- contains \
- represents \
- a \
- an \
- the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# doxygen will generate a detailed section even if there is only a brief
-# description.
-# The default value is: NO.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-# The default value is: NO.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
-# before files name in the file list and in the header files. If set to NO the
-# shortest path that makes the file name unique will be used
-# The default value is: YES.
-
-FULL_PATH_NAMES = YES
-
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-# Stripping is only done if one of the specified strings matches the left-hand
-# part of the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the path to
-# strip.
-#
-# Note that you can specify absolute paths here, but also relative paths, which
-# will be relative from the directory where doxygen is started.
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
-STRIP_FROM_PATH =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-# path mentioned in the documentation of a class, which tells the reader which
-# header file to include in order to use a class. If left blank only the name of
-# the header file containing the class definition is used. Otherwise one should
-# specify the list of include paths that are normally passed to the compiler
-# using the -I flag.
-
-STRIP_FROM_INC_PATH =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-# less readable) file names. This can be useful is your file systems doesn't
-# support long names like on DOS, Mac, or CD-ROM.
-# The default value is: NO.
-
-SHORT_NAMES = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-# first line (until the first dot) of a Javadoc-style comment as the brief
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
-# style comments (thus requiring an explicit @brief command for a brief
-# description.)
-# The default value is: NO.
-
-JAVADOC_AUTOBRIEF = YES
-
-# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
-# such as
-# /***************
-# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
-# Javadoc-style will behave just like regular comments and it will not be
-# interpreted by doxygen.
-# The default value is: NO.
-
-JAVADOC_BANNER = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-# line (until the first dot) of a Qt-style comment as the brief description. If
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-# requiring an explicit \brief command for a brief description.)
-# The default value is: NO.
-
-QT_AUTOBRIEF = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
-# a brief description. This used to be the default behavior. The new default is
-# to treat a multi-line C++ comment block as a detailed description. Set this
-# tag to YES if you prefer the old behavior instead.
-#
-# Note that setting this tag to YES also means that rational rose comments are
-# not recognized any more.
-# The default value is: NO.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# By default Python docstrings are displayed as preformatted text and doxygen's
-# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
-# doxygen's special commands can be used and the contents of the docstring
-# documentation blocks is shown as doxygen documentation.
-# The default value is: YES.
-
-PYTHON_DOCSTRING = YES
-
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-# documentation from any documented member that it re-implements.
-# The default value is: YES.
-
-INHERIT_DOCS = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
-# page for each member. If set to NO, the documentation of a member will be part
-# of the file/class/namespace that contains it.
-# The default value is: NO.
-
-SEPARATE_MEMBER_PAGES = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-# uses this value to replace tabs by spaces in code fragments.
-# Minimum value: 1, maximum value: 16, default value: 4.
-
-TAB_SIZE = 2
-
-# This tag can be used to specify a number of aliases that act as commands in
-# the documentation. An alias has the form:
-# name=value
-# For example adding
-# "sideeffect=@par Side Effects:\n"
-# will allow you to put the command \sideeffect (or @sideeffect) in the
-# documentation, which will result in a user-defined paragraph with heading
-# "Side Effects:". You can put \n's in the value part of an alias to insert
-# newlines (in the resulting output). You can put ^^ in the value part of an
-# alias to insert a newline as if a physical newline was in the original file.
-# When you need a literal { or } or , in the value part of an alias you have to
-# escape them by means of a backslash (\), this can lead to conflicts with the
-# commands \{ and \} for these it is advised to use the version @{ and @} or use
-# a double escape (\\{ and \\})
-
-ALIASES =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C. For
-# instance, some of the names that are used will be different. The list of all
-# members will be omitted, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-# Python sources only. Doxygen will then generate output that is more tailored
-# for that language. For instance, namespaces will be presented as packages,
-# qualified scopes will look different, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources. Doxygen will then generate output that is tailored for Fortran.
-# The default value is: NO.
-
-OPTIMIZE_FOR_FORTRAN = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for VHDL.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_VHDL = NO
-
-# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
-# sources only. Doxygen will then generate output that is more tailored for that
-# language. For instance, namespaces will be presented as modules, types will be
-# separated into more groups, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_SLICE = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given
-# extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension, and
-# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
-# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL,
-# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
-# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
-# tries to guess whether the code is fixed or free formatted code, this is the
-# default for Fortran type files). For instance to make doxygen treat .inc files
-# as Fortran files (default is PHP), and .f files as C (default is Fortran),
-# use: inc=Fortran f=C.
-#
-# Note: For files without extension you can use no_extension as a placeholder.
-#
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-# the files are not read by doxygen. When specifying no_extension you should add
-# * to the FILE_PATTERNS.
-#
-# Note see also the list of default file extension mappings.
-
-EXTENSION_MAPPING =
-
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-# according to the Markdown format, which allows for more readable
-# documentation. See https://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you can
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-# case of backward compatibilities issues.
-# The default value is: YES.
-
-MARKDOWN_SUPPORT = YES
-
-# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
-# to that level are automatically included in the table of contents, even if
-# they do not have an id attribute.
-# Note: This feature currently applies only to Markdown headings.
-# Minimum value: 0, maximum value: 99, default value: 5.
-# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
-
-TOC_INCLUDE_HEADINGS = 0
-
-# When enabled doxygen tries to link words that correspond to documented
-# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by putting a % sign in front of the word or
-# globally by setting AUTOLINK_SUPPORT to NO.
-# The default value is: YES.
-
-AUTOLINK_SUPPORT = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should set this
-# tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string);
-# versus func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-# The default value is: NO.
-
-BUILTIN_STL_SUPPORT = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-# The default value is: NO.
-
-CPP_CLI_SUPPORT = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
-# will parse them like normal C++ but will assume all classes use public instead
-# of private inheritance when no explicit protection keyword is present.
-# The default value is: NO.
-
-SIP_SUPPORT = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES will make
-# doxygen to replace the get and set methods by a property in the documentation.
-# This will only work if the methods are indeed getting or setting a simple
-# type. If this is not the case, or you want to show the methods anyway, you
-# should set this option to NO.
-# The default value is: YES.
-
-IDL_PROPERTY_SUPPORT = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-# The default value is: NO.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# If one adds a struct or class to a group and this option is enabled, then also
-# any nested class or struct is added to the same group. By default this option
-# is disabled and one has to add nested compounds explicitly via \ingroup.
-# The default value is: NO.
-
-GROUP_NESTED_COMPOUNDS = NO
-
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
-# (for instance a group of public functions) to be put as a subgroup of that
-# type (e.g. under the Public Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
-# The default value is: YES.
-
-SUBGROUPING = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-# are shown inside the group in which they are included (e.g. using \ingroup)
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-# and RTF).
-#
-# Note that this feature does not work in combination with
-# SEPARATE_MEMBER_PAGES.
-# The default value is: NO.
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-# with only public data fields or simple typedef fields will be shown inline in
-# the documentation of the scope in which they are defined (i.e. file,
-# namespace, or group documentation), provided this scope is documented. If set
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
-# Man pages) or section (for LaTeX and RTF).
-# The default value is: NO.
-
-INLINE_SIMPLE_STRUCTS = YES
-
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-# enum is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically be
-# useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-# The default value is: NO.
-
-TYPEDEF_HIDES_STRUCT = YES
-
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-# cache is used to resolve symbols given their name and scope. Since this can be
-# an expensive process and often the same symbol appears multiple times in the
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-# doxygen will become slower. If the cache is too large, memory is wasted. The
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-# symbols. At the end of a run doxygen will report the cache usage and suggest
-# the optimal cache size from a speed point of view.
-# Minimum value: 0, maximum value: 9, default value: 0.
-
-LOOKUP_CACHE_SIZE = 0
-
-# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use
-# during processing. When set to 0 doxygen will based this on the number of
-# cores available in the system. You can set it explicitly to a value larger
-# than 0 to get more control over the balance between CPU load and processing
-# speed. At this moment only the input processing can be done using multiple
-# threads. Since this is still an experimental feature the default is set to 1,
-# which efficively disables parallel processing. Please report any issues you
-# encounter. Generating dot graphs in parallel is controlled by the
-# DOT_NUM_THREADS setting.
-# Minimum value: 0, maximum value: 32, default value: 1.
-
-NUM_PROC_THREADS = 1
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
-# documentation are documented, even if no documentation was available. Private
-# class members and static file members will be hidden unless the
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-# Note: This will also disable the warnings about undocumented members that are
-# normally produced when WARNINGS is set to YES.
-# The default value is: NO.
-
-EXTRACT_ALL = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
-# be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIVATE = NO
-
-# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
-# methods of a class will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIV_VIRTUAL = NO
-
-# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
-# scope will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PACKAGE = NO
-
-# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
-# included in the documentation.
-# The default value is: NO.
-
-EXTRACT_STATIC = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO,
-# only classes defined in header files are included. Does not have any effect
-# for Java sources.
-# The default value is: YES.
-
-EXTRACT_LOCAL_CLASSES = YES
-
-# This flag is only useful for Objective-C code. If set to YES, local methods,
-# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO, only methods in the interface are
-# included.
-# The default value is: NO.
-
-EXTRACT_LOCAL_METHODS = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
-# the file that contains the anonymous namespace. By default anonymous namespace
-# are hidden.
-# The default value is: NO.
-
-EXTRACT_ANON_NSPACES = NO
-
-# If this flag is set to YES, the name of an unnamed parameter in a declaration
-# will be determined by the corresponding definition. By default unnamed
-# parameters remain unnamed in the output.
-# The default value is: YES.
-
-RESOLVE_UNNAMED_PARAMS = YES
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-# undocumented members inside documented classes or files. If set to NO these
-# members will be included in the various overviews, but no documentation
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_MEMBERS = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO, these classes will be included in the various overviews. This option
-# has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_CLASSES = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# declarations. If set to NO, these declarations will be included in the
-# documentation.
-# The default value is: NO.
-
-HIDE_FRIEND_COMPOUNDS = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO, these
-# blocks will be appended to the function's detailed documentation block.
-# The default value is: NO.
-
-HIDE_IN_BODY_DOCS = NO
-
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
-# \internal command is included. If the tag is set to NO then the documentation
-# will be excluded. Set it to YES to include the internal documentation.
-# The default value is: NO.
-
-INTERNAL_DOCS = NO
-
-# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
-# able to match the capabilities of the underlying filesystem. In case the
-# filesystem is case sensitive (i.e. it supports files in the same directory
-# whose names only differ in casing), the option must be set to YES to properly
-# deal with such files in case they appear in the input. For filesystems that
-# are not case sensitive the option should be be set to NO to properly deal with
-# output files written for symbols that only differ in casing, such as for two
-# classes, one named CLASS and the other named Class, and to also support
-# references to files without having to specify the exact matching casing. On
-# Windows (including Cygwin) and MacOS, users should typically set this option
-# to NO, whereas on Linux or other Unix flavors it should typically be set to
-# YES.
-# The default value is: system dependent.
-
-CASE_SENSE_NAMES = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES, the
-# scope will be hidden.
-# The default value is: NO.
-
-HIDE_SCOPE_NAMES = NO
-
-# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-# the files that are included by a file in the documentation of that file.
-# The default value is: YES.
-
-SHOW_INCLUDE_FILES = YES
-
-# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
-# grouped member an include statement to the documentation, telling the reader
-# which file to include in order to use the member.
-# The default value is: NO.
-
-SHOW_GROUPED_MEMB_INC = NO
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-# files with double quotes in the documentation rather than with sharp brackets.
-# The default value is: NO.
-
-FORCE_LOCAL_INCLUDES = NO
-
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-# documentation for inline members.
-# The default value is: YES.
-
-INLINE_INFO = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order.
-# The default value is: YES.
-
-SORT_MEMBER_DOCS = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order. Note that
-# this will also influence the order of the classes in the class list.
-# The default value is: NO.
-
-SORT_BRIEF_DOCS = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-# (brief and detailed) documentation of class members so that constructors and
-# destructors are listed first. If set to NO the constructors will appear in the
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-# member documentation.
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-# detailed member documentation.
-# The default value is: NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-# of group names into alphabetical order. If set to NO the group names will
-# appear in their defined order.
-# The default value is: NO.
-
-SORT_GROUP_NAMES = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-# fully-qualified names, including namespaces. If set to NO, the class list will
-# be sorted only by class name, not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the alphabetical
-# list.
-# The default value is: NO.
-
-SORT_BY_SCOPE_NAME = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-# type resolution of all parameters of a function it will reject a match between
-# the prototype and the implementation of a member function even if there is
-# only one candidate or it is obvious which candidate to choose by doing a
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-# accept a match between prototype and implementation in such cases.
-# The default value is: NO.
-
-STRICT_PROTO_MATCHING = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
-# list. This list is created by putting \todo commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TODOLIST = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
-# list. This list is created by putting \test commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TESTLIST = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
-# list. This list is created by putting \bug commands in the documentation.
-# The default value is: YES.
-
-GENERATE_BUGLIST = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
-# the deprecated list. This list is created by putting \deprecated commands in
-# the documentation.
-# The default value is: YES.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
-# ... \endcond blocks.
-
-ENABLED_SECTIONS =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-# initial value of a variable or macro / define can have for it to appear in the
-# documentation. If the initializer consists of more lines than specified here
-# it will be hidden. Use a value of 0 to hide initializers completely. The
-# appearance of the value of individual variables and macros / defines can be
-# controlled using \showinitializer or \hideinitializer command in the
-# documentation regardless of this setting.
-# Minimum value: 0, maximum value: 10000, default value: 30.
-
-MAX_INITIALIZER_LINES = 0
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES, the
-# list will mention the files that were used to generate the documentation.
-# The default value is: YES.
-
-SHOW_USED_FILES = NO
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-# will remove the Files entry from the Quick Index and from the Folder Tree View
-# (if specified).
-# The default value is: YES.
-
-SHOW_FILES = NO
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-# page. This will remove the Namespaces entry from the Quick Index and from the
-# Folder Tree View (if specified).
-# The default value is: YES.
-
-SHOW_NAMESPACES = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command command input-file, where command is the value of the
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-# by doxygen. Whatever the program writes to standard output is used as the file
-# version. For an example see the documentation.
-
-FILE_VERSION_FILTER =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option. You can
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
-# will be used as the name of the layout file.
-#
-# Note that if you run doxygen from a directory containing a file called
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-# tag is left empty.
-
-LAYOUT_FILE =
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-# the reference definitions. This must be a list of .bib files. The .bib
-# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
-# For LaTeX the style of the bibliography can be controlled using
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. See also \cite for info how to create references.
-
-CITE_BIB_FILES =
-
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated to
-# standard output by doxygen. If QUIET is set to YES this implies that the
-# messages are off.
-# The default value is: NO.
-
-QUIET = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
-# this implies that the warnings are on.
-#
-# Tip: Turn warnings on while writing the documentation.
-# The default value is: YES.
-
-WARNINGS = YES
-
-# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: YES.
-
-WARN_IF_UNDOCUMENTED = YES
-
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some parameters
-# in a documented function, or documenting parameters that don't exist or using
-# markup commands wrongly.
-# The default value is: YES.
-
-WARN_IF_DOC_ERROR = YES
-
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-# are documented, but have no documentation for their parameters or return
-# value. If set to NO, doxygen will only warn about wrong or incomplete
-# parameter documentation, but not about the absence of documentation. If
-# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
-# The default value is: NO.
-
-WARN_NO_PARAMDOC = NO
-
-# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
-# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
-# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
-# at the end of the doxygen process doxygen will return with a non-zero status.
-# Possible values are: NO, YES and FAIL_ON_WARNINGS.
-# The default value is: NO.
-
-WARN_AS_ERROR = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
-# can produce. The string should contain the $file, $line, and $text tags, which
-# will be replaced by the file and line number from which the warning originated
-# and the warning text. Optionally the format may contain $version, which will
-# be replaced by the version of the file (if it could be obtained via
-# FILE_VERSION_FILTER)
-# The default value is: $file:$line: $text.
-
-WARN_FORMAT = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
-# messages should be written. If left blank the output is written to standard
-# error (stderr).
-
-WARN_LOGFILE =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag is used to specify the files and/or directories that contain
-# documented source files. You may enter file names like myfile.cpp or
-# directories like /usr/src/myproject. Separate the files or directories with
-# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
-# Note: If this tag is empty the current directory is searched.
-
-INPUT = mimalloc-doc.h
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-# documentation (see:
-# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
-# The default value is: UTF-8.
-
-INPUT_ENCODING = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# read by doxygen.
-#
-# Note the list of default checked file patterns might differ from the list of
-# default file extension mappings.
-#
-# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
-# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
-# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
-# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),
-# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl,
-# *.ucf, *.qsf and *.ice.
-
-FILE_PATTERNS = *.c \
- *.cc \
- *.cxx \
- *.cpp \
- *.c++ \
- *.java \
- *.ii \
- *.ixx \
- *.ipp \
- *.i++ \
- *.inl \
- *.idl \
- *.ddl \
- *.odl \
- *.h \
- *.hh \
- *.hxx \
- *.hpp \
- *.h++ \
- *.cs \
- *.d \
- *.php \
- *.php4 \
- *.php5 \
- *.phtml \
- *.inc \
- *.m \
- *.markdown \
- *.md \
- *.mm \
- *.dox \
- *.py \
- *.pyw \
- *.f90 \
- *.f95 \
- *.f03 \
- *.f08 \
- *.f \
- *.for \
- *.tcl \
- *.vhd \
- *.vhdl \
- *.ucf \
- *.qsf
-
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
-# be searched for input files as well.
-# The default value is: NO.
-
-RECURSIVE = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-#
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE =
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-# The default value is: NO.
-
-EXCLUDE_SYMLINKS = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories for example use the pattern */test/*
-
-EXCLUDE_PATTERNS =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories use the pattern */test/*
-
-EXCLUDE_SYMBOLS =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
-# that contain example code fragments that are included (see the \include
-# command).
-
-EXAMPLE_PATH =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank all
-# files are included.
-
-EXAMPLE_PATTERNS = *
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude commands
-# irrespective of the value of the RECURSIVE tag.
-# The default value is: NO.
-
-EXAMPLE_RECURSIVE = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or directories
-# that contain images that are to be included in the documentation (see the
-# \image command).
-
-IMAGE_PATH =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-# name of an input file. Doxygen will then use the output that the filter
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
-# will be ignored.
-#
-# Note that the filter must not add or remove lines; it is applied before the
-# code is scanned, but not when the output code is generated. If lines are added
-# or removed, the anchors will not be placed correctly.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-INPUT_FILTER =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form: pattern=filter
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-# patterns match the file name, INPUT_FILTER is applied.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-FILTER_PATTERNS =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will also be used to filter the input files that are used for
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-# The default value is: NO.
-
-FILTER_SOURCE_FILES = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-# it is also possible to disable source filtering for a specific pattern using
-# *.ext= (so without naming a filter).
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
-FILTER_SOURCE_PATTERNS =
-
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page
-# (index.html). This can be useful if you have a project on for instance GitHub
-# and want to reuse the introduction page also for the doxygen output.
-
-USE_MDFILE_AS_MAINPAGE =
-
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-# generated. Documented entities will be cross-referenced with these sources.
-#
-# Note: To get rid of all source code in the generated output, make sure that
-# also VERBATIM_HEADERS is set to NO.
-# The default value is: NO.
-
-SOURCE_BROWSER = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
-# classes and enums directly into the documentation.
-# The default value is: NO.
-
-INLINE_SOURCES = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-# special comment blocks from generated source code fragments. Normal C, C++ and
-# Fortran comments will always remain visible.
-# The default value is: YES.
-
-STRIP_CODE_COMMENTS = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# entity all documented functions referencing it will be listed.
-# The default value is: NO.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
-# all documented entities called/used by that function will be listed.
-# The default value is: NO.
-
-REFERENCES_RELATION = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES then the hyperlinks from functions in REFERENCES_RELATION and
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-# link to the documentation.
-# The default value is: YES.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-# source code will show a tooltip with additional information such as prototype,
-# brief description and links to the definition and documentation. Since this
-# will make the HTML file larger and loading of large files a bit slower, you
-# can opt to disable this feature.
-# The default value is: YES.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-SOURCE_TOOLTIPS = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code will
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
-# source browser. The htags tool is part of GNU's global source tagging system
-# (see https://www.gnu.org/software/global/global.html). You will need version
-# 4.8.6 or higher.
-#
-# To use it do the following:
-# - Install the latest version of global
-# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
-# - Make sure the INPUT points to the root of the source tree
-# - Run doxygen as normal
-#
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
-# tools must be available from the command line (i.e. in the search path).
-#
-# The result: instead of the source browser generated by doxygen, the links to
-# source code will now point to the output of htags.
-# The default value is: NO.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-USE_HTAGS = NO
-
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-# verbatim copy of the header file for each class for which an include is
-# specified. Set to NO to disable this.
-# See also: Section \class.
-# The default value is: YES.
-
-VERBATIM_HEADERS = YES
-
-# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
-# clang parser (see:
-# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
-# performance. This can be particularly helpful with template rich C++ code for
-# which doxygen's built-in parser lacks the necessary type information.
-# Note: The availability of this option depends on whether or not doxygen was
-# generated with the -Duse_libclang=ON option for CMake.
-# The default value is: NO.
-
-CLANG_ASSISTED_PARSING = NO
-
-# If clang assisted parsing is enabled and the CLANG_ADD_INC_PATHS tag is set to
-# YES then doxygen will add the directory of each input to the include path.
-# The default value is: YES.
-
-CLANG_ADD_INC_PATHS = YES
-
-# If clang assisted parsing is enabled you can provide the compiler with command
-# line options that you would normally use when invoking the compiler. Note that
-# the include paths will already be set by doxygen for the files and directories
-# specified with INPUT and INCLUDE_PATH.
-# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
-
-CLANG_OPTIONS =
-
-# If clang assisted parsing is enabled you can provide the clang parser with the
-# path to the directory containing a file called compile_commands.json. This
-# file is the compilation database (see:
-# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
-# options used when the source files were built. This is equivalent to
-# specifying the -p option to a clang tool, such as clang-check. These options
-# will then be passed to the parser. Any options specified with CLANG_OPTIONS
-# will be added as well.
-# Note: The availability of this option depends on whether or not doxygen was
-# generated with the -Duse_libclang=ON option for CMake.
-
-CLANG_DATABASE_PATH =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-# compounds will be generated. Enable this if the project contains a lot of
-# classes, structs, unions or interfaces.
-# The default value is: YES.
-
-ALPHABETICAL_INDEX = YES
-
-# In case all classes in a project start with a common prefix, all classes will
-# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
-# can be used to specify a prefix (or a list of prefixes) that should be ignored
-# while generating the index headers.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-IGNORE_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
-# The default value is: YES.
-
-GENERATE_HTML = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_OUTPUT = docs
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-# generated HTML page (for example: .htm, .php, .asp).
-# The default value is: .html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FILE_EXTENSION = .html
-
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-# each generated HTML page. If the tag is left blank doxygen will generate a
-# standard header.
-#
-# To get valid HTML the header file that includes any scripts and style sheets
-# that doxygen needs, which is dependent on the configuration options used (e.g.
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-# default header using
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
-# YourConfigFile
-# and then modify the file new_header.html. See also section "Doxygen usage"
-# for information on how to generate the default header that doxygen normally
-# uses.
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. For a description
-# of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_HEADER =
-
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-# generated HTML page. If the tag is left blank doxygen will generate a standard
-# footer. See HTML_HEADER for more information on how to generate a default
-# footer and what special commands can be used inside the footer. See also
-# section "Doxygen usage" for information on how to generate the default footer
-# that doxygen normally uses.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FOOTER =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
-# the HTML output. If left blank doxygen will generate a default style sheet.
-# See also section "Doxygen usage" for information on how to generate the style
-# sheet that doxygen normally uses.
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
-# obsolete.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_STYLESHEET =
-
-# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# cascading style sheets that are included after the standard style sheets
-# created by doxygen. Using this option one can overrule certain style aspects.
-# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list). For an example see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_STYLESHEET = mimalloc-doxygen.css
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-# files will be copied as-is; there are no commands or markers available.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_FILES =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the style sheet and background images according to
-# this color. Hue is specified as an angle on a colorwheel, see
-# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-# purple, and 360 is red again.
-# Minimum value: 0, maximum value: 359, default value: 220.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_HUE = 189
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-# in the HTML output. For a value of 0 the output will use grayscales only. A
-# value of 255 will produce the most vivid colors.
-# Minimum value: 0, maximum value: 255, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_SAT = 12
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-# luminance component of the colors in the HTML output. Values below 100
-# gradually make the output lighter, whereas values above 100 make the output
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-# change the gamma.
-# Minimum value: 40, maximum value: 240, default value: 80.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_GAMMA = 240
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to YES can help to show when doxygen was last run and thus if the
-# documentation is up to date.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP = NO
-
-# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
-# documentation will contain a main index with vertical navigation menus that
-# are dynamically created via JavaScript. If disabled, the navigation index will
-# consists of multiple levels of tabs that are statically embedded in every HTML
-# page. Disable this option to support browsers that do not have JavaScript,
-# like the Qt help browser.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_MENUS = NO
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_SECTIONS = NO
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-# shown in the various tree structured indices initially; the user can expand
-# and collapse entries dynamically later on. Doxygen will expand the tree to
-# such a level that at most the specified number of entries are visible (unless
-# a fully collapsed tree already exceeds this amount). So setting the number of
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
-# representing an infinite number of entries and will result in a full expanded
-# tree by default.
-# Minimum value: 0, maximum value: 9999, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_INDEX_NUM_ENTRIES = 100
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
-# generated that can be used as input for Apple's Xcode 3 integrated development
-# environment (see:
-# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
-# create a documentation set, doxygen will generate a Makefile in the HTML
-# output directory. Running make will produce the docset in that directory and
-# running make install will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
-# genXcode/_index.html for more information.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_DOCSET = NO
-
-# This tag determines the name of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# The default value is: Doxygen generated docs.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDNAME = "Doxygen generated docs"
-
-# This tag specifies a string that should uniquely identify the documentation
-# set bundle. This should be a reverse domain-name style string, e.g.
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_BUNDLE_ID = org.doxygen.Project
-
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-# The default value is: org.doxygen.Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_ID = org.doxygen.Publisher
-
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-# The default value is: Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_NAME = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-# (see:
-# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows.
-#
-# The HTML Help Workshop contains a compiler that can convert all HTML output
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-# files are now used as the Windows 98 help format, and will replace the old
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
-# HTML files also contain an index, a table of contents, and you can search for
-# words in the documentation. The HTML workshop also contains a viewer for
-# compressed HTML files.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_HTMLHELP = NO
-
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
-# file. You can add a path in front of the file if the result should not be
-# written to the html output directory.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_FILE =
-
-# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler (hhc.exe). If non-empty,
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
-# The file has to be specified with full path.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-HHC_LOCATION =
-
-# The GENERATE_CHI flag controls if a separate .chi index file is generated
-# (YES) or that it should be included in the main .chm file (NO).
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-GENERATE_CHI = NO
-
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
-# and project file content.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_INDEX_ENCODING =
-
-# The BINARY_TOC flag controls whether a binary table of contents is generated
-# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
-# enables the Previous and Next buttons.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-BINARY_TOC = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
-# the table of contents of the HTML help documentation and to the tree view.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-TOC_EXPAND = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-# (.qch) of the generated HTML documentation.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_QHP = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-# the file name of the resulting .qch file. The path specified is relative to
-# the HTML output folder.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QCH_FILE =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-# Project output. For more information please see Qt Help Project / Namespace
-# (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_NAMESPACE = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-# Help Project output. For more information please see Qt Help Project / Virtual
-# Folders (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
-# The default value is: doc.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_VIRTUAL_FOLDER = doc
-
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-# filter to add. For more information please see Qt Help Project / Custom
-# Filters (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_NAME =
-
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see Qt Help Project / Custom
-# Filters (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_ATTRS =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_SECT_FILTER_ATTRS =
-
-# The QHG_LOCATION tag can be used to specify the location (absolute path
-# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
-# run qhelpgenerator on the generated .qhp file.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHG_LOCATION =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-# generated, together with the HTML files, they form an Eclipse help plugin. To
-# install this plugin and make it available under the help contents menu in
-# Eclipse, the contents of the directory containing the HTML and XML files needs
-# to be copied into the plugins directory of eclipse. The name of the directory
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-# After copying Eclipse needs to be restarted before the help appears.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_ECLIPSEHELP = NO
-
-# A unique identifier for the Eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have this
-# name. Each documentation set should have its own identifier.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
-ECLIPSE_DOC_ID = org.doxygen.Project
-
-# If you want full control over the layout of the generated HTML pages it might
-# be necessary to disable the index and replace it with your own. The
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-# of each HTML page. A value of NO enables the index and the value YES disables
-# it. Since the tabs in the index contain the same information as the navigation
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-DISABLE_INDEX = YES
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information. If the tag
-# value is set to YES, a side panel will be generated containing a tree-like
-# index structure (just like the one that is generated for HTML Help). For this
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
-# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
-# further fine-tune the look of the index. As an example, the default style
-# sheet generated by doxygen has an example that shows how to put an image at
-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
-# the same information as the tab index, you could consider setting
-# DISABLE_INDEX to YES when enabling this option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_TREEVIEW = YES
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-# doxygen will group on one line in the generated HTML documentation.
-#
-# Note that a value of 0 will completely suppress the enum values from appearing
-# in the overview section.
-# Minimum value: 0, maximum value: 20, default value: 4.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-ENUM_VALUES_PER_LINE = 4
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-# to set the initial width (in pixels) of the frame in which the tree is shown.
-# Minimum value: 0, maximum value: 1500, default value: 250.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-TREEVIEW_WIDTH = 180
-
-# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
-# external symbols imported via tag files in a separate window.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-EXT_LINKS_IN_WINDOW = NO
-
-# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
-# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
-# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
-# the HTML output. These images will generally look nicer at scaled resolutions.
-# Possible values are: png (the default) and svg (looks nicer but requires the
-# pdf2svg or inkscape tool).
-# The default value is: png.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FORMULA_FORMAT = png
-
-# Use this tag to change the font size of LaTeX formulas included as images in
-# the HTML documentation. When you change the font size after a successful
-# doxygen run you need to manually remove any form_*.png images from the HTML
-# output directory to force them to be regenerated.
-# Minimum value: 8, maximum value: 50, default value: 10.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_FONTSIZE = 10
-
-# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT = YES
-
-# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
-# to create new LaTeX commands to be used in formulas as building blocks. See
-# the section "Including formulas" for details.
-
-FORMULA_MACROFILE =
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-# https://www.mathjax.org) which uses client side JavaScript for the rendering
-# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
-# installed or if you want to formulas look prettier in the HTML output. When
-# enabled you may also need to install MathJax separately and configure the path
-# to it using the MATHJAX_RELPATH option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-USE_MATHJAX = NO
-
-# When MathJax is enabled you can set the default output format to be used for
-# the MathJax output. See the MathJax site (see:
-# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details.
-# Possible values are: HTML-CSS (which is slower, but has the best
-# compatibility), NativeMML (i.e. MathML) and SVG.
-# The default value is: HTML-CSS.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_FORMAT = HTML-CSS
-
-# When MathJax is enabled you need to specify the location relative to the HTML
-# output directory using the MATHJAX_RELPATH option. The destination directory
-# should contain the MathJax.js script. For instance, if the mathjax directory
-# is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-# Content Delivery Network so you can quickly see the result without installing
-# MathJax. However, it is strongly recommended to install a local copy of
-# MathJax from https://www.mathjax.org before deployment.
-# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-# extension names that should be enabled during MathJax rendering. For example
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_EXTENSIONS =
-
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see:
-# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
-# example see the documentation.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_CODEFILE =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-# the HTML output. The underlying search engine uses javascript and DHTML and
-# should work on any modern browser. Note that when using HTML help
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-# there is already a search function so this one should typically be disabled.
-# For large projects the javascript based search engine can be slow, then
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-# search using the keyboard; to jump to the search box use <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE = YES
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using JavaScript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see:
-# https://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see:
-# https://xapian.org/). See the section "External Indexing and Searching" for
-# details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when not enabling USE_PDFLATEX the default is latex when enabling
-# USE_PDFLATEX the default is pdflatex and when in the later case latex is
-# chosen this is overwritten by pdflatex. For specific output languages the
-# default can have been set differently, this depends on the implementation of
-# the output language.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# Note: This tag is used in the Makefile / make.bat.
-# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
-# (.tex).
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME = makeindex
-
-# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
-# generate index for LaTeX. In case there is no backslash (\) as first character
-# it will be automatically added in the LaTeX code.
-# Note: This tag is used in the generated output file (.tex).
-# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
-# The default value is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_MAKEINDEX_CMD = \makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE = a4
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. The package can be specified just
-# by its name or with the correct syntax as to be used with the LaTeX
-# \usepackage command. To get the times font for instance you can specify :
-# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
-# To use the option intlimits with the amsmath package you can specify:
-# EXTRA_PACKAGES=[intlimits]{amsmath}
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
-# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
-# files. Set this option to YES, to get a higher quality PDF documentation.
-#
-# See also section LATEX_CMD_NAME for selecting the engine.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE = plain
-
-# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_TIMESTAMP = NO
-
-# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
-# path from which the emoji images will be read. If a relative path is entered,
-# it will be relative to the LATEX_OUTPUT directory. If left blank the
-# LATEX_OUTPUT directory will be used.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EMOJI_DIRECTORY =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# configuration file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's configuration file. A template extensions file can be
-# generated using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE =
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING = YES
-
-# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
-# namespace members in file scope as well, matching the HTML output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_NS_MEMB_FILE_SCOPE = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-# front of it.
-# The default directory is: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
-# the structure of the code including all documentation. Note that this feature
-# is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to Sqlite3 output
-#---------------------------------------------------------------------------
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF = NO
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS = YES
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH = YES
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH = YES
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS = YES
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag UML_LOOK is set to YES.
-
-UML_LIMIT_NUM_FIELDS = 10
-
-# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
-# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
-# tag is set to YES, doxygen will add type and arguments for attributes and
-# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
-# will not generate fields with class member information in the UML graphs. The
-# class diagrams will look similar to the default class diagrams but using UML
-# notation for the relationships.
-# Possible values are: NO, YES and NONE.
-# The default value is: NO.
-# This tag requires that the tag UML_LOOK is set to YES.
-
-DOT_UML_DETAILS = NO
-
-# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
-# to display on a single line. If the actual line length exceeds this threshold
-# significantly it will wrapped across multiple lines. Some heuristics are apply
-# to avoid ugly line breaks.
-# Minimum value: 0, maximum value: 1000, default value: 17.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_WRAP_THRESHOLD = 17
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH = YES
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH = YES
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command. Disabling a call graph can be
-# accomplished by means of the command \hidecallgraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command. Disabling a caller graph can be
-# accomplished by means of the command \hidecallergraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY = YES
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. For an explanation of the image formats see the section
-# output formats in the documentation of the dot tool (Graphviz (see:
-# http://www.graphviz.org/)).
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
-# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
-# png:gdiplus:gdiplus.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH =
-
-# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
-# configuration file for plantuml.
-
-PLANTUML_CFG_FILE =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
-# files that are used to generate the various graphs.
-#
-# Note: This setting is not only used for dot files but also for msc and
-# plantuml temporary files.
-# The default value is: YES.
-
-DOT_CLEANUP = YES
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/ds-logo.jpg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/ds-logo.jpg
deleted file mode 100644
index c9abb1a..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/ds-logo.jpg
+++ /dev/null
Binary files differ
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/ds-logo.png b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/ds-logo.png
deleted file mode 100644
index 93b84e4..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/ds-logo.png
+++ /dev/null
Binary files differ
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-doc.h b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-doc.h
deleted file mode 100644
index 3e75243..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-doc.h
+++ /dev/null
@@ -1,1281 +0,0 @@
-/* ----------------------------------------------------------------------------
-Copyright (c) 2018-2021, Microsoft Research, Daan Leijen
-This is free software; you can redistribute it and/or modify it under the
-terms of the MIT license. A copy of the license can be found in the file
-"LICENSE" at the root of this distribution.
------------------------------------------------------------------------------*/
-
-#error "documentation file only!"
-
-
-/*! \mainpage
-
-This is the API documentation of the
-[mimalloc](https://github.com/microsoft/mimalloc) allocator
-(pronounced "me-malloc") -- a
-general purpose allocator with excellent [performance](bench.html)
-characteristics. Initially
-developed by Daan Leijen for the run-time systems of the
-[Koka](https://github.com/koka-lang/koka) and [Lean](https://github.com/leanprover/lean) languages.
-
-It is a drop-in replacement for `malloc` and can be used in other programs
-without code changes, for example, on Unix you can use it as:
-```
-> LD_PRELOAD=/usr/bin/libmimalloc.so myprogram
-```
-
-Notable aspects of the design include:
-
-- __small and consistent__: the library is about 8k LOC using simple and
- consistent data structures. This makes it very suitable
- to integrate and adapt in other projects. For runtime systems it
- provides hooks for a monotonic _heartbeat_ and deferred freeing (for
- bounded worst-case times with reference counting).
-- __free list sharding__: instead of one big free list (per size class) we have
- many smaller lists per "mimalloc page" which reduces fragmentation and
- increases locality --
- things that are allocated close in time get allocated close in memory.
- (A mimalloc page contains blocks of one size class and is usually 64KiB on a 64-bit system).
-- __free list multi-sharding__: the big idea! Not only do we shard the free list
- per mimalloc page, but for each page we have multiple free lists. In particular, there
- is one list for thread-local `free` operations, and another one for concurrent `free`
- operations. Free-ing from another thread can now be a single CAS without needing
- sophisticated coordination between threads. Since there will be
- thousands of separate free lists, contention is naturally distributed over the heap,
- and the chance of contending on a single location will be low -- this is quite
- similar to randomized algorithms like skip lists where adding
- a random oracle removes the need for a more complex algorithm.
-- __eager page reset__: when a "page" becomes empty (with increased chance
- due to free list sharding) the memory is marked to the OS as unused ("reset" or "purged")
- reducing (real) memory pressure and fragmentation, especially in long running
- programs.
-- __secure__: _mimalloc_ can be build in secure mode, adding guard pages,
- randomized allocation, encrypted free lists, etc. to protect against various
- heap vulnerabilities. The performance penalty is only around 5% on average
- over our benchmarks.
-- __first-class heaps__: efficiently create and use multiple heaps to allocate across different regions.
- A heap can be destroyed at once instead of deallocating each object separately.
-- __bounded__: it does not suffer from _blowup_ \[1\], has bounded worst-case allocation
- times (_wcat_), bounded space overhead (~0.2% meta-data, with low internal fragmentation),
- and has no internal points of contention using only atomic operations.
-- __fast__: In our benchmarks (see [below](#performance)),
- _mimalloc_ outperforms all other leading allocators (_jemalloc_, _tcmalloc_, _Hoard_, etc),
- and usually uses less memory (up to 25% more in the worst case). A nice property
- is that it does consistently well over a wide range of benchmarks.
-
-You can read more on the design of _mimalloc_ in the
-[technical report](https://www.microsoft.com/en-us/research/publication/mimalloc-free-list-sharding-in-action)
-which also has detailed benchmark results.
-
-
-Further information:
-
-- \ref build
-- \ref using
-- \ref environment
-- \ref overrides
-- \ref bench
-- \ref malloc
-- \ref extended
-- \ref aligned
-- \ref heap
-- \ref typed
-- \ref analysis
-- \ref options
-- \ref posix
-- \ref cpp
-
-*/
-
-
-/// \defgroup malloc Basic Allocation
-/// The basic allocation interface.
-/// \{
-
-
-/// Free previously allocated memory.
-/// The pointer `p` must have been allocated before (or be \a NULL).
-/// @param p pointer to free, or \a NULL.
-void mi_free(void* p);
-
-/// Allocate \a size bytes.
-/// @param size number of bytes to allocate.
-/// @returns pointer to the allocated memory or \a NULL if out of memory.
-/// Returns a unique pointer if called with \a size 0.
-void* mi_malloc(size_t size);
-
-/// Allocate zero-initialized `size` bytes.
-/// @param size The size in bytes.
-/// @returns Pointer to newly allocated zero initialized memory,
-/// or \a NULL if out of memory.
-void* mi_zalloc(size_t size);
-
-/// Allocate zero-initialized \a count elements of \a size bytes.
-/// @param count number of elements.
-/// @param size size of each element.
-/// @returns pointer to the allocated memory
-/// of \a size*\a count bytes, or \a NULL if either out of memory
-/// or when `count*size` overflows.
-///
-/// Returns a unique pointer if called with either \a size or \a count of 0.
-/// @see mi_zalloc()
-void* mi_calloc(size_t count, size_t size);
-
-/// Re-allocate memory to \a newsize bytes.
-/// @param p pointer to previously allocated memory (or \a NULL).
-/// @param newsize the new required size in bytes.
-/// @returns pointer to the re-allocated memory
-/// of \a newsize bytes, or \a NULL if out of memory.
-/// If \a NULL is returned, the pointer \a p is not freed.
-/// Otherwise the original pointer is either freed or returned
-/// as the reallocated result (in case it fits in-place with the
-/// new size). If the pointer \a p is \a NULL, it behaves as
-/// \a mi_malloc(\a newsize). If \a newsize is larger than the
-/// original \a size allocated for \a p, the bytes after \a size
-/// are uninitialized.
-void* mi_realloc(void* p, size_t newsize);
-
-/// Re-allocate memory to \a count elements of \a size bytes, with extra memory initialized to zero.
-/// @param p Pointer to a previously allocated block (or \a NULL).
-/// @param count The number of elements.
-/// @param size The size of each element.
-/// @returns A pointer to a re-allocated block of \a count * \a size bytes, or \a NULL
-/// if out of memory or if \a count * \a size overflows.
-///
-/// If there is no overflow, it behaves exactly like `mi_rezalloc(p,count*size)`.
-/// @see mi_reallocn()
-/// @see [recallocarray()](http://man.openbsd.org/reallocarray) (on BSD).
-void* mi_recalloc(void* p, size_t count, size_t size);
-
-/// Try to re-allocate memory to \a newsize bytes _in place_.
-/// @param p pointer to previously allocated memory (or \a NULL).
-/// @param newsize the new required size in bytes.
-/// @returns pointer to the re-allocated memory
-/// of \a newsize bytes (always equal to \a p),
-/// or \a NULL if either out of memory or if
-/// the memory could not be expanded in place.
-/// If \a NULL is returned, the pointer \a p is not freed.
-/// Otherwise the original pointer is returned
-/// as the reallocated result since it fits in-place with the
-/// new size. If \a newsize is larger than the
-/// original \a size allocated for \a p, the bytes after \a size
-/// are uninitialized.
-void* mi_expand(void* p, size_t newsize);
-
-/// Allocate \a count elements of \a size bytes.
-/// @param count The number of elements.
-/// @param size The size of each element.
-/// @returns A pointer to a block of \a count * \a size bytes, or \a NULL
-/// if out of memory or if \a count * \a size overflows.
-///
-/// If there is no overflow, it behaves exactly like `mi_malloc(p,count*size)`.
-/// @see mi_calloc()
-/// @see mi_zallocn()
-void* mi_mallocn(size_t count, size_t size);
-
-/// Re-allocate memory to \a count elements of \a size bytes.
-/// @param p Pointer to a previously allocated block (or \a NULL).
-/// @param count The number of elements.
-/// @param size The size of each element.
-/// @returns A pointer to a re-allocated block of \a count * \a size bytes, or \a NULL
-/// if out of memory or if \a count * \a size overflows.
-///
-/// If there is no overflow, it behaves exactly like `mi_realloc(p,count*size)`.
-/// @see [reallocarray()](<http://man.openbsd.org/reallocarray>) (on BSD)
-void* mi_reallocn(void* p, size_t count, size_t size);
-
-/// Re-allocate memory to \a newsize bytes,
-/// @param p pointer to previously allocated memory (or \a NULL).
-/// @param newsize the new required size in bytes.
-/// @returns pointer to the re-allocated memory
-/// of \a newsize bytes, or \a NULL if out of memory.
-///
-/// In contrast to mi_realloc(), if \a NULL is returned, the original pointer
-/// \a p is freed (if it was not \a NULL itself).
-/// Otherwise the original pointer is either freed or returned
-/// as the reallocated result (in case it fits in-place with the
-/// new size). If the pointer \a p is \a NULL, it behaves as
-/// \a mi_malloc(\a newsize). If \a newsize is larger than the
-/// original \a size allocated for \a p, the bytes after \a size
-/// are uninitialized.
-///
-/// @see [reallocf](https://www.freebsd.org/cgi/man.cgi?query=reallocf) (on BSD)
-void* mi_reallocf(void* p, size_t newsize);
-
-
-/// Allocate and duplicate a string.
-/// @param s string to duplicate (or \a NULL).
-/// @returns a pointer to newly allocated memory initialized
-/// to string \a s, or \a NULL if either out of memory or if
-/// \a s is \a NULL.
-///
-/// Replacement for the standard [strdup()](http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html)
-/// such that mi_free() can be used on the returned result.
-char* mi_strdup(const char* s);
-
-/// Allocate and duplicate a string up to \a n bytes.
-/// @param s string to duplicate (or \a NULL).
-/// @param n maximum number of bytes to copy (excluding the terminating zero).
-/// @returns a pointer to newly allocated memory initialized
-/// to string \a s up to the first \a n bytes (and always zero terminated),
-/// or \a NULL if either out of memory or if \a s is \a NULL.
-///
-/// Replacement for the standard [strndup()](http://pubs.opengroup.org/onlinepubs/9699919799/functions/strndup.html)
-/// such that mi_free() can be used on the returned result.
-char* mi_strndup(const char* s, size_t n);
-
-/// Resolve a file path name.
-/// @param fname File name.
-/// @param resolved_name Should be \a NULL (but can also point to a buffer
-/// of at least \a PATH_MAX bytes).
-/// @returns If successful a pointer to the resolved absolute file name, or
-/// \a NULL on failure (with \a errno set to the error code).
-///
-/// If \a resolved_name was \a NULL, the returned result should be freed with
-/// mi_free().
-///
-/// Replacement for the standard [realpath()](http://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html)
-/// such that mi_free() can be used on the returned result (if \a resolved_name was \a NULL).
-char* mi_realpath(const char* fname, char* resolved_name);
-
-/// \}
-
-// ------------------------------------------------------
-// Extended functionality
-// ------------------------------------------------------
-
-/// \defgroup extended Extended Functions
-/// Extended functionality.
-/// \{
-
-/// Maximum size allowed for small allocations in
-/// #mi_malloc_small and #mi_zalloc_small (usually `128*sizeof(void*)` (= 1KB on 64-bit systems))
-#define MI_SMALL_SIZE_MAX (128*sizeof(void*))
-
-/// Allocate a small object.
-/// @param size The size in bytes, can be at most #MI_SMALL_SIZE_MAX.
-/// @returns a pointer to newly allocated memory of at least \a size
-/// bytes, or \a NULL if out of memory.
-/// This function is meant for use in run-time systems for best
-/// performance and does not check if \a size was indeed small -- use
-/// with care!
-void* mi_malloc_small(size_t size);
-
-/// Allocate a zero initialized small object.
-/// @param size The size in bytes, can be at most #MI_SMALL_SIZE_MAX.
-/// @returns a pointer to newly allocated zero-initialized memory of at
-/// least \a size bytes, or \a NULL if out of memory.
-/// This function is meant for use in run-time systems for best
-/// performance and does not check if \a size was indeed small -- use
-/// with care!
-void* mi_zalloc_small(size_t size);
-
-/// Return the available bytes in a memory block.
-/// @param p Pointer to previously allocated memory (or \a NULL)
-/// @returns Returns the available bytes in the memory block, or
-/// 0 if \a p was \a NULL.
-///
-/// The returned size can be
-/// used to call \a mi_expand successfully.
-/// The returned size is always at least equal to the
-/// allocated size of \a p, and, in the current design,
-/// should be less than 16.7% more.
-///
-/// @see [_msize](https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/msize?view=vs-2017) (Windows)
-/// @see [malloc_usable_size](http://man7.org/linux/man-pages/man3/malloc_usable_size.3.html) (Linux)
-/// @see mi_good_size()
-size_t mi_usable_size(void* p);
-
-/// Return the used allocation size.
-/// @param size The minimal required size in bytes.
-/// @returns the size `n` that will be allocated, where `n >= size`.
-///
-/// Generally, `mi_usable_size(mi_malloc(size)) == mi_good_size(size)`.
-/// This can be used to reduce internal wasted space when
-/// allocating buffers for example.
-///
-/// @see mi_usable_size()
-size_t mi_good_size(size_t size);
-
-/// Eagerly free memory.
-/// @param force If \a true, aggressively return memory to the OS (can be expensive!)
-///
-/// Regular code should not have to call this function. It can be beneficial
-/// in very narrow circumstances; in particular, when a long running thread
-/// allocates a lot of blocks that are freed by other threads it may improve
-/// resource usage by calling this every once in a while.
-void mi_collect(bool force);
-
-/// Deprecated
-/// @param out Ignored, outputs to the registered output function or stderr by default.
-///
-/// Most detailed when using a debug build.
-void mi_stats_print(void* out);
-
-/// Print the main statistics.
-/// @param out An output function or \a NULL for the default.
-/// @param arg Optional argument passed to \a out (if not \a NULL)
-///
-/// Most detailed when using a debug build.
-void mi_stats_print_out(mi_output_fun* out, void* arg);
-
-/// Reset statistics.
-void mi_stats_reset(void);
-
-/// Merge thread local statistics with the main statistics and reset.
-void mi_stats_merge(void);
-
-/// Initialize mimalloc on a thread.
-/// Should not be used as on most systems (pthreads, windows) this is done
-/// automatically.
-void mi_thread_init(void);
-
-/// Uninitialize mimalloc on a thread.
-/// Should not be used as on most systems (pthreads, windows) this is done
-/// automatically. Ensures that any memory that is not freed yet (but will
-/// be freed by other threads in the future) is properly handled.
-void mi_thread_done(void);
-
-/// Print out heap statistics for this thread.
-/// @param out An output function or \a NULL for the default.
-/// @param arg Optional argument passed to \a out (if not \a NULL)
-///
-/// Most detailed when using a debug build.
-void mi_thread_stats_print_out(mi_output_fun* out, void* arg);
-
-/// Type of deferred free functions.
-/// @param force If \a true all outstanding items should be freed.
-/// @param heartbeat A monotonically increasing count.
-/// @param arg Argument that was passed at registration to hold extra state.
-///
-/// @see mi_register_deferred_free
-typedef void (mi_deferred_free_fun)(bool force, unsigned long long heartbeat, void* arg);
-
-/// Register a deferred free function.
-/// @param deferred_free Address of a deferred free-ing function or \a NULL to unregister.
-/// @param arg Argument that will be passed on to the deferred free function.
-///
-/// Some runtime systems use deferred free-ing, for example when using
-/// reference counting to limit the worst case free time.
-/// Such systems can register (re-entrant) deferred free function
-/// to free more memory on demand. When the \a force parameter is
-/// \a true all possible memory should be freed.
-/// The per-thread \a heartbeat parameter is monotonically increasing
-/// and guaranteed to be deterministic if the program allocates
-/// deterministically. The \a deferred_free function is guaranteed
-/// to be called deterministically after some number of allocations
-/// (regardless of freeing or available free memory).
-/// At most one \a deferred_free function can be active.
-void mi_register_deferred_free(mi_deferred_free_fun* deferred_free, void* arg);
-
-/// Type of output functions.
-/// @param msg Message to output.
-/// @param arg Argument that was passed at registration to hold extra state.
-///
-/// @see mi_register_output()
-typedef void (mi_output_fun)(const char* msg, void* arg);
-
-/// Register an output function.
-/// @param out The output function, use `NULL` to output to stderr.
-/// @param arg Argument that will be passed on to the output function.
-///
-/// The `out` function is called to output any information from mimalloc,
-/// like verbose or warning messages.
-void mi_register_output(mi_output_fun* out, void* arg);
-
-/// Type of error callback functions.
-/// @param err Error code (see mi_register_error() for a complete list).
-/// @param arg Argument that was passed at registration to hold extra state.
-///
-/// @see mi_register_error()
-typedef void (mi_error_fun)(int err, void* arg);
-
-/// Register an error callback function.
-/// @param errfun The error function that is called on an error (use \a NULL for default)
-/// @param arg Extra argument that will be passed on to the error function.
-///
-/// The \a errfun function is called on an error in mimalloc after emitting
-/// an error message (through the output function). It as always legal to just
-/// return from the \a errfun function in which case allocation functions generally
-/// return \a NULL or ignore the condition. The default function only calls abort()
-/// when compiled in secure mode with an \a EFAULT error. The possible error
-/// codes are:
-/// * \a EAGAIN: Double free was detected (only in debug and secure mode).
-/// * \a EFAULT: Corrupted free list or meta-data was detected (only in debug and secure mode).
-/// * \a ENOMEM: Not enough memory available to satisfy the request.
-/// * \a EOVERFLOW: Too large a request, for example in mi_calloc(), the \a count and \a size parameters are too large.
-/// * \a EINVAL: Trying to free or re-allocate an invalid pointer.
-void mi_register_error(mi_error_fun* errfun, void* arg);
-
-/// Is a pointer part of our heap?
-/// @param p The pointer to check.
-/// @returns \a true if this is a pointer into our heap.
-/// This function is relatively fast.
-bool mi_is_in_heap_region(const void* p);
-
-/// Reserve OS memory for use by mimalloc. Reserved areas are used
-/// before allocating from the OS again. By reserving a large area upfront,
-/// allocation can be more efficient, and can be better managed on systems
-/// without `mmap`/`VirtualAlloc` (like WASM for example).
-/// @param size The size to reserve.
-/// @param commit Commit the memory upfront.
-/// @param allow_large Allow large OS pages (2MiB) to be used?
-/// @return \a 0 if successful, and an error code otherwise (e.g. `ENOMEM`).
-int mi_reserve_os_memory(size_t size, bool commit, bool allow_large);
-
-/// Manage a particular memory area for use by mimalloc.
-/// This is just like `mi_reserve_os_memory` except that the area should already be
-/// allocated in some manner and available for use my mimalloc.
-/// @param start Start of the memory area
-/// @param size The size of the memory area.
-/// @param commit Is the area already committed?
-/// @param is_large Does it consist of large OS pages? Set this to \a true as well for memory
-/// that should not be decommitted or protected (like rdma etc.)
-/// @param is_zero Does the area consists of zero's?
-/// @param numa_node Possible associated numa node or `-1`.
-/// @return \a true if successful, and \a false on error.
-bool mi_manage_os_memory(void* start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node);
-
-/// Reserve \a pages of huge OS pages (1GiB) evenly divided over \a numa_nodes nodes,
-/// but stops after at most `timeout_msecs` seconds.
-/// @param pages The number of 1GiB pages to reserve.
-/// @param numa_nodes The number of nodes do evenly divide the pages over, or 0 for using the actual number of NUMA nodes.
-/// @param timeout_msecs Maximum number of milli-seconds to try reserving, or 0 for no timeout.
-/// @returns 0 if successfull, \a ENOMEM if running out of memory, or \a ETIMEDOUT if timed out.
-///
-/// The reserved memory is used by mimalloc to satisfy allocations.
-/// May quit before \a timeout_msecs are expired if it estimates it will take more than
-/// 1.5 times \a timeout_msecs. The time limit is needed because on some operating systems
-/// it can take a long time to reserve contiguous memory if the physical memory is
-/// fragmented.
-int mi_reserve_huge_os_pages_interleave(size_t pages, size_t numa_nodes, size_t timeout_msecs);
-
-/// Reserve \a pages of huge OS pages (1GiB) at a specific \a numa_node,
-/// but stops after at most `timeout_msecs` seconds.
-/// @param pages The number of 1GiB pages to reserve.
-/// @param numa_node The NUMA node where the memory is reserved (start at 0).
-/// @param timeout_msecs Maximum number of milli-seconds to try reserving, or 0 for no timeout.
-/// @returns 0 if successfull, \a ENOMEM if running out of memory, or \a ETIMEDOUT if timed out.
-///
-/// The reserved memory is used by mimalloc to satisfy allocations.
-/// May quit before \a timeout_msecs are expired if it estimates it will take more than
-/// 1.5 times \a timeout_msecs. The time limit is needed because on some operating systems
-/// it can take a long time to reserve contiguous memory if the physical memory is
-/// fragmented.
-int mi_reserve_huge_os_pages_at(size_t pages, int numa_node, size_t timeout_msecs);
-
-
-/// Is the C runtime \a malloc API redirected?
-/// @returns \a true if all malloc API calls are redirected to mimalloc.
-///
-/// Currenty only used on Windows.
-bool mi_is_redirected();
-
-/// Return process information (time and memory usage).
-/// @param elapsed_msecs Optional. Elapsed wall-clock time of the process in milli-seconds.
-/// @param user_msecs Optional. User time in milli-seconds (as the sum over all threads).
-/// @param system_msecs Optional. System time in milli-seconds.
-/// @param current_rss Optional. Current working set size (touched pages).
-/// @param peak_rss Optional. Peak working set size (touched pages).
-/// @param current_commit Optional. Current committed memory (backed by the page file).
-/// @param peak_commit Optional. Peak committed memory (backed by the page file).
-/// @param page_faults Optional. Count of hard page faults.
-///
-/// The \a current_rss is precise on Windows and MacOSX; other systems estimate
-/// this using \a current_commit. The \a commit is precise on Windows but estimated
-/// on other systems as the amount of read/write accessible memory reserved by mimalloc.
-void mi_process_info(size_t* elapsed_msecs, size_t* user_msecs, size_t* system_msecs, size_t* current_rss, size_t* peak_rss, size_t* current_commit, size_t* peak_commit, size_t* page_faults);
-
-/// \}
-
-// ------------------------------------------------------
-// Aligned allocation
-// ------------------------------------------------------
-
-/// \defgroup aligned Aligned Allocation
-///
-/// Allocating aligned memory blocks.
-///
-/// \{
-
-/// The maximum supported alignment size (currently 1MiB).
-#define MI_ALIGNMENT_MAX (1024*1024UL)
-
-/// Allocate \a size bytes aligned by \a alignment.
-/// @param size number of bytes to allocate.
-/// @param alignment the minimal alignment of the allocated memory. Must be less than #MI_ALIGNMENT_MAX.
-/// @returns pointer to the allocated memory or \a NULL if out of memory.
-/// The returned pointer is aligned by \a alignment, i.e.
-/// `(uintptr_t)p % alignment == 0`.
-///
-/// Returns a unique pointer if called with \a size 0.
-/// @see [_aligned_malloc](https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/aligned-malloc?view=vs-2017) (on Windows)
-/// @see [aligned_alloc](http://man.openbsd.org/reallocarray) (on BSD, with switched arguments!)
-/// @see [posix_memalign](https://linux.die.net/man/3/posix_memalign) (on Posix, with switched arguments!)
-/// @see [memalign](https://linux.die.net/man/3/posix_memalign) (on Linux, with switched arguments!)
-void* mi_malloc_aligned(size_t size, size_t alignment);
-void* mi_zalloc_aligned(size_t size, size_t alignment);
-void* mi_calloc_aligned(size_t count, size_t size, size_t alignment);
-void* mi_realloc_aligned(void* p, size_t newsize, size_t alignment);
-
-/// Allocate \a size bytes aligned by \a alignment at a specified \a offset.
-/// @param size number of bytes to allocate.
-/// @param alignment the minimal alignment of the allocated memory at \a offset.
-/// @param offset the offset that should be aligned.
-/// @returns pointer to the allocated memory or \a NULL if out of memory.
-/// The returned pointer is aligned by \a alignment at \a offset, i.e.
-/// `((uintptr_t)p + offset) % alignment == 0`.
-///
-/// Returns a unique pointer if called with \a size 0.
-/// @see [_aligned_offset_malloc](https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/aligned-offset-malloc?view=vs-2017) (on Windows)
-void* mi_malloc_aligned_at(size_t size, size_t alignment, size_t offset);
-void* mi_zalloc_aligned_at(size_t size, size_t alignment, size_t offset);
-void* mi_calloc_aligned_at(size_t count, size_t size, size_t alignment, size_t offset);
-void* mi_realloc_aligned_at(void* p, size_t newsize, size_t alignment, size_t offset);
-
-/// \}
-
-/// \defgroup heap Heap Allocation
-///
-/// First-class heaps that can be destroyed in one go.
-///
-/// \{
-
-/// Type of first-class heaps.
-/// A heap can only be used for allocation in
-/// the thread that created this heap! Any allocated
-/// blocks can be freed or reallocated by any other thread though.
-struct mi_heap_s;
-
-/// Type of first-class heaps.
-/// A heap can only be used for (re)allocation in
-/// the thread that created this heap! Any allocated
-/// blocks can be freed by any other thread though.
-typedef struct mi_heap_s mi_heap_t;
-
-/// Create a new heap that can be used for allocation.
-mi_heap_t* mi_heap_new();
-
-/// Delete a previously allocated heap.
-/// This will release resources and migrate any
-/// still allocated blocks in this heap (efficienty)
-/// to the default heap.
-///
-/// If \a heap is the default heap, the default
-/// heap is set to the backing heap.
-void mi_heap_delete(mi_heap_t* heap);
-
-/// Destroy a heap, freeing all its still allocated blocks.
-/// Use with care as this will free all blocks still
-/// allocated in the heap. However, this can be a very
-/// efficient way to free all heap memory in one go.
-///
-/// If \a heap is the default heap, the default
-/// heap is set to the backing heap.
-void mi_heap_destroy(mi_heap_t* heap);
-
-/// Set the default heap to use for mi_malloc() et al.
-/// @param heap The new default heap.
-/// @returns The previous default heap.
-mi_heap_t* mi_heap_set_default(mi_heap_t* heap);
-
-/// Get the default heap that is used for mi_malloc() et al.
-/// @returns The current default heap.
-mi_heap_t* mi_heap_get_default();
-
-/// Get the backing heap.
-/// The _backing_ heap is the initial default heap for
-/// a thread and always available for allocations.
-/// It cannot be destroyed or deleted
-/// except by exiting the thread.
-mi_heap_t* mi_heap_get_backing();
-
-/// Release outstanding resources in a specific heap.
-void mi_heap_collect(mi_heap_t* heap, bool force);
-
-/// Allocate in a specific heap.
-/// @see mi_malloc()
-void* mi_heap_malloc(mi_heap_t* heap, size_t size);
-
-/// Allocate a small object in a specific heap.
-/// \a size must be smaller or equal to MI_SMALL_SIZE_MAX().
-/// @see mi_malloc()
-void* mi_heap_malloc_small(mi_heap_t* heap, size_t size);
-
-/// Allocate zero-initialized in a specific heap.
-/// @see mi_zalloc()
-void* mi_heap_zalloc(mi_heap_t* heap, size_t size);
-
-/// Allocate \a count zero-initialized elements in a specific heap.
-/// @see mi_calloc()
-void* mi_heap_calloc(mi_heap_t* heap, size_t count, size_t size);
-
-/// Allocate \a count elements in a specific heap.
-/// @see mi_mallocn()
-void* mi_heap_mallocn(mi_heap_t* heap, size_t count, size_t size);
-
-/// Duplicate a string in a specific heap.
-/// @see mi_strdup()
-char* mi_heap_strdup(mi_heap_t* heap, const char* s);
-
-/// Duplicate a string of at most length \a n in a specific heap.
-/// @see mi_strndup()
-char* mi_heap_strndup(mi_heap_t* heap, const char* s, size_t n);
-
-/// Resolve a file path name using a specific \a heap to allocate the result.
-/// @see mi_realpath()
-char* mi_heap_realpath(mi_heap_t* heap, const char* fname, char* resolved_name);
-
-void* mi_heap_realloc(mi_heap_t* heap, void* p, size_t newsize);
-void* mi_heap_reallocn(mi_heap_t* heap, void* p, size_t count, size_t size);
-void* mi_heap_reallocf(mi_heap_t* heap, void* p, size_t newsize);
-
-void* mi_heap_malloc_aligned(mi_heap_t* heap, size_t size, size_t alignment);
-void* mi_heap_malloc_aligned_at(mi_heap_t* heap, size_t size, size_t alignment, size_t offset);
-void* mi_heap_zalloc_aligned(mi_heap_t* heap, size_t size, size_t alignment);
-void* mi_heap_zalloc_aligned_at(mi_heap_t* heap, size_t size, size_t alignment, size_t offset);
-void* mi_heap_calloc_aligned(mi_heap_t* heap, size_t count, size_t size, size_t alignment);
-void* mi_heap_calloc_aligned_at(mi_heap_t* heap, size_t count, size_t size, size_t alignment, size_t offset);
-void* mi_heap_realloc_aligned(mi_heap_t* heap, void* p, size_t newsize, size_t alignment);
-void* mi_heap_realloc_aligned_at(mi_heap_t* heap, void* p, size_t newsize, size_t alignment, size_t offset);
-
-/// \}
-
-
-/// \defgroup zeroinit Zero initialized re-allocation
-///
-/// The zero-initialized re-allocations are only valid on memory that was
-/// originally allocated with zero initialization too.
-/// e.g. `mi_calloc`, `mi_zalloc`, `mi_zalloc_aligned` etc.
-/// see <https://github.com/microsoft/mimalloc/issues/63#issuecomment-508272992>
-///
-/// \{
-
-void* mi_rezalloc(void* p, size_t newsize);
-void* mi_recalloc(void* p, size_t newcount, size_t size) ;
-
-void* mi_rezalloc_aligned(void* p, size_t newsize, size_t alignment);
-void* mi_rezalloc_aligned_at(void* p, size_t newsize, size_t alignment, size_t offset);
-void* mi_recalloc_aligned(void* p, size_t newcount, size_t size, size_t alignment);
-void* mi_recalloc_aligned_at(void* p, size_t newcount, size_t size, size_t alignment, size_t offset);
-
-void* mi_heap_rezalloc(mi_heap_t* heap, void* p, size_t newsize);
-void* mi_heap_recalloc(mi_heap_t* heap, void* p, size_t newcount, size_t size);
-
-void* mi_heap_rezalloc_aligned(mi_heap_t* heap, void* p, size_t newsize, size_t alignment);
-void* mi_heap_rezalloc_aligned_at(mi_heap_t* heap, void* p, size_t newsize, size_t alignment, size_t offset);
-void* mi_heap_recalloc_aligned(mi_heap_t* heap, void* p, size_t newcount, size_t size, size_t alignment);
-void* mi_heap_recalloc_aligned_at(mi_heap_t* heap, void* p, size_t newcount, size_t size, size_t alignment, size_t offset);
-
-/// \}
-
-/// \defgroup typed Typed Macros
-///
-/// Typed allocation macros. For example:
-/// ```
-/// int* p = mi_malloc_tp(int)
-/// ```
-///
-/// \{
-
-/// Allocate a block of type \a tp.
-/// @param tp The type of the block to allocate.
-/// @returns A pointer to an object of type \a tp, or
-/// \a NULL if out of memory.
-///
-/// **Example:**
-/// ```
-/// int* p = mi_malloc_tp(int)
-/// ```
-///
-/// @see mi_malloc()
-#define mi_malloc_tp(tp) ((tp*)mi_malloc(sizeof(tp)))
-
-/// Allocate a zero-initialized block of type \a tp.
-#define mi_zalloc_tp(tp) ((tp*)mi_zalloc(sizeof(tp)))
-
-/// Allocate \a count zero-initialized blocks of type \a tp.
-#define mi_calloc_tp(tp,count) ((tp*)mi_calloc(count,sizeof(tp)))
-
-/// Allocate \a count blocks of type \a tp.
-#define mi_mallocn_tp(tp,count) ((tp*)mi_mallocn(count,sizeof(tp)))
-
-/// Re-allocate to \a count blocks of type \a tp.
-#define mi_reallocn_tp(p,tp,count) ((tp*)mi_reallocn(p,count,sizeof(tp)))
-
-/// Allocate a block of type \a tp in a heap \a hp.
-#define mi_heap_malloc_tp(hp,tp) ((tp*)mi_heap_malloc(hp,sizeof(tp)))
-
-/// Allocate a zero-initialized block of type \a tp in a heap \a hp.
-#define mi_heap_zalloc_tp(hp,tp) ((tp*)mi_heap_zalloc(hp,sizeof(tp)))
-
-/// Allocate \a count zero-initialized blocks of type \a tp in a heap \a hp.
-#define mi_heap_calloc_tp(hp,tp,count) ((tp*)mi_heap_calloc(hp,count,sizeof(tp)))
-
-/// Allocate \a count blocks of type \a tp in a heap \a hp.
-#define mi_heap_mallocn_tp(hp,tp,count) ((tp*)mi_heap_mallocn(hp,count,sizeof(tp)))
-
-/// Re-allocate to \a count blocks of type \a tp in a heap \a hp.
-#define mi_heap_reallocn_tp(hp,p,tp,count) ((tp*)mi_heap_reallocn(p,count,sizeof(tp)))
-
-/// Re-allocate to \a count zero initialized blocks of type \a tp in a heap \a hp.
-#define mi_heap_recalloc_tp(hp,p,tp,count) ((tp*)mi_heap_recalloc(p,count,sizeof(tp)))
-
-/// \}
-
-/// \defgroup analysis Heap Introspection
-///
-/// Inspect the heap at runtime.
-///
-/// \{
-
-/// Does a heap contain a pointer to a previously allocated block?
-/// @param heap The heap.
-/// @param p Pointer to a previously allocated block (in any heap)-- cannot be some
-/// random pointer!
-/// @returns \a true if the block pointed to by \a p is in the \a heap.
-/// @see mi_heap_check_owned()
-bool mi_heap_contains_block(mi_heap_t* heap, const void* p);
-
-/// Check safely if any pointer is part of a heap.
-/// @param heap The heap.
-/// @param p Any pointer -- not required to be previously allocated by us.
-/// @returns \a true if \a p points to a block in \a heap.
-///
-/// Note: expensive function, linear in the pages in the heap.
-/// @see mi_heap_contains_block()
-/// @see mi_heap_get_default()
-bool mi_heap_check_owned(mi_heap_t* heap, const void* p);
-
-/// Check safely if any pointer is part of the default heap of this thread.
-/// @param p Any pointer -- not required to be previously allocated by us.
-/// @returns \a true if \a p points to a block in default heap of this thread.
-///
-/// Note: expensive function, linear in the pages in the heap.
-/// @see mi_heap_contains_block()
-/// @see mi_heap_get_default()
-bool mi_check_owned(const void* p);
-
-/// An area of heap space contains blocks of a single size.
-/// The bytes in freed blocks are `committed - used`.
-typedef struct mi_heap_area_s {
- void* blocks; ///< start of the area containing heap blocks
- size_t reserved; ///< bytes reserved for this area
- size_t committed; ///< current committed bytes of this area
- size_t used; ///< bytes in use by allocated blocks
- size_t block_size; ///< size in bytes of one block
-} mi_heap_area_t;
-
-/// Visitor function passed to mi_heap_visit_blocks()
-/// @returns \a true if ok, \a false to stop visiting (i.e. break)
-///
-/// This function is always first called for every \a area
-/// with \a block as a \a NULL pointer. If \a visit_all_blocks
-/// was \a true, the function is then called for every allocated
-/// block in that area.
-typedef bool (mi_block_visit_fun)(const mi_heap_t* heap, const mi_heap_area_t* area, void* block, size_t block_size, void* arg);
-
-/// Visit all areas and blocks in a heap.
-/// @param heap The heap to visit.
-/// @param visit_all_blocks If \a true visits all allocated blocks, otherwise
-/// \a visitor is only called for every heap area.
-/// @param visitor This function is called for every area in the heap
-/// (with \a block as \a NULL). If \a visit_all_blocks is
-/// \a true, \a visitor is also called for every allocated
-/// block in every area (with `block!=NULL`).
-/// return \a false from this function to stop visiting early.
-/// @param arg Extra argument passed to \a visitor.
-/// @returns \a true if all areas and blocks were visited.
-bool mi_heap_visit_blocks(const mi_heap_t* heap, bool visit_all_blocks, mi_block_visit_fun* visitor, void* arg);
-
-/// \}
-
-/// \defgroup options Runtime Options
-///
-/// Set runtime behavior.
-///
-/// \{
-
-/// Runtime options.
-typedef enum mi_option_e {
- // stable options
- mi_option_show_errors, ///< Print error messages to `stderr`.
- mi_option_show_stats, ///< Print statistics to `stderr` when the program is done.
- mi_option_verbose, ///< Print verbose messages to `stderr`.
-
- // the following options are experimental
- mi_option_eager_commit, ///< Eagerly commit segments (4MiB) (enabled by default).
- mi_option_large_os_pages, ///< Use large OS pages (2MiB in size) if possible
- mi_option_reserve_huge_os_pages, ///< The number of huge OS pages (1GiB in size) to reserve at the start of the program.
- mi_option_reserve_huge_os_pages_at, ///< Reserve huge OS pages at node N.
- mi_option_reserve_os_memory, ///< Reserve specified amount of OS memory at startup, e.g. "1g" or "512m".
- mi_option_segment_cache, ///< The number of segments per thread to keep cached (0).
- mi_option_page_reset, ///< Reset page memory after \a mi_option_reset_delay milliseconds when it becomes free.
- mi_option_abandoned_page_reset, //< Reset free page memory when a thread terminates.
- mi_option_use_numa_nodes, ///< Pretend there are at most N NUMA nodes; Use 0 to use the actual detected NUMA nodes at runtime.
- mi_option_eager_commit_delay, ///< the first N segments per thread are not eagerly committed (=1).
- mi_option_os_tag, ///< OS tag to assign to mimalloc'd memory
- mi_option_limit_os_alloc, ///< If set to 1, do not use OS memory for allocation (but only pre-reserved arenas)
-
- // v1.x specific options
- mi_option_eager_region_commit, ///< Eagerly commit large (256MiB) memory regions (enabled by default, except on Windows)
- mi_option_segment_reset, ///< Experimental
- mi_option_reset_delay, ///< Delay in milli-seconds before resetting a page (100ms by default)
- mi_option_purge_decommits, ///< Experimental
-
- // v2.x specific options
- mi_option_allow_purge, ///< Enable decommitting memory (=on)
- mi_option_purge_delay, ///< Decommit page memory after N milli-seconds delay (25ms).
- mi_option_segment_purge_delay, ///< Decommit large segment memory after N milli-seconds delay (500ms).
-
- _mi_option_last
-} mi_option_t;
-
-
-bool mi_option_is_enabled(mi_option_t option);
-void mi_option_enable(mi_option_t option);
-void mi_option_disable(mi_option_t option);
-void mi_option_set_enabled(mi_option_t option, bool enable);
-void mi_option_set_enabled_default(mi_option_t option, bool enable);
-
-long mi_option_get(mi_option_t option);
-void mi_option_set(mi_option_t option, long value);
-void mi_option_set_default(mi_option_t option, long value);
-
-
-/// \}
-
-/// \defgroup posix Posix
-///
-/// `mi_` prefixed implementations of various Posix, Unix, and C++ allocation functions.
-/// Defined for convenience as all redirect to the regular mimalloc API.
-///
-/// \{
-
-void* mi_recalloc(void* p, size_t count, size_t size);
-size_t mi_malloc_size(const void* p);
-size_t mi_malloc_usable_size(const void *p);
-
-/// Just as `free` but also checks if the pointer `p` belongs to our heap.
-void mi_cfree(void* p);
-
-int mi_posix_memalign(void** p, size_t alignment, size_t size);
-int mi__posix_memalign(void** p, size_t alignment, size_t size);
-void* mi_memalign(size_t alignment, size_t size);
-void* mi_valloc(size_t size);
-
-void* mi_pvalloc(size_t size);
-void* mi_aligned_alloc(size_t alignment, size_t size);
-
-/// Correspond s to [reallocarray](https://www.freebsd.org/cgi/man.cgi?query=reallocarray&sektion=3&manpath=freebsd-release-ports)
-/// in FreeBSD.
-void* mi_reallocarray(void* p, size_t count, size_t size);
-
-/// Corresponds to [reallocarr](https://man.netbsd.org/reallocarr.3) in NetBSD.
-int mi_reallocarr(void* p, size_t count, size_t size);
-
-void mi_free_size(void* p, size_t size);
-void mi_free_size_aligned(void* p, size_t size, size_t alignment);
-void mi_free_aligned(void* p, size_t alignment);
-
-/// \}
-
-/// \defgroup cpp C++ wrappers
-///
-/// `mi_` prefixed implementations of various allocation functions
-/// that use C++ semantics on out-of-memory, generally calling
-/// `std::get_new_handler` and raising a `std::bad_alloc` exception on failure.
-///
-/// Note: use the `mimalloc-new-delete.h` header to override the \a new
-/// and \a delete operators globally. The wrappers here are mostly
-/// for convience for library writers that need to interface with
-/// mimalloc from C++.
-///
-/// \{
-
-/// like mi_malloc(), but when out of memory, use `std::get_new_handler` and raise `std::bad_alloc` exception on failure.
-void* mi_new(std::size_t n) noexcept(false);
-
-/// like mi_mallocn(), but when out of memory, use `std::get_new_handler` and raise `std::bad_alloc` exception on failure.
-void* mi_new_n(size_t count, size_t size) noexcept(false);
-
-/// like mi_malloc_aligned(), but when out of memory, use `std::get_new_handler` and raise `std::bad_alloc` exception on failure.
-void* mi_new_aligned(std::size_t n, std::align_val_t alignment) noexcept(false);
-
-/// like `mi_malloc`, but when out of memory, use `std::get_new_handler` but return \a NULL on failure.
-void* mi_new_nothrow(size_t n);
-
-/// like `mi_malloc_aligned`, but when out of memory, use `std::get_new_handler` but return \a NULL on failure.
-void* mi_new_aligned_nothrow(size_t n, size_t alignment);
-
-/// like mi_realloc(), but when out of memory, use `std::get_new_handler` and raise `std::bad_alloc` exception on failure.
-void* mi_new_realloc(void* p, size_t newsize);
-
-/// like mi_reallocn(), but when out of memory, use `std::get_new_handler` and raise `std::bad_alloc` exception on failure.
-void* mi_new_reallocn(void* p, size_t newcount, size_t size);
-
-/// \a std::allocator implementation for mimalloc for use in STL containers.
-/// For example:
-/// ```
-/// std::vector<int, mi_stl_allocator<int> > vec;
-/// vec.push_back(1);
-/// vec.pop_back();
-/// ```
-template<class T> struct mi_stl_allocator { }
-
-/// \}
-
-/*! \page build Building
-
-Checkout the sources from GitHub:
-```
-git clone https://github.com/microsoft/mimalloc
-```
-
-## Windows
-
-Open `ide/vs2019/mimalloc.sln` in Visual Studio 2019 and build (or `ide/vs2017/mimalloc.sln`).
-The `mimalloc` project builds a static library (in `out/msvc-x64`), while the
-`mimalloc-override` project builds a DLL for overriding malloc
-in the entire program.
-
-## macOS, Linux, BSD, etc.
-
-We use [`cmake`](https://cmake.org)<sup>1</sup> as the build system:
-
-```
-> mkdir -p out/release
-> cd out/release
-> cmake ../..
-> make
-```
-This builds the library as a shared (dynamic)
-library (`.so` or `.dylib`), a static library (`.a`), and
-as a single object file (`.o`).
-
-`> sudo make install` (install the library and header files in `/usr/local/lib` and `/usr/local/include`)
-
-You can build the debug version which does many internal checks and
-maintains detailed statistics as:
-
-```
-> mkdir -p out/debug
-> cd out/debug
-> cmake -DCMAKE_BUILD_TYPE=Debug ../..
-> make
-```
-This will name the shared library as `libmimalloc-debug.so`.
-
-Finally, you can build a _secure_ version that uses guard pages, encrypted
-free lists, etc, as:
-```
-> mkdir -p out/secure
-> cd out/secure
-> cmake -DMI_SECURE=ON ../..
-> make
-```
-This will name the shared library as `libmimalloc-secure.so`.
-Use `ccmake`<sup>2</sup> instead of `cmake`
-to see and customize all the available build options.
-
-Notes:
-1. Install CMake: `sudo apt-get install cmake`
-2. Install CCMake: `sudo apt-get install cmake-curses-gui`
-
-*/
-
-/*! \page using Using the library
-
-### Build
-
-The preferred usage is including `<mimalloc.h>`, linking with
-the shared- or static library, and using the `mi_malloc` API exclusively for allocation. For example,
-```
-gcc -o myprogram -lmimalloc myfile.c
-```
-
-mimalloc uses only safe OS calls (`mmap` and `VirtualAlloc`) and can co-exist
-with other allocators linked to the same program.
-If you use `cmake`, you can simply use:
-```
-find_package(mimalloc 1.0 REQUIRED)
-```
-in your `CMakeLists.txt` to find a locally installed mimalloc. Then use either:
-```
-target_link_libraries(myapp PUBLIC mimalloc)
-```
-to link with the shared (dynamic) library, or:
-```
-target_link_libraries(myapp PUBLIC mimalloc-static)
-```
-to link with the static library. See `test\CMakeLists.txt` for an example.
-
-### C++
-For best performance in C++ programs, it is also recommended to override the
-global `new` and `delete` operators. For convience, mimalloc provides
-[`mimalloc-new-delete.h`](https://github.com/microsoft/mimalloc/blob/master/include/mimalloc-new-delete.h) which does this for you -- just include it in a single(!) source file in your project.
-
-In C++, mimalloc also provides the `mi_stl_allocator` struct which implements the `std::allocator`
-interface. For example:
-```
-std::vector<some_struct, mi_stl_allocator<some_struct>> vec;
-vec.push_back(some_struct());
-```
-
-### Statistics
-
-You can pass environment variables to print verbose messages (`MIMALLOC_VERBOSE=1`)
-and statistics (`MIMALLOC_SHOW_STATS=1`) (in the debug version):
-```
-> env MIMALLOC_SHOW_STATS=1 ./cfrac 175451865205073170563711388363
-
-175451865205073170563711388363 = 374456281610909315237213 * 468551
-
-heap stats: peak total freed unit
-normal 2: 16.4 kb 17.5 mb 17.5 mb 16 b ok
-normal 3: 16.3 kb 15.2 mb 15.2 mb 24 b ok
-normal 4: 64 b 4.6 kb 4.6 kb 32 b ok
-normal 5: 80 b 118.4 kb 118.4 kb 40 b ok
-normal 6: 48 b 48 b 48 b 48 b ok
-normal 17: 960 b 960 b 960 b 320 b ok
-
-heap stats: peak total freed unit
- normal: 33.9 kb 32.8 mb 32.8 mb 1 b ok
- huge: 0 b 0 b 0 b 1 b ok
- total: 33.9 kb 32.8 mb 32.8 mb 1 b ok
-malloc requested: 32.8 mb
-
- committed: 58.2 kb 58.2 kb 58.2 kb 1 b ok
- reserved: 2.0 mb 2.0 mb 2.0 mb 1 b ok
- reset: 0 b 0 b 0 b 1 b ok
- segments: 1 1 1
--abandoned: 0
- pages: 6 6 6
--abandoned: 0
- mmaps: 3
- mmap fast: 0
- mmap slow: 1
- threads: 0
- elapsed: 2.022s
- process: user: 1.781s, system: 0.016s, faults: 756, reclaims: 0, rss: 2.7 mb
-```
-
-The above model of using the `mi_` prefixed API is not always possible
-though in existing programs that already use the standard malloc interface,
-and another option is to override the standard malloc interface
-completely and redirect all calls to the _mimalloc_ library instead.
-
-See \ref overrides for more info.
-
-*/
-
-/*! \page environment Environment Options
-
-You can set further options either programmatically (using [`mi_option_set`](https://microsoft.github.io/mimalloc/group__options.html)),
-or via environment variables.
-
-- `MIMALLOC_SHOW_STATS=1`: show statistics when the program terminates.
-- `MIMALLOC_VERBOSE=1`: show verbose messages.
-- `MIMALLOC_SHOW_ERRORS=1`: show error and warning messages.
-- `MIMALLOC_PAGE_RESET=0`: by default, mimalloc will reset (or purge) OS pages when not in use to signal to the OS
- that the underlying physical memory can be reused. This can reduce memory fragmentation in long running (server)
- programs. By setting it to `0` no such page resets will be done which can improve performance for programs that are not long
- running. As an alternative, the `MIMALLOC_DECOMMIT_DELAY=`<msecs> can be set higher (100ms by default) to make the page
- reset occur less frequently instead of turning it off completely.
-- `MIMALLOC_LARGE_OS_PAGES=1`: use large OS pages (2MiB) when available; for some workloads this can significantly
- improve performance. Use `MIMALLOC_VERBOSE` to check if the large OS pages are enabled -- usually one needs
- to explicitly allow large OS pages (as on [Windows][windows-huge] and [Linux][linux-huge]). However, sometimes
- the OS is very slow to reserve contiguous physical memory for large OS pages so use with care on systems that
- can have fragmented memory (for that reason, we generally recommend to use `MIMALLOC_RESERVE_HUGE_OS_PAGES` instead when possible).
-- `MIMALLOC_RESERVE_HUGE_OS_PAGES=N`: where N is the number of 1GiB _huge_ OS pages. This reserves the huge pages at
- startup and sometimes this can give a large (latency) performance improvement on big workloads.
- Usually it is better to not use
- `MIMALLOC_LARGE_OS_PAGES` in combination with this setting. Just like large OS pages, use with care as reserving
- contiguous physical memory can take a long time when memory is fragmented (but reserving the huge pages is done at
- startup only once).
- Note that we usually need to explicitly enable huge OS pages (as on [Windows][windows-huge] and [Linux][linux-huge])). With huge OS pages, it may be beneficial to set the setting
- `MIMALLOC_EAGER_COMMIT_DELAY=N` (`N` is 1 by default) to delay the initial `N` segments (of 4MiB)
- of a thread to not allocate in the huge OS pages; this prevents threads that are short lived
- and allocate just a little to take up space in the huge OS page area (which cannot be reset).
-- `MIMALLOC_RESERVE_HUGE_OS_PAGES_AT=N`: where N is the numa node. This reserves the huge pages at a specific numa node.
- (`N` is -1 by default to reserve huge pages evenly among the given number of numa nodes (or use the available ones as detected))
-
-Use caution when using `fork` in combination with either large or huge OS pages: on a fork, the OS uses copy-on-write
-for all pages in the original process including the huge OS pages. When any memory is now written in that area, the
-OS will copy the entire 1GiB huge page (or 2MiB large page) which can cause the memory usage to grow in big increments.
-
-[linux-huge]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/tuning_and_optimizing_red_hat_enterprise_linux_for_oracle_9i_and_10g_databases/sect-oracle_9i_and_10g_tuning_guide-large_memory_optimization_big_pages_and_huge_pages-configuring_huge_pages_in_red_hat_enterprise_linux_4_or_5
-[windows-huge]: https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows?view=sql-server-2017
-
-*/
-
-/*! \page overrides Overriding Malloc
-
-Overriding the standard `malloc` can be done either _dynamically_ or _statically_.
-
-## Dynamic override
-
-This is the recommended way to override the standard malloc interface.
-
-
-### Linux, BSD
-
-On these systems we preload the mimalloc shared
-library so all calls to the standard `malloc` interface are
-resolved to the _mimalloc_ library.
-
-- `env LD_PRELOAD=/usr/lib/libmimalloc.so myprogram`
-
-You can set extra environment variables to check that mimalloc is running,
-like:
-```
-env MIMALLOC_VERBOSE=1 LD_PRELOAD=/usr/lib/libmimalloc.so myprogram
-```
-or run with the debug version to get detailed statistics:
-```
-env MIMALLOC_SHOW_STATS=1 LD_PRELOAD=/usr/lib/libmimalloc-debug.so myprogram
-```
-
-### MacOS
-
-On macOS we can also preload the mimalloc shared
-library so all calls to the standard `malloc` interface are
-resolved to the _mimalloc_ library.
-
-- `env DYLD_FORCE_FLAT_NAMESPACE=1 DYLD_INSERT_LIBRARIES=/usr/lib/libmimalloc.dylib myprogram`
-
-Note that certain security restrictions may apply when doing this from
-the [shell](https://stackoverflow.com/questions/43941322/dyld-insert-libraries-ignored-when-calling-application-through-bash).
-
-(Note: macOS support for dynamic overriding is recent, please report any issues.)
-
-
-### Windows
-
-Overriding on Windows is robust and has the
-particular advantage to be able to redirect all malloc/free calls that go through
-the (dynamic) C runtime allocator, including those from other DLL's or libraries.
-
-The overriding on Windows requires that you link your program explicitly with
-the mimalloc DLL and use the C-runtime library as a DLL (using the `/MD` or `/MDd` switch).
-Also, the `mimalloc-redirect.dll` (or `mimalloc-redirect32.dll`) must be available
-in the same folder as the main `mimalloc-override.dll` at runtime (as it is a dependency).
-The redirection DLL ensures that all calls to the C runtime malloc API get redirected to
-mimalloc (in `mimalloc-override.dll`).
-
-To ensure the mimalloc DLL is loaded at run-time it is easiest to insert some
-call to the mimalloc API in the `main` function, like `mi_version()`
-(or use the `/INCLUDE:mi_version` switch on the linker). See the `mimalloc-override-test` project
-for an example on how to use this. For best performance on Windows with C++, it
-is also recommended to also override the `new`/`delete` operations (by including
-[`mimalloc-new-delete.h`](https://github.com/microsoft/mimalloc/blob/master/include/mimalloc-new-delete.h) a single(!) source file in your project).
-
-The environment variable `MIMALLOC_DISABLE_REDIRECT=1` can be used to disable dynamic
-overriding at run-time. Use `MIMALLOC_VERBOSE=1` to check if mimalloc was successfully redirected.
-
-(Note: in principle, it is possible to even patch existing executables without any recompilation
-if they are linked with the dynamic C runtime (`ucrtbase.dll`) -- just put the `mimalloc-override.dll`
-into the import table (and put `mimalloc-redirect.dll` in the same folder)
-Such patching can be done for example with [CFF Explorer](https://ntcore.com/?page_id=388)).
-
-
-## Static override
-
-On Unix systems, you can also statically link with _mimalloc_ to override the standard
-malloc interface. The recommended way is to link the final program with the
-_mimalloc_ single object file (`mimalloc-override.o`). We use
-an object file instead of a library file as linkers give preference to
-that over archives to resolve symbols. To ensure that the standard
-malloc interface resolves to the _mimalloc_ library, link it as the first
-object file. For example:
-
-```
-gcc -o myprogram mimalloc-override.o myfile1.c ...
-```
-
-## List of Overrides:
-
-The specific functions that get redirected to the _mimalloc_ library are:
-
-```
-// C
-void* malloc(size_t size);
-void* calloc(size_t size, size_t n);
-void* realloc(void* p, size_t newsize);
-void free(void* p);
-
-void* aligned_alloc(size_t alignment, size_t size);
-char* strdup(const char* s);
-char* strndup(const char* s, size_t n);
-char* realpath(const char* fname, char* resolved_name);
-
-
-// C++
-void operator delete(void* p);
-void operator delete[](void* p);
-
-void* operator new(std::size_t n) noexcept(false);
-void* operator new[](std::size_t n) noexcept(false);
-void* operator new( std::size_t n, std::align_val_t align) noexcept(false);
-void* operator new[]( std::size_t n, std::align_val_t align) noexcept(false);
-
-void* operator new ( std::size_t count, const std::nothrow_t& tag);
-void* operator new[]( std::size_t count, const std::nothrow_t& tag);
-void* operator new ( std::size_t count, std::align_val_t al, const std::nothrow_t&);
-void* operator new[]( std::size_t count, std::align_val_t al, const std::nothrow_t&);
-
-// Posix
-int posix_memalign(void** p, size_t alignment, size_t size);
-
-// Linux
-void* memalign(size_t alignment, size_t size);
-void* valloc(size_t size);
-void* pvalloc(size_t size);
-size_t malloc_usable_size(void *p);
-void* reallocf(void* p, size_t newsize);
-
-// macOS
-void vfree(void* p);
-size_t malloc_size(const void* p);
-size_t malloc_good_size(size_t size);
-
-// BSD
-void* reallocarray( void* p, size_t count, size_t size );
-void* reallocf(void* p, size_t newsize);
-void cfree(void* p);
-
-// NetBSD
-int reallocarr(void* p, size_t count, size_t size);
-
-// Windows
-void* _expand(void* p, size_t newsize);
-size_t _msize(void* p);
-
-void* _malloc_dbg(size_t size, int block_type, const char* fname, int line);
-void* _realloc_dbg(void* p, size_t newsize, int block_type, const char* fname, int line);
-void* _calloc_dbg(size_t count, size_t size, int block_type, const char* fname, int line);
-void* _expand_dbg(void* p, size_t size, int block_type, const char* fname, int line);
-size_t _msize_dbg(void* p, int block_type);
-void _free_dbg(void* p, int block_type);
-```
-
-*/
-
-/*! \page bench Performance
-
-We tested _mimalloc_ against many other top allocators over a wide
-range of benchmarks, ranging from various real world programs to
-synthetic benchmarks that see how the allocator behaves under more
-extreme circumstances.
-
-In our benchmarks, _mimalloc_ always outperforms all other leading
-allocators (_jemalloc_, _tcmalloc_, _Hoard_, etc) (Jan 2021),
-and usually uses less memory (up to 25% more in the worst case).
-A nice property is that it does *consistently* well over the wide
-range of benchmarks.
-
-See the [Performance](https://github.com/microsoft/mimalloc#Performance)
-section in the _mimalloc_ repository for benchmark results,
-or the the technical report for detailed benchmark results.
-
-*/
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-doxygen.css b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-doxygen.css
deleted file mode 100644
index b24f564..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-doxygen.css
+++ /dev/null
@@ -1,49 +0,0 @@
-#projectlogo img {
- padding: 1ex;
-}
-tt, code, kbd, samp, div.memproto, div.fragment, div.line, table.memname {
- font-family: Consolas, Monaco, Inconsolata, "Courier New", monospace;
-}
-.image img, .textblock img {
- max-width: 99%;
- max-height: 350px;
-}
-table.memname, .memname{
- font-weight: bold;
-}
-code {
- background-color: #EEE;
- padding: 0ex 0.25ex;
-}
-body {
- margin: 1ex 1ex 0ex 1ex;
- border: 1px solid black;
-}
-.contents table, .contents div, .contents p, .contents dl {
- font-size: 16px;
- line-height: 1.44;
-}
-body #nav-tree .label {
- font-size: 14px;
-}
-a{
- text-decoration: underline;
-}
-#side-nav {
- margin-left: 1ex;
- border-left: 1px solid black;
-}
-#nav-tree {
- padding-left: 1ex;
-}
-#nav-path {
- display: none;
-}
-div.fragment {
- background-color: #EEE;
- padding: 0.25ex 0.5ex;
- border-color: black;
-}
-#nav-sync img {
- display: none;
-}
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo-100.png b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo-100.png
deleted file mode 100644
index 96f0825..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo-100.png
+++ /dev/null
Binary files differ
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo.png b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo.png
deleted file mode 100644
index e0a5a8c..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo.png
+++ /dev/null
Binary files differ
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo.svg
deleted file mode 100644
index 672c7e4..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/mimalloc-logo.svg
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="20mm"
- height="20mm"
- viewBox="0 0 10 10"
- version="1.1"
- id="svg8"
- sodipodi:docname="mimalloc-logo.svg"
- inkscape:version="0.92.3 (2405546, 2018-03-11)">
- <defs
- id="defs2">
- <linearGradient
- id="linearGradient6471"
- osb:paint="solid">
- <stop
- style="stop-color:#008da3;stop-opacity:1;"
- offset="0"
- id="stop6469" />
- </linearGradient>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="23.706667"
- inkscape:cx="24.864771"
- inkscape:cy="35.79485"
- inkscape:document-units="mm"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="3840"
- inkscape:window-height="2050"
- inkscape:window-x="-12"
- inkscape:window-y="-12"
- inkscape:window-maximized="1"
- inkscape:snap-object-midpoints="false"
- inkscape:snap-bbox="false"
- inkscape:snap-bbox-midpoints="false"
- inkscape:bbox-nodes="false"
- inkscape:bbox-paths="false"
- inkscape:snap-bbox-edge-midpoints="false"
- showguides="false"
- showborder="false">
- <inkscape:grid
- type="xygrid"
- id="grid815"
- units="mm"
- spacingx="0.99999997"
- spacingy="0.99999997" />
- </sodipodi:namedview>
- <metadata
- id="metadata5">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-287)">
- <circle
- id="path840"
- cx="5"
- cy="292"
- style="fill:#0d8ca4;fill-opacity:0.64444448;fill-rule:nonzero;stroke:#000000;stroke-width:0.56603777;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- r="4.7169809" />
- <ellipse
- id="path4522"
- style="fill:none;stroke:#000000;stroke-width:0.6;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
- cx="5.171"
- cy="292"
- r="4.8711185" />
- <g
- aria-label="malloc"
- transform="matrix(0.9031136,0,0,0.80782132,0.58122269,37.023319)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.28797817px;line-height:1.25;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28599727"
- id="text6501">
- <path
- inkscape:connector-curvature="0"
- d="m 1.7799307,318.87079 c 0.029047,0 0.053624,-0.009 0.075968,-0.0313 0.020109,-0.0201 0.031281,-0.0447 0.031281,-0.076 v -0.70159 c 0.013406,-0.0223 0.031281,-0.0469 0.05139,-0.0693 0.017875,-0.0223 0.049156,-0.0447 0.089374,-0.0693 0.040218,-0.0223 0.082671,-0.0358 0.1273581,-0.0358 0.040218,0 0.078202,0.0179 0.1117177,0.0536 0.031281,0.0358 0.049156,0.0827 0.049156,0.143 v 0.67924 c 0,0.0313 0.00894,0.0559 0.031281,0.076 0.020109,0.0223 0.044687,0.0313 0.075968,0.0313 0.029047,0 0.053624,-0.009 0.075968,-0.0313 0.020109,-0.0201 0.031281,-0.0447 0.031281,-0.076 v -0.67924 -0.0223 c 0.0067,-0.0112 0.01564,-0.0223 0.024578,-0.0358 0.00894,-0.0134 0.022344,-0.0268 0.040218,-0.0447 0.017875,-0.0179 0.03575,-0.0335 0.053624,-0.0469 0.017875,-0.0134 0.042453,-0.0246 0.069265,-0.0335 0.026812,-0.009 0.053625,-0.0134 0.080437,-0.0134 0.040218,0 0.078202,0.0179 0.1117177,0.0536 0.031281,0.0358 0.049156,0.0827 0.049156,0.143 v 0.67924 c 0,0.0313 0.00894,0.0559 0.031281,0.076 0.020109,0.0223 0.044687,0.0313 0.075968,0.0313 0.029047,0 0.053624,-0.009 0.075968,-0.0313 0.020109,-0.0201 0.031281,-0.0447 0.031281,-0.076 v -0.67924 c 0,-0.11396 -0.037984,-0.21003 -0.1094833,-0.29047 -0.073734,-0.0804 -0.1631078,-0.12066 -0.2658881,-0.12066 -0.073734,0 -0.1407643,0.0156 -0.1988575,0.0425 -0.058093,0.0268 -0.1094833,0.0626 -0.1541704,0.10725 -0.075968,-0.0983 -0.1720452,-0.14971 -0.290466,-0.14971 -0.1027802,0 -0.1943887,0.029 -0.2748255,0.0849 -0.00894,-0.0179 -0.022343,-0.0335 -0.040218,-0.0469 -0.017875,-0.0134 -0.037984,-0.0201 -0.060328,-0.0201 -0.031281,0 -0.055859,0.0112 -0.075968,0.0313 -0.022343,0.0223 -0.031281,0.0469 -0.031281,0.076 v 0.96524 c 0,0.0313 0.00894,0.0559 0.031281,0.076 0.020109,0.0223 0.044687,0.0313 0.075968,0.0313 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.28797817px;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.28599727"
- id="path6515" />
- <path
- inkscape:connector-curvature="0"
- d="m 4.2824069,317.69105 c -0.01564,0 -0.029047,0.004 -0.042453,0.009 -0.013406,0.007 -0.026812,0.0156 -0.03575,0.0246 -0.00894,0.0112 -0.017875,0.0223 -0.022344,0.0335 -0.078202,-0.0559 -0.1631079,-0.0849 -0.2569507,-0.0849 -0.145233,0 -0.2658881,0.0626 -0.359731,0.18322 -0.093843,0.12066 -0.1407642,0.26366 -0.1407642,0.42453 0,0.16311 0.046921,0.30611 0.1407642,0.42676 0.093843,0.12066 0.214498,0.18098 0.359731,0.18098 0.093843,0 0.1787483,-0.0268 0.2569507,-0.0849 0.00894,0.0201 0.022344,0.0358 0.040218,0.0491 0.017875,0.0134 0.037984,0.0179 0.060328,0.0179 0.029047,0 0.053625,-0.009 0.075968,-0.0313 0.020109,-0.0201 0.031281,-0.0447 0.031281,-0.076 v -0.96524 c 0,-0.029 -0.011172,-0.0536 -0.031281,-0.076 -0.022343,-0.0201 -0.046921,-0.0313 -0.075968,-0.0313 z m -0.107249,0.77979 c -0.017875,0.0424 -0.040218,0.0782 -0.067031,0.10948 -0.026812,0.0313 -0.055859,0.0559 -0.08714,0.0715 -0.031281,0.0156 -0.064796,0.0224 -0.096077,0.0224 -0.073734,0 -0.1407643,-0.0358 -0.1988575,-0.10949 -0.058093,-0.0737 -0.08714,-0.16757 -0.08714,-0.28376 0,-0.11395 0.029047,-0.2078 0.08714,-0.28153 0.058093,-0.0737 0.1251238,-0.11172 0.1988575,-0.11172 0.049156,0 0.098312,0.0179 0.1429986,0.0536 0.044687,0.0358 0.080437,0.0871 0.107249,0.1497 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.28797817px;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.28599727"
- id="path6517" />
- <path
- inkscape:connector-curvature="0"
- d="m 4.7471525,317.2263 c -0.031281,0 -0.055859,0.0112 -0.075968,0.0313 -0.022343,0.0223 -0.031281,0.0469 -0.031281,0.076 v 1.21549 c 0,0.10502 0.0067,0.18545 0.022343,0.24131 0.00447,0.0268 0.017875,0.0469 0.037984,0.0603 0.017875,0.0134 0.040218,0.0201 0.064796,0.0201 0.00894,0 0.017875,0 0.026812,-0.002 0.00447,-0.002 0.011172,-0.004 0.017875,-0.009 0.0067,-0.002 0.013406,-0.004 0.017875,-0.009 0.00447,-0.004 0.011172,-0.009 0.01564,-0.0134 0.00447,-0.004 0.0067,-0.0112 0.011172,-0.0156 0.00447,-0.004 0.0067,-0.0112 0.00894,-0.0179 0.00223,-0.007 0.00447,-0.0134 0.0067,-0.0201 0,-0.007 0.00223,-0.0134 0.00223,-0.0201 v -0.007 c 0,-0.002 -0.00223,-0.004 -0.00223,-0.007 0,-0.002 0,-0.004 0,-0.009 -0.011172,-0.0447 -0.01564,-0.10725 -0.01564,-0.19216 v -1.21549 c 0,-0.029 -0.011172,-0.0536 -0.031281,-0.076 -0.022343,-0.0201 -0.046921,-0.0313 -0.075968,-0.0313 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.28797817px;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.28599727"
- id="path6519" />
- <path
- inkscape:connector-curvature="0"
- d="m 5.2655226,317.2263 c -0.031281,0 -0.055859,0.0112 -0.075968,0.0313 -0.022343,0.0223 -0.031281,0.0469 -0.031281,0.076 v 1.21549 c 0,0.10502 0.0067,0.18545 0.022344,0.24131 0.00447,0.0268 0.017875,0.0469 0.037984,0.0603 0.017875,0.0134 0.040218,0.0201 0.064796,0.0201 0.00894,0 0.017875,0 0.026812,-0.002 0.00447,-0.002 0.011172,-0.004 0.017875,-0.009 0.0067,-0.002 0.013406,-0.004 0.017875,-0.009 0.00447,-0.004 0.011172,-0.009 0.01564,-0.0134 0.00447,-0.004 0.0067,-0.0112 0.011172,-0.0156 0.00447,-0.004 0.0067,-0.0112 0.00894,-0.0179 0.00223,-0.007 0.00447,-0.0134 0.0067,-0.0201 0,-0.007 0.00223,-0.0134 0.00223,-0.0201 v -0.007 c 0,-0.002 -0.00223,-0.004 -0.00223,-0.007 0,-0.002 0,-0.004 0,-0.009 -0.011172,-0.0447 -0.01564,-0.10725 -0.01564,-0.19216 v -1.21549 c 0,-0.029 -0.011172,-0.0536 -0.031281,-0.076 -0.022343,-0.0201 -0.046921,-0.0313 -0.075968,-0.0313 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.28797817px;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.28599727"
- id="path6521" />
- <path
- inkscape:connector-curvature="0"
- d="m 6.6061344,318.28092 c 0,-0.16087 -0.049156,-0.30387 -0.1429986,-0.42453 -0.093843,-0.12065 -0.2144979,-0.18322 -0.3574966,-0.18322 -0.145233,0 -0.2658881,0.0626 -0.3597309,0.18322 -0.093843,0.12066 -0.1407643,0.26366 -0.1407643,0.42453 0,0.16311 0.046921,0.30611 0.1407643,0.42676 0.093843,0.12066 0.2144979,0.18098 0.3597309,0.18098 0.1429987,0 0.2636538,-0.0603 0.3574966,-0.18098 0.093843,-0.12065 0.1429986,-0.26365 0.1429986,-0.42676 z m -0.2144979,0 c 0,0.11619 -0.031281,0.21003 -0.089374,0.28376 -0.058093,0.0737 -0.1251238,0.10949 -0.1966231,0.10949 -0.073734,0 -0.1407643,-0.0358 -0.1988575,-0.10949 -0.058093,-0.0737 -0.08714,-0.16757 -0.08714,-0.28376 0,-0.11395 0.029047,-0.2078 0.08714,-0.28153 0.058093,-0.0737 0.1251238,-0.11172 0.1988575,-0.11172 0.071499,0 0.1385299,0.038 0.1966231,0.11172 0.058093,0.0737 0.089374,0.16758 0.089374,0.28153 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.28797817px;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.28599727"
- id="path6523" />
- <path
- inkscape:connector-curvature="0"
- d="m 7.6406407,318.47754 c -0.00894,-0.004 -0.01564,-0.007 -0.024578,-0.009 -0.00894,-0.002 -0.017875,-0.004 -0.026812,-0.004 -0.044687,0 -0.075968,0.0201 -0.093843,0.0559 -0.026812,0.0514 -0.060328,0.0894 -0.098312,0.11618 -0.040218,0.0268 -0.080437,0.038 -0.1206551,0.038 -0.071499,0 -0.1340612,-0.0358 -0.1921544,-0.10949 -0.058093,-0.0737 -0.084905,-0.16757 -0.084905,-0.28376 0,-0.11395 0.026812,-0.2078 0.084905,-0.28153 0.058093,-0.0737 0.1206551,-0.11172 0.1921544,-0.11172 0.080437,0 0.1474674,0.0447 0.2055606,0.1296 0.020109,0.0335 0.049156,0.0491 0.089374,0.0491 0.022343,0 0.040218,-0.004 0.058093,-0.0179 0.0067,-0.004 0.013406,-0.009 0.020109,-0.0156 0.0067,-0.007 0.011172,-0.0134 0.01564,-0.0224 0.00447,-0.009 0.0067,-0.0156 0.00894,-0.0246 0.00223,-0.009 0.00447,-0.0179 0.00447,-0.0268 0,-0.004 -0.00223,-0.0112 -0.00223,-0.0156 0,-0.004 -0.00223,-0.009 -0.00223,-0.0134 -0.00223,-0.004 -0.00447,-0.0112 -0.0067,-0.0156 -0.00223,-0.004 -0.00447,-0.009 -0.0067,-0.0134 -0.031281,-0.0447 -0.064796,-0.0827 -0.1027803,-0.11619 -0.037984,-0.0335 -0.080437,-0.0603 -0.1295925,-0.0804 -0.049156,-0.0201 -0.1005459,-0.0313 -0.1519361,-0.0313 -0.1429986,0 -0.2614194,0.0626 -0.3530279,0.18322 -0.093843,0.12066 -0.1385299,0.26366 -0.1385299,0.42453 0,0.16311 0.044687,0.30611 0.1385299,0.42676 0.091608,0.12066 0.2100293,0.18098 0.3530279,0.18098 0.084905,0 0.1631078,-0.0246 0.2346072,-0.0737 0.071499,-0.0492 0.1273581,-0.11172 0.1720452,-0.19215 0.0067,-0.0134 0.011172,-0.0313 0.013406,-0.0514 0,-0.0425 -0.020109,-0.0737 -0.055859,-0.0939 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.28797817px;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.28599727"
- id="path6525" />
- </g>
- <g
- aria-label="m"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.3694315px;line-height:1.25;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15923578"
- id="text848">
- <path
- d="m 2.3718985,293.17081 c 0.080862,0 0.1492836,-0.0249 0.211485,-0.0871 0.055981,-0.056 0.087082,-0.1244 0.087082,-0.21148 v -1.95313 c 0.037321,-0.0622 0.087082,-0.13062 0.1430634,-0.19282 0.049761,-0.0622 0.1368433,-0.1244 0.2488059,-0.19283 0.1119627,-0.0622 0.2301455,-0.0995 0.3545485,-0.0995 0.1119626,0 0.2177051,0.0498 0.3110074,0.14929 0.087082,0.0995 0.1368432,0.23014 0.1368432,0.39808 v 1.89093 c 0,0.0871 0.024881,0.1555 0.087082,0.21148 0.055981,0.0622 0.124403,0.0871 0.211485,0.0871 0.080862,0 0.1492836,-0.0249 0.2114851,-0.0871 0.055981,-0.056 0.087082,-0.1244 0.087082,-0.21148 v -1.89093 -0.0622 c 0.018661,-0.0311 0.043541,-0.0622 0.068422,-0.0995 0.024881,-0.0373 0.062201,-0.0746 0.1119626,-0.1244 0.049761,-0.0498 0.099522,-0.0933 0.1492836,-0.13063 0.049761,-0.0373 0.1181828,-0.0684 0.1928246,-0.0933 0.074642,-0.0249 0.1492835,-0.0373 0.2239253,-0.0373 0.1119626,0 0.2177052,0.0498 0.3110074,0.14929 0.087082,0.0995 0.1368432,0.23014 0.1368432,0.39808 v 1.89093 c 0,0.0871 0.024881,0.1555 0.087082,0.21148 0.055981,0.0622 0.124403,0.0871 0.211485,0.0871 0.080862,0 0.1492836,-0.0249 0.2114851,-0.0871 0.055981,-0.056 0.087082,-0.1244 0.087082,-0.21148 v -1.89093 c 0,-0.31722 -0.1057425,-0.58469 -0.3047872,-0.80861 -0.2052649,-0.22393 -0.4540708,-0.33589 -0.7401976,-0.33589 -0.2052649,0 -0.3918693,0.0435 -0.5535932,0.11818 -0.1617238,0.0746 -0.3047872,0.17416 -0.4291902,0.29857 -0.211485,-0.27369 -0.4789514,-0.41675 -0.8086192,-0.41675 -0.2861268,0 -0.5411529,0.0809 -0.7650782,0.23636 -0.024881,-0.0498 -0.062202,-0.0933 -0.1119627,-0.13062 -0.049761,-0.0373 -0.1057425,-0.056 -0.167944,-0.056 -0.087082,0 -0.1555037,0.0311 -0.211485,0.0871 -0.062202,0.0622 -0.087082,0.13062 -0.087082,0.21149 v 2.6871 c 0,0.0871 0.024881,0.1555 0.087082,0.21148 0.055981,0.0622 0.1244029,0.0871 0.211485,0.0871 z"
- style="stroke-width:0.15923578"
- id="path834" />
- </g>
- <g
- id="g28"
- transform="translate(-0.23995531,0.02790178)">
- <g
- id="g835">
- <g
- transform="matrix(1.0000001,0,0,0.98554676,-7.6075554e-7,4.2369817)"
- id="g25">
- <path
- d="m 7.426334,293.15097 c 0.080862,0 0.1492836,-0.0249 0.2114851,-0.0871 0.055981,-0.056 0.087082,-0.1244 0.087082,-0.21149 v -2.6871 c 0,-0.0809 -0.031101,-0.14928 -0.087082,-0.21149 -0.062201,-0.056 -0.1306232,-0.0871 -0.2114851,-0.0871 -0.087082,0 -0.1555037,0.0311 -0.211485,0.0871 -0.062202,0.0622 -0.087082,0.13063 -0.087082,0.21149 v 2.6871 c 0,0.0871 0.024881,0.15551 0.087082,0.21149 0.055981,0.0622 0.124403,0.0871 0.211485,0.0871 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15923578"
- id="path896"
- inkscape:connector-curvature="0" />
- </g>
- <path
- d="m 7.4249389,289.61754 c 0.080862,0 0.1492836,-0.0249 0.2114851,-0.0871 0.055981,-0.056 0.086228,-0.1244 0.087082,-0.21149 l 0.0014,-0.14231 c 7.93e-4,-0.0809 -0.031101,-0.14929 -0.087082,-0.21149 -0.062201,-0.056 -0.1306232,-0.0871 -0.2114851,-0.0871 -0.087082,0 -0.1555037,0.0311 -0.211485,0.0871 -0.062202,0.0622 -0.086289,0.13062 -0.087082,0.21149 l -0.0014,0.14231 c -8.538e-4,0.0871 0.024881,0.15551 0.087082,0.21149 0.055981,0.0622 0.124403,0.0871 0.211485,0.0871 z"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:RoutedGothicEx;-inkscape-font-specification:'RoutedGothicEx, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15923578"
- id="path898"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="scsscscsscs" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/spades-logo.png b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/spades-logo.png
deleted file mode 100644
index d8c73fe..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/spades-logo.png
+++ /dev/null
Binary files differ
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/unreal-logo.svg b/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/unreal-logo.svg
deleted file mode 100644
index 5d5192a..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/doc/unreal-logo.svg
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- height="706.71118"
- width="746.71118"
- viewBox="-150.3282 -273.04775 810.70706 1447.2442"
- version="1.1"
- id="svg34"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg">
- <defs
- id="defs24">
- <clipPath
- id="a"
- clipPathUnits="userSpaceOnUse">
- <path
- d="M 0,1024 H 1024 V 0 H 0 Z"
- id="path21" />
- </clipPath>
- </defs>
- <rect
- style="fill:#b2b2b2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.04786;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect121"
- width="1300.7299"
- height="1264.0651"
- x="-391.91745"
- y="-186.69598"
- rx="154.79872"
- ry="154.79872" />
- <path
- d="m 693.86447,863.90527 v -94.746 h -35.855 v 122.747 h 120.26 v -28 z"
- id="path26" />
- <g
- clip-path="url(#a)"
- transform="matrix(1.33333,0,0,-1.33333,-408.39652,1133.2393)"
- id="g32">
- <path
- d="m 498.837,117.958 h 20.085 c 0.498,-5.295 -1.063,-7.971 -5.392,-8.386 -4.293,-0.411 -8.612,-0.76 -12.92,-0.77 -17.903,-0.044 -19.822,2.052 -18.737,19.932 0.02,0.333 0.03,0.666 0.063,0.997 0.67,6.667 3.126,9.189 9.81,9.499 5.15,0.238 10.316,0.089 15.476,0.132 5.373,0.044 10.5,-0.337 11.806,-6.626 h 13.198 c 1.86,10.558 -1.6,16.306 -11.74,16.9 -13.059,0.767 -26.228,0.648 -39.293,-0.086 -8.782,-0.493 -13.292,-5.67 -13.804,-14.27 -0.444,-7.454 -0.42,-14.975 -0.007,-22.434 0.441,-7.953 4.16,-11.928 11.938,-13.918 2.87,-0.734 5.785,-1.29 8.68,-1.928 h 26 c 2.091,0.444 4.177,0.913 6.274,1.328 5.615,1.11 11.135,2.918 12.264,9.28 1.114,6.278 1.061,12.763 1.546,19.515 h -35.247 z m -103.4,63.438 v 91.393 h -26.424 v -69.795 l -54.236,70.22 H 273.38 V 181.28 h 26.308 v 68.354 l 1.226,0.31 53.645,-68.547 z m 47.577,45.635 v 26.323 c 12.208,0 24.12,0.002 36.033,-0.003 1.662,0 3.323,-0.048 4.985,-0.059 14.801,-0.1 16.353,-4.42 14.866,-18.979 -0.484,-4.738 -4.073,-7.103 -8.306,-7.175 -15.731,-0.268 -31.469,-0.107 -47.578,-0.107 m 56.443,-33.406 c 0.357,-4.063 0.548,-8.14 0.82,-12.3 h 26.391 c 0,5.758 0.219,11.061 -0.045,16.34 -0.581,11.61 -2.289,16.735 -13.599,18.696 -0.592,0.103 -1.114,0.614 -2.506,1.42 11.369,2.53 15.442,10.208 15.981,20.201 0.267,4.96 0.176,10.017 -0.484,14.932 -1.604,11.95 -5.993,16.673 -17.761,18.885 a 101.743,101.743 0 0 1 -17.843,1.741 c -22.818,0.197 -45.638,0.09 -68.458,0.066 -1.78,-0.002 -3.559,-0.22 -5.646,-0.36 v -91.884 h 26.535 v 25.35 c 6.04,0 11.509,0.111 16.972,-0.025 9.644,-0.24 19.344,-0.086 28.908,-1.129 7.832,-0.854 10.041,-4.046 10.735,-11.933 m 73.129,24.754 h 68.786 v 18.565 h -68.899 v 16.585 h 72.852 v 19.517 h -99.79 v -91.744 h 101.018 v 20.193 h -73.967 z m -319.109,52.037 c 0.004,0.918 -0.563,1.84 -0.847,2.708 h -26.34 c 0,-16.299 0.052,-32.104 -0.036,-47.909 -0.025,-4.314 -0.31,-8.644 -0.772,-12.935 -0.665,-6.161 -4.552,-10.04 -10.412,-10.334 -12.098,-0.61 -24.283,-1.056 -36.347,-0.266 -9.717,0.635 -12.873,4.996 -12.984,14.895 -0.19,16.997 -0.103,33.998 -0.188,50.997 -0.009,1.895 -0.385,3.789 -0.59,5.67 h -26.32 c 0,-22.846 -0.788,-45.02 0.27,-67.106 0.734,-15.35 7.1,-21.4 22.59,-23.992 22.481,-3.765 45.194,-3.61 67.677,-0.266 17.168,2.553 22.995,8.927 23.753,26.069 0.92,20.79 0.464,41.644 0.546,62.47 m 447.926,-53.371 19.515,38.362 19.723,-38.362 z m 2.8,56.306 -49.975,-92.133 h 28.863 l 8.345,15.905 h 59.333 l 8.375,-15.847 h 29.165 l -50.248,92.075 z m -264.917,-161.351 -1.233,-0.292 a 532757.74,532757.74 0 0 1 -30.02,38.7 h -23.4 v -51.93 h 14.433 v 37.887 l 1.47,0.522 30.288,-38.488 h 23.367 v 51.89 h -14.904 z m 187.996,-0.026 -1.193,-0.31 c -9.93,12.813 -19.858,25.627 -29.476,38.039 H 573.309 V 98.583 h 14.777 v 39.2 l 30.889,-39.43 h 23.009 v 51.189 h -14.702 z m -295.244,7.284 h 39.176 v 10.717 H 332.04 v 9.647 h 41.322 V 150.45 H 317.11 V 98.519 h 57.303 v 11.039 h -42.375 z m 338.914,0.018 h 38.455 v 10.44 H 671.1 v 9.635 h 40.57 v 10.3 H 655.83 V 98.556 h 56.742 v 10.952 h -41.62 z M 545.666,98.416 h 14.301 v 51.189 H 545.666 Z M 312.554,585.913 c 0,0 -10.463,51.999 44.874,114.973 55.342,62.972 96.863,85.871 141.707,97.799 l -0.078,-0.046 0.17,0.046 c 0,0 -35.227,-20.517 -35.227,-51.522 0,-9 1.435,-15.184 3.423,-19.315 2.638,-5.488 6.816,-7.354 10.567,-7.372 3.16,-0.018 5.01,1.281 9.01,2.834 V 555.386 c 0,0 0.433,-2.707 2.863,-5.915 3.5,-4.613 9,-10.243 19.335,-10.3 17.629,0.113 39.802,20.026 39.802,20.026 v 135.964 c 0,13.832 -9.9,30.53 -20.39,36.259 0,0 1.43,0.09 3.744,0.089 6.926,0.002 21.784,-0.79 30.063,-7.115 2.3,2.665 39.418,44.665 105.466,57.589 l -0.032,-0.037 0.18,0.037 c 0,0 -36.531,-43.016 -47.981,-64.348 -2.035,-0.121 -2.332,-40.471 -1.993,-80.79 0.329,-38.92 1.253,-77.818 1.789,-80.509 0,0 3.898,-5.794 13.824,-5.844 11.196,-0.057 30.063,7.195 59.643,38.288 l -10e-4,-10e-4 v 10e-4 c 0,0 -0.78,-1.771 -2.35,-4.908 -8.476,-16.938 -39.974,-73.721 -95.924,-106.725 l -0.003,0.003 -0.005,-0.003 -36.29,30.693 -0.927,0.774 -39.58,-41.967 -0.06,0.006 -0.005,-0.006 c 0,0 -90.232,7.633 -127.92,62.015 l 0.179,-0.065 -0.047,0.065 c 0,0 5.707,-2.221 12.148,-2.342 7.547,-0.138 15.472,2.619 15.472,15.229 v 127.85 c 0,6.529 -4.495,13.853 -14.362,13.825 -8.874,-0.023 -21.614,-5.994 -39.01,-23.843 -36.734,-37.685 -51.99,-73.468 -51.99,-73.468 l -0.025,0.136 -0.06,-0.136 M 513,369.156 c 70.386,0 136.56,27.41 186.33,77.18 49.77,49.771 77.18,115.944 77.18,186.33 0,70.386 -27.41,136.559 -77.18,186.33 -49.77,49.77 -115.944,77.18 -186.33,77.18 -70.386,0 -136.56,-27.41 -186.33,-77.18 -49.77,-49.771 -77.18,-115.944 -77.18,-186.33 0,-70.386 27.41,-136.559 77.18,-186.33 49.77,-49.77 115.944,-77.18 186.33,-77.18"
- id="path28" />
- <path
- d="m 513,908.307 c 152.232,0 275.641,-123.409 275.641,-275.64 0,-152.233 -123.409,-275.642 -275.641,-275.642 -152.232,0 -275.641,123.41 -275.641,275.641 0,152.232 123.409,275.641 275.641,275.641 m 0,-559.119 c 75.72,0 146.907,29.487 200.449,83.03 53.542,53.541 83.028,124.728 83.028,200.448 0,75.72 -29.486,146.907 -83.028,200.45 -53.542,53.54 -124.729,83.026 -200.449,83.026 -75.72,0 -146.907,-29.486 -200.449,-83.028 -53.542,-53.542 -83.028,-124.73 -83.028,-200.449 0,-75.72 29.486,-146.907 83.028,-200.449 C 366.093,378.674 437.28,349.188 513,349.188"
- id="path30" />
- </g>
-</svg>
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-override-test.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-override-test.vcxproj
deleted file mode 100644
index 04c16a9..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-override-test.vcxproj
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FEF7868F-750E-4C21-A04D-22707CC66879}</ProjectGuid>
- <RootNamespace>mimalloc-override-test</RootNamespace>
- <ProjectName>mimalloc-override-test</ProjectName>
- <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <ExceptionHandling>false</ExceptionHandling>
- <CompileAs>Default</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent />
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <ExceptionHandling>Sync</ExceptionHandling>
- <CompileAs>Default</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <EntryPointSymbol>
- </EntryPointSymbol>
- <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent />
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- <EntryPointSymbol>
- </EntryPointSymbol>
- <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc-override.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea7}</Project>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\main-override.cpp" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-override.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-override.vcxproj
deleted file mode 100644
index 3d5c1f7..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-override.vcxproj
+++ /dev/null
@@ -1,259 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{ABB5EAE7-B3E6-432E-B636-333449892EA7}</ProjectGuid>
- <RootNamespace>mimalloc-override</RootNamespace>
- <ProjectName>mimalloc-override</ProjectName>
- <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <SupportJustMyCode>false</SupportJustMyCode>
- <CompileAs>Default</CompileAs>
- </ClCompile>
- <Link>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <IgnoreSpecificDefaultLibraries>
- </IgnoreSpecificDefaultLibraries>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>Copy mimalloc-redirect32.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <SupportJustMyCode>false</SupportJustMyCode>
- <CompileAs>Default</CompileAs>
- </ClCompile>
- <Link>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect.lib;bcrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <IgnoreSpecificDefaultLibraries>
- </IgnoreSpecificDefaultLibraries>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>copy mimalloc-redirect.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <CompileAs>Default</CompileAs>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>Copy mimalloc-redirect32.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <CompileAs>Default</CompileAs>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect.lib;bcrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>copy mimalloc-redirect.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClInclude Include="$(ProjectDir)..\..\include\mimalloc.h" />
- <ClInclude Include="..\..\include\mimalloc-new-delete.h" />
- <ClInclude Include="..\..\include\mimalloc-override.h" />
- <ClInclude Include="..\..\include\mimalloc\atomic.h" />
- <ClInclude Include="..\..\include\mimalloc\internal.h" />
- <ClInclude Include="..\..\include\mimalloc\prim.h" />
- <ClInclude Include="..\..\include\mimalloc\track.h" />
- <ClInclude Include="..\..\include\mimalloc\types.h" />
- <ClInclude Include="..\..\src\bitmap.h" />
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\src\alloc-aligned.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-override.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-posix.c" />
- <ClCompile Include="..\..\src\alloc.c" />
- <ClCompile Include="..\..\src\arena.c" />
- <ClCompile Include="..\..\src\bitmap.c" />
- <ClCompile Include="..\..\src\heap.c" />
- <ClCompile Include="..\..\src\init.c" />
- <ClCompile Include="..\..\src\prim\prim.c" />
- <ClCompile Include="..\..\src\options.c" />
- <ClCompile Include="..\..\src\os.c" />
- <ClCompile Include="..\..\src\page-queue.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\page.c" />
- <ClCompile Include="..\..\src\random.c" />
- <ClCompile Include="..\..\src\segment-map.c" />
- <ClCompile Include="..\..\src\segment.c" />
- <ClCompile Include="..\..\src\stats.c" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-test-stress.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-test-stress.vcxproj
deleted file mode 100644
index 061b860..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-test-stress.vcxproj
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FEF7958F-750E-4C21-A04D-22707CC66878}</ProjectGuid>
- <RootNamespace>mimalloc-test-stress</RootNamespace>
- <ProjectName>mimalloc-test-stress</ProjectName>
- <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\test-stress.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea6}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-test.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-test.vcxproj
deleted file mode 100644
index 04bd653..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc-test.vcxproj
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FEF7858F-750E-4C21-A04D-22707CC66878}</ProjectGuid>
- <RootNamespace>mimalloctest</RootNamespace>
- <ProjectName>mimalloc-test</ProjectName>
- <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <LanguageStandard>stdcpp14</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea6}</Project>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\main-override-static.c" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc.sln b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc.sln
deleted file mode 100644
index 515c03f..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc.sln
+++ /dev/null
@@ -1,71 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26228.102
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc", "mimalloc.vcxproj", "{ABB5EAE7-B3E6-432E-B636-333449892EA6}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-test", "mimalloc-test.vcxproj", "{FEF7858F-750E-4C21-A04D-22707CC66878}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-override", "mimalloc-override.vcxproj", "{ABB5EAE7-B3E6-432E-B636-333449892EA7}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-override-test", "mimalloc-override-test.vcxproj", "{FEF7868F-750E-4C21-A04D-22707CC66879}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-test-stress", "mimalloc-test-stress.vcxproj", "{FEF7958F-750E-4C21-A04D-22707CC66878}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x64.ActiveCfg = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x64.Build.0 = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x86.ActiveCfg = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x86.Build.0 = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x64.ActiveCfg = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x64.Build.0 = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x86.ActiveCfg = Release|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x86.Build.0 = Release|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x64.ActiveCfg = Debug|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x64.Build.0 = Debug|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x86.ActiveCfg = Debug|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x86.Build.0 = Debug|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x64.ActiveCfg = Release|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x64.Build.0 = Release|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x86.ActiveCfg = Release|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x86.Build.0 = Release|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x64.ActiveCfg = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x64.Build.0 = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x86.ActiveCfg = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x86.Build.0 = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x64.ActiveCfg = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x64.Build.0 = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x86.ActiveCfg = Release|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x86.Build.0 = Release|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x64.ActiveCfg = Debug|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x64.Build.0 = Debug|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x86.ActiveCfg = Debug|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x86.Build.0 = Debug|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x64.ActiveCfg = Release|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x64.Build.0 = Release|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.ActiveCfg = Release|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.Build.0 = Release|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.ActiveCfg = Debug|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.Build.0 = Debug|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.ActiveCfg = Debug|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.Build.0 = Debug|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.ActiveCfg = Release|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.Build.0 = Release|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.ActiveCfg = Release|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {4297F93D-486A-4243-995F-7D32F59AE82A}
- EndGlobalSection
-EndGlobal
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc.vcxproj
deleted file mode 100644
index 46eb05d..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2017/mimalloc.vcxproj
+++ /dev/null
@@ -1,259 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{ABB5EAE7-B3E6-432E-B636-333449892EA6}</ProjectGuid>
- <RootNamespace>mimalloc</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v141</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Label="LLVM" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <UseLlvmLib>false</UseLlvmLib>
- </PropertyGroup>
- <PropertyGroup Label="LLVM" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <UseLlvmLib>false</UseLlvmLib>
- </PropertyGroup>
- <PropertyGroup Label="LLVM" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <UseLlvmLib>false</UseLlvmLib>
- </PropertyGroup>
- <PropertyGroup Label="LLVM" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <UseLlvmLib>false</UseLlvmLib>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;MI_DEBUG=3;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <CompileAs>CompileAsC</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;MI_DEBUG=3;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <CompileAs>CompileAsCpp</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- <LanguageStandard>stdcpp14</LanguageStandard>
- </ClCompile>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- <Link>
- <EntryPointSymbol>
- </EntryPointSymbol>
- </Link>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- <InlineFunctionExpansion>Default</InlineFunctionExpansion>
- <CompileAs>CompileAsC</CompileAs>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- <InlineFunctionExpansion>Default</InlineFunctionExpansion>
- <CompileAs>CompileAsC</CompileAs>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <EntryPointSymbol>
- </EntryPointSymbol>
- </Link>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\src\alloc-aligned.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-override.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-posix.c" />
- <ClCompile Include="..\..\src\alloc.c" />
- <ClCompile Include="..\..\src\arena.c" />
- <ClCompile Include="..\..\src\bitmap.c" />
- <ClCompile Include="..\..\src\heap.c" />
- <ClCompile Include="..\..\src\init.c" />
- <ClCompile Include="..\..\src\prim\prim.c" />
- <ClCompile Include="..\..\src\options.c" />
- <ClCompile Include="..\..\src\page-queue.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\page.c" />
- <ClCompile Include="..\..\src\random.c" />
- <ClCompile Include="..\..\src\segment-map.c" />
- <ClCompile Include="..\..\src\segment.c" />
- <ClCompile Include="..\..\src\os.c" />
- <ClCompile Include="..\..\src\stats.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="$(ProjectDir)..\..\include\mimalloc.h" />
- <ClInclude Include="$(ProjectDir)..\..\include\mimalloc-override.h" />
- <ClInclude Include="..\..\include\mimalloc-new-delete.h" />
- <ClInclude Include="..\..\include\mimalloc\atomic.h" />
- <ClInclude Include="..\..\include\mimalloc\internal.h" />
- <ClInclude Include="..\..\include\mimalloc\prim.h" />
- <ClInclude Include="..\..\include\mimalloc\track.h" />
- <ClInclude Include="..\..\include\mimalloc\types.h" />
- <ClInclude Include="..\..\src\bitmap.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-override-test.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-override-test.vcxproj
deleted file mode 100644
index 7a9202f..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-override-test.vcxproj
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FEF7868F-750E-4C21-A04D-22707CC66879}</ProjectGuid>
- <RootNamespace>mimalloc-override-test</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-override-test</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <ExceptionHandling>Sync</ExceptionHandling>
- <CompileAs>Default</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent />
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <ExceptionHandling>Sync</ExceptionHandling>
- <CompileAs>Default</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <EntryPointSymbol>
- </EntryPointSymbol>
- <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent />
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- <EntryPointSymbol>
- </EntryPointSymbol>
- <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\main-override.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc-override.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea7}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-override.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-override.vcxproj
deleted file mode 100644
index 1c5c61b..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-override.vcxproj
+++ /dev/null
@@ -1,259 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{ABB5EAE7-B3E6-432E-B636-333449892EA7}</ProjectGuid>
- <RootNamespace>mimalloc-override</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-override</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <SupportJustMyCode>false</SupportJustMyCode>
- <CompileAs>Default</CompileAs>
- </ClCompile>
- <Link>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <IgnoreSpecificDefaultLibraries>
- </IgnoreSpecificDefaultLibraries>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>Copy mimalloc-redirect32.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_DEBUG=3;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <SupportJustMyCode>false</SupportJustMyCode>
- <CompileAs>Default</CompileAs>
- </ClCompile>
- <Link>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <IgnoreSpecificDefaultLibraries>
- </IgnoreSpecificDefaultLibraries>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>copy mimalloc-redirect.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <CompileAs>Default</CompileAs>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>Copy mimalloc-redirect32.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <CompileAs>Default</CompileAs>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>copy mimalloc-redirect.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClInclude Include="$(ProjectDir)..\..\include\mimalloc.h" />
- <ClInclude Include="..\..\include\mimalloc-new-delete.h" />
- <ClInclude Include="..\..\include\mimalloc-override.h" />
- <ClInclude Include="..\..\include\mimalloc\atomic.h" />
- <ClInclude Include="..\..\include\mimalloc\internal.h" />
- <ClInclude Include="..\..\include\mimalloc\prim.h" />
- <ClInclude Include="..\..\include\mimalloc\track.h" />
- <ClInclude Include="..\..\include\mimalloc\types.h" />
- <ClInclude Include="..\..\src\bitmap.h" />
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\src\alloc-aligned.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-override.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-posix.c" />
- <ClCompile Include="..\..\src\alloc.c" />
- <ClCompile Include="..\..\src\arena.c" />
- <ClCompile Include="..\..\src\bitmap.c" />
- <ClCompile Include="..\..\src\heap.c" />
- <ClCompile Include="..\..\src\init.c" />
- <ClCompile Include="..\..\src\prim\prim.c" />
- <ClCompile Include="..\..\src\options.c" />
- <ClCompile Include="..\..\src\os.c" />
- <ClCompile Include="..\..\src\page-queue.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\page.c" />
- <ClCompile Include="..\..\src\random.c" />
- <ClCompile Include="..\..\src\segment-map.c" />
- <ClCompile Include="..\..\src\segment.c" />
- <ClCompile Include="..\..\src\stats.c" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test-api.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test-api.vcxproj
deleted file mode 100644
index 812a9cb..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test-api.vcxproj
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FFF7958F-750E-4C21-A04D-22707CC66878}</ProjectGuid>
- <RootNamespace>mimalloc-test-api</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-test-api</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\test-api.c">
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea6}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test-stress.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test-stress.vcxproj
deleted file mode 100644
index ef7ab35..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test-stress.vcxproj
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FEF7958F-750E-4C21-A04D-22707CC66878}</ProjectGuid>
- <RootNamespace>mimalloc-test-stress</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-test-stress</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\test-stress.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea6}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test.vcxproj
deleted file mode 100644
index 13af6ab..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc-test.vcxproj
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FEF7858F-750E-4C21-A04D-22707CC66878}</ProjectGuid>
- <RootNamespace>mimalloctest</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-test</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea6}</Project>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\main-override-static.c" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc.sln b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc.sln
deleted file mode 100644
index 6ff01d3..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc.sln
+++ /dev/null
@@ -1,81 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29709.97
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc", "mimalloc.vcxproj", "{ABB5EAE7-B3E6-432E-B636-333449892EA6}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-test", "mimalloc-test.vcxproj", "{FEF7858F-750E-4C21-A04D-22707CC66878}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-override", "mimalloc-override.vcxproj", "{ABB5EAE7-B3E6-432E-B636-333449892EA7}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-override-test", "mimalloc-override-test.vcxproj", "{FEF7868F-750E-4C21-A04D-22707CC66879}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-test-stress", "mimalloc-test-stress.vcxproj", "{FEF7958F-750E-4C21-A04D-22707CC66878}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-test-api", "mimalloc-test-api.vcxproj", "{FFF7958F-750E-4C21-A04D-22707CC66878}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x64.ActiveCfg = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x64.Build.0 = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x86.ActiveCfg = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x86.Build.0 = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x64.ActiveCfg = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x64.Build.0 = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x86.ActiveCfg = Release|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x86.Build.0 = Release|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x64.ActiveCfg = Debug|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x64.Build.0 = Debug|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x86.ActiveCfg = Debug|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x86.Build.0 = Debug|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x64.ActiveCfg = Release|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x64.Build.0 = Release|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x86.ActiveCfg = Release|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x86.Build.0 = Release|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x64.ActiveCfg = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x64.Build.0 = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x86.ActiveCfg = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x86.Build.0 = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x64.ActiveCfg = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x64.Build.0 = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x86.ActiveCfg = Release|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x86.Build.0 = Release|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x64.ActiveCfg = Debug|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x64.Build.0 = Debug|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x86.ActiveCfg = Debug|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x86.Build.0 = Debug|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x64.ActiveCfg = Release|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x64.Build.0 = Release|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.ActiveCfg = Release|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.Build.0 = Release|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.ActiveCfg = Debug|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.Build.0 = Debug|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.ActiveCfg = Debug|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.Build.0 = Debug|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.ActiveCfg = Release|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.Build.0 = Release|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.ActiveCfg = Release|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.Build.0 = Release|Win32
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.ActiveCfg = Debug|x64
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.Build.0 = Debug|x64
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.ActiveCfg = Debug|Win32
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.Build.0 = Debug|Win32
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.ActiveCfg = Release|x64
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.Build.0 = Release|x64
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.ActiveCfg = Release|Win32
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {4297F93D-486A-4243-995F-7D32F59AE82A}
- EndGlobalSection
-EndGlobal
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc.vcxproj
deleted file mode 100644
index 0e2eb31..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2019/mimalloc.vcxproj
+++ /dev/null
@@ -1,257 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{ABB5EAE7-B3E6-432E-B636-333449892EA6}</ProjectGuid>
- <RootNamespace>mimalloc</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_DEBUG=3;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <CompileAs>CompileAsCpp</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- <LanguageStandard>Default</LanguageStandard>
- </ClCompile>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>Default</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_DEBUG=3;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <CompileAs>CompileAsCpp</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- <LanguageStandard>Default</LanguageStandard>
- </ClCompile>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- <Link>
- <EntryPointSymbol>
- </EntryPointSymbol>
- </Link>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- <InlineFunctionExpansion>Default</InlineFunctionExpansion>
- <CompileAs>CompileAsCpp</CompileAs>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <LanguageStandard>Default</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- <InlineFunctionExpansion>Default</InlineFunctionExpansion>
- <CompileAs>CompileAsCpp</CompileAs>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <LanguageStandard>Default</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <EntryPointSymbol>
- </EntryPointSymbol>
- </Link>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\src\alloc-aligned.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-override.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-posix.c" />
- <ClCompile Include="..\..\src\alloc.c" />
- <ClCompile Include="..\..\src\arena.c" />
- <ClCompile Include="..\..\src\bitmap.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\heap.c" />
- <ClCompile Include="..\..\src\init.c" />
- <ClCompile Include="..\..\src\prim\prim.c" />
- <ClCompile Include="..\..\src\prim\windows\prim.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\options.c" />
- <ClCompile Include="..\..\src\page-queue.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\page.c" />
- <ClCompile Include="..\..\src\random.c" />
- <ClCompile Include="..\..\src\segment-map.c" />
- <ClCompile Include="..\..\src\segment.c" />
- <ClCompile Include="..\..\src\os.c" />
- <ClCompile Include="..\..\src\stats.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="$(ProjectDir)..\..\include\mimalloc.h" />
- <ClInclude Include="$(ProjectDir)..\..\include\mimalloc-override.h" />
- <ClInclude Include="..\..\include\mimalloc-new-delete.h" />
- <ClInclude Include="..\..\include\mimalloc\atomic.h" />
- <ClInclude Include="..\..\include\mimalloc\internal.h" />
- <ClInclude Include="..\..\include\mimalloc\prim.h" />
- <ClInclude Include="..\..\include\mimalloc\track.h" />
- <ClInclude Include="..\..\include\mimalloc\types.h" />
- <ClInclude Include="..\..\src\bitmap.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-override-test.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-override-test.vcxproj
deleted file mode 100644
index a3c56f7..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-override-test.vcxproj
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FEF7868F-750E-4C21-A04D-22707CC66879}</ProjectGuid>
- <RootNamespace>mimalloc-override-test</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-override-test</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <ExceptionHandling>Sync</ExceptionHandling>
- <CompileAs>Default</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent />
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <ExceptionHandling>Sync</ExceptionHandling>
- <CompileAs>Default</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- <EntryPointSymbol>
- </EntryPointSymbol>
- <AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent />
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- <EntryPointSymbol>
- </EntryPointSymbol>
- <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\main-override.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc-override.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea7}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-override.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-override.vcxproj
deleted file mode 100644
index e2c7f71..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-override.vcxproj
+++ /dev/null
@@ -1,270 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{ABB5EAE7-B3E6-432E-B636-333449892EA7}</ProjectGuid>
- <RootNamespace>mimalloc-override</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-override</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.dll</TargetExt>
- <TargetName>mimalloc-override</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <SupportJustMyCode>false</SupportJustMyCode>
- <CompileAs>Default</CompileAs>
- </ClCompile>
- <Link>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <IgnoreSpecificDefaultLibraries>
- </IgnoreSpecificDefaultLibraries>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>Copy mimalloc-redirect32.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_DEBUG=4;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <SupportJustMyCode>false</SupportJustMyCode>
- <CompileAs>Default</CompileAs>
- </ClCompile>
- <Link>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <IgnoreSpecificDefaultLibraries>
- </IgnoreSpecificDefaultLibraries>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>copy mimalloc-redirect.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <CompileAs>Default</CompileAs>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>Copy mimalloc-redirect32.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <CompileAs>Default</CompileAs>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <AdditionalDependencies>$(ProjectDir)\..\..\bin\mimalloc-redirect.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <ModuleDefinitionFile>
- </ModuleDefinitionFile>
- <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
- <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
- </Link>
- <PostBuildEvent>
- <Command>COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)"</Command>
- </PostBuildEvent>
- <PostBuildEvent>
- <Message>copy mimalloc-redirect.dll to the output directory</Message>
- </PostBuildEvent>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClInclude Include="$(ProjectDir)..\..\include\mimalloc.h" />
- <ClInclude Include="..\..\include\mimalloc-etw-gen.h" />
- <ClInclude Include="..\..\include\mimalloc-etw.h" />
- <ClInclude Include="..\..\include\mimalloc-new-delete.h" />
- <ClInclude Include="..\..\include\mimalloc-override.h" />
- <ClInclude Include="..\..\include\mimalloc\atomic.h" />
- <ClInclude Include="..\..\include\mimalloc\internal.h" />
- <ClInclude Include="..\..\include\mimalloc\prim.h" />
- <ClInclude Include="..\..\include\mimalloc\track.h" />
- <ClInclude Include="..\..\include\mimalloc\types.h" />
- <ClInclude Include="..\..\src\bitmap.h" />
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\src\alloc-aligned.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-override.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-posix.c" />
- <ClCompile Include="..\..\src\alloc.c" />
- <ClCompile Include="..\..\src\arena.c" />
- <ClCompile Include="..\..\src\bitmap.c" />
- <ClCompile Include="..\..\src\heap.c" />
- <ClCompile Include="..\..\src\init.c" />
- <ClCompile Include="..\..\src\prim\prim.c" />
- <ClCompile Include="..\..\src\prim\windows\prim.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\options.c" />
- <ClCompile Include="..\..\src\os.c" />
- <ClCompile Include="..\..\src\page-queue.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\page.c" />
- <ClCompile Include="..\..\src\random.c" />
- <ClCompile Include="..\..\src\segment-map.c" />
- <ClCompile Include="..\..\src\segment.c" />
- <ClCompile Include="..\..\src\stats.c" />
- </ItemGroup>
- <ItemGroup>
- <None Include="..\..\include\mimalloc-etw-gen.man" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test-api.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test-api.vcxproj
deleted file mode 100644
index d9b9cae..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test-api.vcxproj
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FFF7958F-750E-4C21-A04D-22707CC66878}</ProjectGuid>
- <RootNamespace>mimalloc-test-api</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-test-api</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\test-api-fill.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\test\test-api.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea6}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test-stress.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test-stress.vcxproj
deleted file mode 100644
index 14bd3e6..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test-stress.vcxproj
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FEF7958F-750E-4C21-A04D-22707CC66878}</ProjectGuid>
- <RootNamespace>mimalloc-test-stress</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-test-stress</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\test-stress.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc-override.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea7}</Project>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test.vcxproj
deleted file mode 100644
index 506dd7d..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc-test.vcxproj
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{FEF7858F-750E-4C21-A04D-22707CC66878}</ProjectGuid>
- <RootNamespace>mimalloctest</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc-test</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ProjectReference Include="mimalloc.vcxproj">
- <Project>{abb5eae7-b3e6-432e-b636-333449892ea6}</Project>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\..\test\main-override-static.c" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc.sln b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc.sln
deleted file mode 100644
index 6ff01d3..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc.sln
+++ /dev/null
@@ -1,81 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29709.97
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc", "mimalloc.vcxproj", "{ABB5EAE7-B3E6-432E-B636-333449892EA6}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-test", "mimalloc-test.vcxproj", "{FEF7858F-750E-4C21-A04D-22707CC66878}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-override", "mimalloc-override.vcxproj", "{ABB5EAE7-B3E6-432E-B636-333449892EA7}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-override-test", "mimalloc-override-test.vcxproj", "{FEF7868F-750E-4C21-A04D-22707CC66879}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-test-stress", "mimalloc-test-stress.vcxproj", "{FEF7958F-750E-4C21-A04D-22707CC66878}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-test-api", "mimalloc-test-api.vcxproj", "{FFF7958F-750E-4C21-A04D-22707CC66878}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x64.ActiveCfg = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x64.Build.0 = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x86.ActiveCfg = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Debug|x86.Build.0 = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x64.ActiveCfg = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x64.Build.0 = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x86.ActiveCfg = Release|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA6}.Release|x86.Build.0 = Release|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x64.ActiveCfg = Debug|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x64.Build.0 = Debug|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x86.ActiveCfg = Debug|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Debug|x86.Build.0 = Debug|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x64.ActiveCfg = Release|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x64.Build.0 = Release|x64
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x86.ActiveCfg = Release|Win32
- {FEF7858F-750E-4C21-A04D-22707CC66878}.Release|x86.Build.0 = Release|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x64.ActiveCfg = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x64.Build.0 = Debug|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x86.ActiveCfg = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Debug|x86.Build.0 = Debug|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x64.ActiveCfg = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x64.Build.0 = Release|x64
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x86.ActiveCfg = Release|Win32
- {ABB5EAE7-B3E6-432E-B636-333449892EA7}.Release|x86.Build.0 = Release|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x64.ActiveCfg = Debug|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x64.Build.0 = Debug|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x86.ActiveCfg = Debug|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Debug|x86.Build.0 = Debug|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x64.ActiveCfg = Release|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x64.Build.0 = Release|x64
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.ActiveCfg = Release|Win32
- {FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.Build.0 = Release|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.ActiveCfg = Debug|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.Build.0 = Debug|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.ActiveCfg = Debug|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.Build.0 = Debug|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.ActiveCfg = Release|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.Build.0 = Release|x64
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.ActiveCfg = Release|Win32
- {FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.Build.0 = Release|Win32
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.ActiveCfg = Debug|x64
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.Build.0 = Debug|x64
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.ActiveCfg = Debug|Win32
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.Build.0 = Debug|Win32
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.ActiveCfg = Release|x64
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.Build.0 = Release|x64
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.ActiveCfg = Release|Win32
- {FFF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {4297F93D-486A-4243-995F-7D32F59AE82A}
- EndGlobalSection
-EndGlobal
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc.vcxproj b/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc.vcxproj
deleted file mode 100644
index c298550..0000000
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/ide/vs2022/mimalloc.vcxproj
+++ /dev/null
@@ -1,257 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <VCProjectVersion>15.0</VCProjectVersion>
- <ProjectGuid>{ABB5EAE7-B3E6-432E-B636-333449892EA6}</ProjectGuid>
- <RootNamespace>mimalloc</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- <ProjectName>mimalloc</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v143</PlatformToolset>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="Shared">
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
- <IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
- <TargetExt>.lib</TargetExt>
- <TargetName>mimalloc-static</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>Default</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_DEBUG=3;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <CompileAs>CompileAsCpp</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- <LanguageStandard>stdcpp20</LanguageStandard>
- </ClCompile>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>Disabled</Optimization>
- <SDLCheck>true</SDLCheck>
- <ConformanceMode>Default</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>MI_DEBUG=4;MI_SECURE=0;%(PreprocessorDefinitions);</PreprocessorDefinitions>
- <CompileAs>CompileAsCpp</CompileAs>
- <SupportJustMyCode>false</SupportJustMyCode>
- <LanguageStandard>stdcpp20</LanguageStandard>
- </ClCompile>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- <Link>
- <EntryPointSymbol>
- </EntryPointSymbol>
- </Link>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <ConformanceMode>Default</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- <InlineFunctionExpansion>Default</InlineFunctionExpansion>
- <CompileAs>CompileAsCpp</CompileAs>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <LanguageStandard>stdcpp20</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- </Link>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <WarningLevel>Level4</WarningLevel>
- <Optimization>MaxSpeed</Optimization>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <ConformanceMode>Default</ConformanceMode>
- <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>%(PreprocessorDefinitions);NDEBUG</PreprocessorDefinitions>
- <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
- <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <BufferSecurityCheck>false</BufferSecurityCheck>
- <InlineFunctionExpansion>Default</InlineFunctionExpansion>
- <CompileAs>CompileAsCpp</CompileAs>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <LanguageStandard>stdcpp20</LanguageStandard>
- </ClCompile>
- <Link>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <EntryPointSymbol>
- </EntryPointSymbol>
- </Link>
- <PostBuildEvent>
- <Command>
- </Command>
- </PostBuildEvent>
- <Lib>
- <AdditionalLibraryDirectories>
- </AdditionalLibraryDirectories>
- <AdditionalDependencies>
- </AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\src\alloc-aligned.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-override.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\alloc-posix.c" />
- <ClCompile Include="..\..\src\alloc.c" />
- <ClCompile Include="..\..\src\arena.c" />
- <ClCompile Include="..\..\src\bitmap.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\heap.c" />
- <ClCompile Include="..\..\src\init.c" />
- <ClCompile Include="..\..\src\prim\prim.c" />
- <ClCompile Include="..\..\src\prim\windows\prim.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\options.c" />
- <ClCompile Include="..\..\src\page-queue.c">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
- </ClCompile>
- <ClCompile Include="..\..\src\page.c" />
- <ClCompile Include="..\..\src\random.c" />
- <ClCompile Include="..\..\src\segment-map.c" />
- <ClCompile Include="..\..\src\segment.c" />
- <ClCompile Include="..\..\src\os.c" />
- <ClCompile Include="..\..\src\stats.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="$(ProjectDir)..\..\include\mimalloc.h" />
- <ClInclude Include="$(ProjectDir)..\..\include\mimalloc-override.h" />
- <ClInclude Include="..\..\include\mimalloc-new-delete.h" />
- <ClInclude Include="..\..\include\mimalloc\atomic.h" />
- <ClInclude Include="..\..\include\mimalloc\internal.h" />
- <ClInclude Include="..\..\include\mimalloc\prim.h" />
- <ClInclude Include="..\..\include\mimalloc\track.h" />
- <ClInclude Include="..\..\include\mimalloc\types.h" />
- <ClInclude Include="..\..\src\bitmap.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc.h b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc.h
index f77c2ea..8446d99 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc.h
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc.h
@@ -8,7 +8,7 @@ terms of the MIT license. A copy of the license can be found in the file
#ifndef MIMALLOC_H
#define MIMALLOC_H
-#define MI_MALLOC_VERSION 212 // major + 2 digits minor
+#define MI_MALLOC_VERSION 216 // major + 2 digits minor
// ------------------------------------------------------
// Compiler specific attributes
@@ -275,7 +275,7 @@ mi_decl_export int mi_reserve_huge_os_pages_at(size_t pages, int numa_node, size
mi_decl_export int mi_reserve_os_memory(size_t size, bool commit, bool allow_large) mi_attr_noexcept;
mi_decl_export bool mi_manage_os_memory(void* start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node) mi_attr_noexcept;
-mi_decl_export void mi_debug_show_arenas(void) mi_attr_noexcept;
+mi_decl_export void mi_debug_show_arenas(bool show_inuse, bool show_abandoned, bool show_purge) mi_attr_noexcept;
// Experimental: heaps associated with specific memory arena's
typedef int mi_arena_id_t;
@@ -318,40 +318,43 @@ mi_decl_export int mi_reserve_huge_os_pages(size_t pages, double max_secs, size
typedef enum mi_option_e {
// stable options
- mi_option_show_errors, // print error messages
- mi_option_show_stats, // print statistics on termination
- mi_option_verbose, // print verbose messages
- // the following options are experimental (see src/options.h)
- mi_option_eager_commit, // eager commit segments? (after `eager_commit_delay` segments) (=1)
- mi_option_arena_eager_commit, // eager commit arenas? Use 2 to enable just on overcommit systems (=2)
- mi_option_purge_decommits, // should a memory purge decommit (or only reset) (=1)
- mi_option_allow_large_os_pages, // allow large (2MiB) OS pages, implies eager commit
- mi_option_reserve_huge_os_pages, // reserve N huge OS pages (1GiB/page) at startup
- mi_option_reserve_huge_os_pages_at, // reserve huge OS pages at a specific NUMA node
- mi_option_reserve_os_memory, // reserve specified amount of OS memory in an arena at startup
+ mi_option_show_errors, // print error messages
+ mi_option_show_stats, // print statistics on termination
+ mi_option_verbose, // print verbose messages
+ // advanced options
+ mi_option_eager_commit, // eager commit segments? (after `eager_commit_delay` segments) (=1)
+ mi_option_arena_eager_commit, // eager commit arenas? Use 2 to enable just on overcommit systems (=2)
+ mi_option_purge_decommits, // should a memory purge decommit? (=1). Set to 0 to use memory reset on a purge (instead of decommit)
+ mi_option_allow_large_os_pages, // allow large (2 or 4 MiB) OS pages, implies eager commit. If false, also disables THP for the process.
+ mi_option_reserve_huge_os_pages, // reserve N huge OS pages (1GiB pages) at startup
+ mi_option_reserve_huge_os_pages_at, // reserve huge OS pages at a specific NUMA node
+ mi_option_reserve_os_memory, // reserve specified amount of OS memory in an arena at startup
mi_option_deprecated_segment_cache,
mi_option_deprecated_page_reset,
- mi_option_abandoned_page_purge, // immediately purge delayed purges on thread termination
+ mi_option_abandoned_page_purge, // immediately purge delayed purges on thread termination
mi_option_deprecated_segment_reset,
- mi_option_eager_commit_delay,
- mi_option_purge_delay, // memory purging is delayed by N milli seconds; use 0 for immediate purging or -1 for no purging at all.
- mi_option_use_numa_nodes, // 0 = use all available numa nodes, otherwise use at most N nodes.
- mi_option_limit_os_alloc, // 1 = do not use OS memory for allocation (but only programmatically reserved arenas)
- mi_option_os_tag, // tag used for OS logging (macOS only for now)
- mi_option_max_errors, // issue at most N error messages
- mi_option_max_warnings, // issue at most N warning messages
- mi_option_max_segment_reclaim,
- mi_option_destroy_on_exit, // if set, release all memory on exit; sometimes used for dynamic unloading but can be unsafe.
- mi_option_arena_reserve, // initial memory size in KiB for arena reservation (1GiB on 64-bit)
- mi_option_arena_purge_mult,
+ mi_option_eager_commit_delay, // the first N segments per thread are not eagerly committed (but per page in the segment on demand)
+ mi_option_purge_delay, // memory purging is delayed by N milli seconds; use 0 for immediate purging or -1 for no purging at all. (=10)
+ mi_option_use_numa_nodes, // 0 = use all available numa nodes, otherwise use at most N nodes.
+ mi_option_disallow_os_alloc, // 1 = do not use OS memory for allocation (but only programmatically reserved arenas)
+ mi_option_os_tag, // tag used for OS logging (macOS only for now) (=100)
+ mi_option_max_errors, // issue at most N error messages
+ mi_option_max_warnings, // issue at most N warning messages
+ mi_option_max_segment_reclaim, // max. percentage of the abandoned segments can be reclaimed per try (=10%)
+ mi_option_destroy_on_exit, // if set, release all memory on exit; sometimes used for dynamic unloading but can be unsafe
+ mi_option_arena_reserve, // initial memory size in KiB for arena reservation (= 1 GiB on 64-bit)
+ mi_option_arena_purge_mult, // multiplier for `purge_delay` for the purging delay for arenas (=10)
mi_option_purge_extend_delay,
+ mi_option_abandoned_reclaim_on_free, // allow to reclaim an abandoned segment on a free (=1)
+ mi_option_disallow_arena_alloc, // 1 = do not use arena's for allocation (except if using specific arena id's)
_mi_option_last,
// legacy option names
mi_option_large_os_pages = mi_option_allow_large_os_pages,
mi_option_eager_region_commit = mi_option_arena_eager_commit,
mi_option_reset_decommits = mi_option_purge_decommits,
mi_option_reset_delay = mi_option_purge_delay,
- mi_option_abandoned_page_reset = mi_option_abandoned_page_purge
+ mi_option_abandoned_page_reset = mi_option_abandoned_page_purge,
+ mi_option_limit_os_alloc = mi_option_disallow_os_alloc
} mi_option_t;
@@ -494,7 +497,7 @@ template<class T, bool _mi_destroy> struct _mi_heap_stl_allocator_common : publi
using typename _mi_stl_allocator_common<T>::value_type;
using typename _mi_stl_allocator_common<T>::pointer;
- _mi_heap_stl_allocator_common(mi_heap_t* hp) : heap(hp) { } /* will not delete nor destroy the passed in heap */
+ _mi_heap_stl_allocator_common(mi_heap_t* hp) : heap(hp, [](mi_heap_t*) {}) {} /* will not delete nor destroy the passed in heap */
#if (__cplusplus >= 201703L) // C++17
mi_decl_nodiscard T* allocate(size_type count) { return static_cast<T*>(mi_heap_alloc_new_n(this->heap.get(), count, sizeof(T))); }
@@ -513,7 +516,7 @@ template<class T, bool _mi_destroy> struct _mi_heap_stl_allocator_common : publi
protected:
std::shared_ptr<mi_heap_t> heap;
template<class U, bool D> friend struct _mi_heap_stl_allocator_common;
-
+
_mi_heap_stl_allocator_common() {
mi_heap_t* hp = mi_heap_new();
this->heap.reset(hp, (_mi_destroy ? &heap_destroy : &heap_delete)); /* calls heap_delete/destroy when the refcount drops to zero */
@@ -530,7 +533,7 @@ private:
template<class T> struct mi_heap_stl_allocator : public _mi_heap_stl_allocator_common<T, false> {
using typename _mi_heap_stl_allocator_common<T, false>::size_type;
mi_heap_stl_allocator() : _mi_heap_stl_allocator_common<T, false>() { } // creates fresh heap that is deleted when the destructor is called
- mi_heap_stl_allocator(mi_heap_t* hp) : _mi_heap_stl_allocator_common<T, false>(hp) { } // no delete nor destroy on the passed in heap
+ mi_heap_stl_allocator(mi_heap_t* hp) : _mi_heap_stl_allocator_common<T, false>(hp) { } // no delete nor destroy on the passed in heap
template<class U> mi_heap_stl_allocator(const mi_heap_stl_allocator<U>& x) mi_attr_noexcept : _mi_heap_stl_allocator_common<T, false>(x) { }
mi_heap_stl_allocator select_on_container_copy_construction() const { return *this; }
@@ -547,7 +550,7 @@ template<class T1, class T2> bool operator!=(const mi_heap_stl_allocator<T1>& x,
template<class T> struct mi_heap_destroy_stl_allocator : public _mi_heap_stl_allocator_common<T, true> {
using typename _mi_heap_stl_allocator_common<T, true>::size_type;
mi_heap_destroy_stl_allocator() : _mi_heap_stl_allocator_common<T, true>() { } // creates fresh heap that is destroyed when the destructor is called
- mi_heap_destroy_stl_allocator(mi_heap_t* hp) : _mi_heap_stl_allocator_common<T, true>(hp) { } // no delete nor destroy on the passed in heap
+ mi_heap_destroy_stl_allocator(mi_heap_t* hp) : _mi_heap_stl_allocator_common<T, true>(hp) { } // no delete nor destroy on the passed in heap
template<class U> mi_heap_destroy_stl_allocator(const mi_heap_destroy_stl_allocator<U>& x) mi_attr_noexcept : _mi_heap_stl_allocator_common<T, true>(x) { }
mi_heap_destroy_stl_allocator select_on_container_copy_construction() const { return *this; }
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/atomic.h b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/atomic.h
index fe418fa..807c4da 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/atomic.h
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/atomic.h
@@ -23,8 +23,10 @@ terms of the MIT license. A copy of the license can be found in the file
#define _Atomic(tp) std::atomic<tp>
#define mi_atomic(name) std::atomic_##name
#define mi_memory_order(name) std::memory_order_##name
-#if !defined(ATOMIC_VAR_INIT) || (__cplusplus >= 202002L) // c++20, see issue #571
- #define MI_ATOMIC_VAR_INIT(x) x
+#if (__cplusplus >= 202002L) // c++20, see issue #571
+#define MI_ATOMIC_VAR_INIT(x) x
+#elif !defined(ATOMIC_VAR_INIT)
+#define MI_ATOMIC_VAR_INIT(x) x
#else
#define MI_ATOMIC_VAR_INIT(x) ATOMIC_VAR_INIT(x)
#endif
@@ -39,7 +41,9 @@ terms of the MIT license. A copy of the license can be found in the file
#include <stdatomic.h>
#define mi_atomic(name) atomic_##name
#define mi_memory_order(name) memory_order_##name
-#if !defined(ATOMIC_VAR_INIT) || (__STDC_VERSION__ >= 201710L) // c17, see issue #735
+#if (__STDC_VERSION__ >= 201710L) // c17, see issue #735
+ #define MI_ATOMIC_VAR_INIT(x) x
+#elif !defined(ATOMIC_VAR_INIT)
#define MI_ATOMIC_VAR_INIT(x) x
#else
#define MI_ATOMIC_VAR_INIT(x) ATOMIC_VAR_INIT(x)
@@ -129,7 +133,9 @@ static inline void mi_atomic_maxi64_relaxed(volatile int64_t* p, int64_t x) {
#elif defined(_MSC_VER)
// MSVC C compilation wrapper that uses Interlocked operations to model C11 atomics.
+#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
+#endif
#include <windows.h>
#include <intrin.h>
#ifdef _WIN64
@@ -323,7 +329,9 @@ static inline void mi_atomic_yield(void) {
std::this_thread::yield();
}
#elif defined(_WIN32)
+#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
+#endif
#include <windows.h>
static inline void mi_atomic_yield(void) {
YieldProcessor();
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/internal.h b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/internal.h
index 00d2626..44f4caf 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/internal.h
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/internal.h
@@ -30,14 +30,17 @@ terms of the MIT license. A copy of the license can be found in the file
#define mi_decl_noinline __declspec(noinline)
#define mi_decl_thread __declspec(thread)
#define mi_decl_cache_align __declspec(align(MI_CACHE_LINE))
+#define mi_decl_weak
#elif (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__clang__) // includes clang and icc
#define mi_decl_noinline __attribute__((noinline))
#define mi_decl_thread __thread
#define mi_decl_cache_align __attribute__((aligned(MI_CACHE_LINE)))
+#define mi_decl_weak __attribute__((weak))
#else
#define mi_decl_noinline
#define mi_decl_thread __thread // hope for the best :-)
#define mi_decl_cache_align
+#define mi_decl_weak
#endif
#if defined(__EMSCRIPTEN__) && !defined(__wasi__)
@@ -88,7 +91,7 @@ void _mi_thread_data_collect(void);
// os.c
void _mi_os_init(void); // called from process init
-void* _mi_os_alloc(size_t size, mi_memid_t* memid, mi_stats_t* stats);
+void* _mi_os_alloc(size_t size, mi_memid_t* memid, mi_stats_t* stats);
void _mi_os_free(void* p, size_t size, mi_memid_t memid, mi_stats_t* stats);
void _mi_os_free_ex(void* p, size_t size, bool still_committed, mi_memid_t memid, mi_stats_t* stats);
@@ -122,9 +125,21 @@ void* _mi_arena_alloc(size_t size, bool commit, bool allow_large, mi_arena_
void* _mi_arena_alloc_aligned(size_t size, size_t alignment, size_t align_offset, bool commit, bool allow_large, mi_arena_id_t req_arena_id, mi_memid_t* memid, mi_os_tld_t* tld);
bool _mi_arena_memid_is_suitable(mi_memid_t memid, mi_arena_id_t request_arena_id);
bool _mi_arena_contains(const void* p);
-void _mi_arena_collect(bool force_purge, mi_stats_t* stats);
+void _mi_arenas_collect(bool force_purge, mi_stats_t* stats);
void _mi_arena_unsafe_destroy_all(mi_stats_t* stats);
+bool _mi_arena_segment_clear_abandoned(mi_segment_t* segment);
+void _mi_arena_segment_mark_abandoned(mi_segment_t* segment);
+size_t _mi_arena_segment_abandoned_count(void);
+
+typedef struct mi_arena_field_cursor_s { // abstract
+ mi_arena_id_t start;
+ int count;
+ size_t bitmap_idx;
+} mi_arena_field_cursor_t;
+void _mi_arena_field_cursor_init(mi_heap_t* heap, mi_arena_field_cursor_t* current);
+mi_segment_t* _mi_arena_segment_clear_abandoned_next(mi_arena_field_cursor_t* previous);
+
// "segment-map.c"
void _mi_segment_map_allocated_at(const mi_segment_t* segment);
void _mi_segment_map_freed_at(const mi_segment_t* segment);
@@ -134,7 +149,7 @@ mi_page_t* _mi_segment_page_alloc(mi_heap_t* heap, size_t block_size, size_t pag
void _mi_segment_page_free(mi_page_t* page, bool force, mi_segments_tld_t* tld);
void _mi_segment_page_abandon(mi_page_t* page, mi_segments_tld_t* tld);
bool _mi_segment_try_reclaim_abandoned( mi_heap_t* heap, bool try_all, mi_segments_tld_t* tld);
-void _mi_segment_thread_collect(mi_segments_tld_t* tld);
+void _mi_segment_collect(mi_segment_t* segment, bool force, mi_segments_tld_t* tld);
#if MI_HUGE_PAGE_ABANDON
void _mi_segment_huge_page_free(mi_segment_t* segment, mi_page_t* page, mi_block_t* block);
@@ -146,6 +161,7 @@ uint8_t* _mi_segment_page_start(const mi_segment_t* segment, const mi_page_t*
void _mi_abandoned_reclaim_all(mi_heap_t* heap, mi_segments_tld_t* tld);
void _mi_abandoned_await_readers(void);
void _mi_abandoned_collect(mi_heap_t* heap, bool force, mi_segments_tld_t* tld);
+bool _mi_segment_attempt_reclaim(mi_heap_t* heap, mi_segment_t* segment);
// "page.c"
void* _mi_malloc_generic(mi_heap_t* heap, size_t size, bool zero, size_t huge_alignment) mi_attr_noexcept mi_attr_malloc;
@@ -183,23 +199,28 @@ mi_msecs_t _mi_clock_end(mi_msecs_t start);
mi_msecs_t _mi_clock_start(void);
// "alloc.c"
-void* _mi_page_malloc(mi_heap_t* heap, mi_page_t* page, size_t size, bool zero) mi_attr_noexcept; // called from `_mi_malloc_generic`
+void* _mi_page_malloc_zero(mi_heap_t* heap, mi_page_t* page, size_t size, bool zero) mi_attr_noexcept; // called from `_mi_malloc_generic`
+void* _mi_page_malloc(mi_heap_t* heap, mi_page_t* page, size_t size) mi_attr_noexcept; // called from `_mi_heap_malloc_aligned`
+void* _mi_page_malloc_zeroed(mi_heap_t* heap, mi_page_t* page, size_t size) mi_attr_noexcept; // called from `_mi_heap_malloc_aligned`
void* _mi_heap_malloc_zero(mi_heap_t* heap, size_t size, bool zero) mi_attr_noexcept;
void* _mi_heap_malloc_zero_ex(mi_heap_t* heap, size_t size, bool zero, size_t huge_alignment) mi_attr_noexcept; // called from `_mi_heap_malloc_aligned`
void* _mi_heap_realloc_zero(mi_heap_t* heap, void* p, size_t newsize, bool zero) mi_attr_noexcept;
-mi_block_t* _mi_page_ptr_unalign(const mi_segment_t* segment, const mi_page_t* page, const void* p);
+mi_block_t* _mi_page_ptr_unalign(const mi_page_t* page, const void* p);
bool _mi_free_delayed_block(mi_block_t* block);
-void _mi_free_generic(const mi_segment_t* segment, mi_page_t* page, bool is_local, void* p) mi_attr_noexcept; // for runtime integration
+void _mi_free_generic(mi_segment_t* segment, mi_page_t* page, bool is_local, void* p) mi_attr_noexcept; // for runtime integration
void _mi_padding_shrink(const mi_page_t* page, const mi_block_t* block, const size_t min_size);
-// option.c, c primitives
+// "libc.c"
+#include <stdarg.h>
+void _mi_vsnprintf(char* buf, size_t bufsize, const char* fmt, va_list args);
+void _mi_snprintf(char* buf, size_t buflen, const char* fmt, ...);
char _mi_toupper(char c);
int _mi_strnicmp(const char* s, const char* t, size_t n);
void _mi_strlcpy(char* dest, const char* src, size_t dest_size);
void _mi_strlcat(char* dest, const char* src, size_t dest_size);
size_t _mi_strlen(const char* s);
size_t _mi_strnlen(const char* s, size_t max_len);
-
+bool _mi_getenv(const char* name, char* result, size_t result_size);
#if MI_DEBUG>1
bool _mi_page_is_valid(mi_page_t* page);
@@ -308,6 +329,17 @@ static inline uintptr_t _mi_align_down(uintptr_t sz, size_t alignment) {
}
}
+// Align a pointer upwards
+static inline void* mi_align_up_ptr(void* p, size_t alignment) {
+ return (void*)_mi_align_up((uintptr_t)p, alignment);
+}
+
+// Align a pointer downwards
+static inline void* mi_align_down_ptr(void* p, size_t alignment) {
+ return (void*)_mi_align_down((uintptr_t)p, alignment);
+}
+
+
// Divide upwards: `s <= _mi_divide_up(s,d)*d < s+d`.
static inline uintptr_t _mi_divide_up(uintptr_t size, size_t divider) {
mi_assert_internal(divider != 0);
@@ -407,9 +439,14 @@ static inline mi_page_t* _mi_heap_get_free_small_page(mi_heap_t* heap, size_t si
// Large aligned blocks may be aligned at N*MI_SEGMENT_SIZE (inside a huge segment > MI_SEGMENT_SIZE),
// and we need align "down" to the segment info which is `MI_SEGMENT_SIZE` bytes before it;
// therefore we align one byte before `p`.
+// We check for NULL afterwards on 64-bit systems to improve codegen for `mi_free`.
static inline mi_segment_t* _mi_ptr_segment(const void* p) {
- mi_assert_internal(p != NULL);
- return (mi_segment_t*)(((uintptr_t)p - 1) & ~MI_SEGMENT_MASK);
+ mi_segment_t* const segment = (mi_segment_t*)(((uintptr_t)p - 1) & ~MI_SEGMENT_MASK);
+ #if MI_INTPTR_SIZE <= 4
+ return (p==NULL ? NULL : segment);
+ #else
+ return ((intptr_t)segment <= 0 ? NULL : segment);
+ #endif
}
static inline mi_page_t* mi_slice_to_page(mi_slice_t* s) {
@@ -424,7 +461,8 @@ static inline mi_slice_t* mi_page_to_slice(mi_page_t* p) {
// Segment belonging to a page
static inline mi_segment_t* _mi_page_segment(const mi_page_t* page) {
- mi_segment_t* segment = _mi_ptr_segment(page);
+ mi_assert_internal(page!=NULL);
+ mi_segment_t* segment = _mi_ptr_segment(page);
mi_assert_internal(segment == NULL || ((mi_slice_t*)page >= segment->slices && (mi_slice_t*)page < segment->slices + segment->slice_entries));
return segment;
}
@@ -452,31 +490,28 @@ static inline mi_page_t* _mi_segment_page_of(const mi_segment_t* segment, const
}
// Quick page start for initialized pages
-static inline uint8_t* _mi_page_start(const mi_segment_t* segment, const mi_page_t* page, size_t* page_size) {
- return _mi_segment_page_start(segment, page, page_size);
+static inline uint8_t* mi_page_start(const mi_page_t* page) {
+ mi_assert_internal(page->page_start != NULL);
+ mi_assert_expensive(_mi_segment_page_start(_mi_page_segment(page),page,NULL) == page->page_start);
+ return page->page_start;
}
// Get the page containing the pointer
static inline mi_page_t* _mi_ptr_page(void* p) {
+ mi_assert_internal(p!=NULL);
return _mi_segment_page_of(_mi_ptr_segment(p), p);
}
// Get the block size of a page (special case for huge objects)
static inline size_t mi_page_block_size(const mi_page_t* page) {
- const size_t bsize = page->xblock_size;
- mi_assert_internal(bsize > 0);
- if mi_likely(bsize < MI_HUGE_BLOCK_SIZE) {
- return bsize;
- }
- else {
- size_t psize;
- _mi_segment_page_start(_mi_page_segment(page), page, &psize);
- return psize;
- }
+ mi_assert_internal(page->block_size > 0);
+ return page->block_size;
}
static inline bool mi_page_is_huge(const mi_page_t* page) {
- return (_mi_page_segment(page)->kind == MI_SEGMENT_HUGE);
+ mi_assert_internal((page->is_huge && _mi_page_segment(page)->kind == MI_SEGMENT_HUGE) ||
+ (!page->is_huge && _mi_page_segment(page)->kind != MI_SEGMENT_HUGE));
+ return page->is_huge;
}
// Get the usable block size of a page without fixed padding.
@@ -726,12 +761,12 @@ size_t _mi_commit_mask_next_run(const mi_commit_mask_t* cm, size_t* idx);
#define mi_commit_mask_foreach(cm,idx,count) \
idx = 0; \
- while ((count = _mi_commit_mask_next_run(cm,&idx)) > 0) {
-
+ while ((count = _mi_commit_mask_next_run(cm,&idx)) > 0) {
+
#define mi_commit_mask_foreach_end() \
idx += count; \
}
-
+
/* -----------------------------------------------------------
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/prim.h b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/prim.h
index 9e56069..4d813b7 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/prim.h
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/prim.h
@@ -14,17 +14,17 @@ terms of the MIT license. A copy of the license can be found in the file
// Each OS/host needs to implement these primitives, see `src/prim`
// for implementations on Window, macOS, WASI, and Linux/Unix.
//
-// note: on all primitive functions, we always have result parameters != NUL, and:
+// note: on all primitive functions, we always have result parameters != NULL, and:
// addr != NULL and page aligned
// size > 0 and page aligned
-// return value is an error code an int where 0 is success.
+// the return value is an error code as an `int` where 0 is success
// --------------------------------------------------------------------------
// OS memory configuration
typedef struct mi_os_mem_config_s {
- size_t page_size; // 4KiB
- size_t large_page_size; // 2MiB
- size_t alloc_granularity; // smallest allocation size (on Windows 64KiB)
+ size_t page_size; // default to 4KiB
+ size_t large_page_size; // 0 if not supported, usually 2MiB (4MiB on Windows)
+ size_t alloc_granularity; // smallest allocation size (usually 4KiB, on Windows 64KiB)
bool has_overcommit; // can we reserve more memory than can be actually committed?
bool must_free_whole; // must allocated blocks be freed as a whole (false for mmap, true for VirtualAlloc)
bool has_virtual_reserve; // supports virtual address space reservation? (if true we can reserve virtual address space without using commit or physical memory)
@@ -35,10 +35,10 @@ void _mi_prim_mem_init( mi_os_mem_config_t* config );
// Free OS memory
int _mi_prim_free(void* addr, size_t size );
-
+
// Allocate OS memory. Return NULL on error.
// The `try_alignment` is just a hint and the returned pointer does not have to be aligned.
-// If `commit` is false, the virtual memory range only needs to be reserved (with no access)
+// If `commit` is false, the virtual memory range only needs to be reserved (with no access)
// which will later be committed explicitly using `_mi_prim_commit`.
// `is_zero` is set to true if the memory was zero initialized (as on most OS's)
// pre: !commit => !allow_large
@@ -82,11 +82,11 @@ mi_msecs_t _mi_prim_clock_now(void);
typedef struct mi_process_info_s {
mi_msecs_t elapsed;
mi_msecs_t utime;
- mi_msecs_t stime;
- size_t current_rss;
- size_t peak_rss;
+ mi_msecs_t stime;
+ size_t current_rss;
+ size_t peak_rss;
size_t current_commit;
- size_t peak_commit;
+ size_t peak_commit;
size_t page_faults;
} mi_process_info_t;
@@ -117,7 +117,7 @@ void _mi_prim_thread_associate_default_heap(mi_heap_t* heap);
//-------------------------------------------------------------------
// Thread id: `_mi_prim_thread_id()`
-//
+//
// Getting the thread id should be performant as it is called in the
// fast path of `_mi_free` and we specialize for various platforms as
// inlined definitions. Regular code should call `init.c:_mi_thread_id()`.
@@ -125,33 +125,24 @@ void _mi_prim_thread_associate_default_heap(mi_heap_t* heap);
// for each thread (unequal to zero).
//-------------------------------------------------------------------
-// defined in `init.c`; do not use these directly
-extern mi_decl_thread mi_heap_t* _mi_heap_default; // default heap to allocate from
-extern bool _mi_process_is_initialized; // has mi_process_init been called?
-
-static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept;
-
-#if defined(_WIN32)
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept {
- // Windows: works on Intel and ARM in both 32- and 64-bit
- return (uintptr_t)NtCurrentTeb();
-}
-
-// We use assembly for a fast thread id on the main platforms. The TLS layout depends on
-// both the OS and libc implementation so we use specific tests for each main platform.
+// On some libc + platform combinations we can directly access a thread-local storage (TLS) slot.
+// The TLS layout depends on both the OS and libc implementation so we use specific tests for each main platform.
// If you test on another platform and it works please send a PR :-)
// see also https://akkadia.org/drepper/tls.pdf for more info on the TLS register.
-#elif defined(__GNUC__) && ( \
+//
+// Note: we would like to prefer `__builtin_thread_pointer()` nowadays instead of using assembly,
+// but unfortunately we can not detect support reliably (see issue #883)
+// We also use it on Apple OS as we use a TLS slot for the default heap there.
+#if defined(__GNUC__) && ( \
(defined(__GLIBC__) && (defined(__x86_64__) || defined(__i386__) || defined(__arm__) || defined(__aarch64__))) \
- || (defined(__APPLE__) && (defined(__x86_64__) || defined(__aarch64__))) \
+ || (defined(__APPLE__) && (defined(__x86_64__) || defined(__aarch64__) || defined(__POWERPC__))) \
|| (defined(__BIONIC__) && (defined(__x86_64__) || defined(__i386__) || defined(__arm__) || defined(__aarch64__))) \
|| (defined(__FreeBSD__) && (defined(__x86_64__) || defined(__i386__) || defined(__aarch64__))) \
|| (defined(__OpenBSD__) && (defined(__x86_64__) || defined(__i386__) || defined(__aarch64__))) \
)
+#define MI_HAS_TLS_SLOT
+
static inline void* mi_prim_tls_slot(size_t slot) mi_attr_noexcept {
void* res;
const size_t ofs = (slot*sizeof(void*));
@@ -175,6 +166,9 @@ static inline void* mi_prim_tls_slot(size_t slot) mi_attr_noexcept {
__asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb));
#endif
res = tcb[slot];
+ #elif defined(__APPLE__) && defined(__POWERPC__) // ppc, issue #781
+ MI_UNUSED(ofs);
+ res = pthread_getspecific(slot);
#endif
return res;
}
@@ -202,9 +196,52 @@ static inline void mi_prim_tls_slot_set(size_t slot, void* value) mi_attr_noexce
__asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb));
#endif
tcb[slot] = value;
+ #elif defined(__APPLE__) && defined(__POWERPC__) // ppc, issue #781
+ MI_UNUSED(ofs);
+ pthread_setspecific(slot, value);
#endif
}
+#endif
+
+// Do we have __builtin_thread_pointer? This would be the preferred way to get a unique thread id
+// but unfortunately, it seems we cannot test for this reliably at this time (see issue #883)
+// Nevertheless, it seems needed on older graviton platforms (see issue #851).
+// For now, we only enable this for specific platforms.
+#if defined(__GNUC__) && (__GNUC__ >= 7) && defined(__aarch64__) /* special case aarch64 for older gcc versions (issue #851) */ \
+ && !defined(__APPLE__) /* on apple (M1) the wrong register is read (tpidr_el0 instead of tpidrro_el0) so fall back to TLS slot assembly (<https://github.com/microsoft/mimalloc/issues/343#issuecomment-763272369>)*/ \
+ && (!defined(__clang_major__) || __clang_major__ >= 14) /* older clang versions emit bad code; fall back to using the TLS slot (<https://lore.kernel.org/linux-arm-kernel/202110280952.352F66D8@keescook/T/>) */
+#define MI_USE_BUILTIN_THREAD_POINTER 1
+#endif
+
+
+// defined in `init.c`; do not use these directly
+extern mi_decl_thread mi_heap_t* _mi_heap_default; // default heap to allocate from
+extern bool _mi_process_is_initialized; // has mi_process_init been called?
+
+static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept;
+
+// Get a unique id for the current thread.
+#if defined(_WIN32)
+
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept {
+ // Windows: works on Intel and ARM in both 32- and 64-bit
+ return (uintptr_t)NtCurrentTeb();
+}
+
+#elif MI_USE_BUILTIN_THREAD_POINTER
+
+static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept {
+ // Works on most Unix based platforms with recent compilers
+ return (uintptr_t)__builtin_thread_pointer();
+}
+
+#elif defined(MI_HAS_TLS_SLOT)
+
static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept {
#if defined(__BIONIC__)
// issue #384, #495: on the Bionic libc (Android), slot 1 is the thread id
@@ -251,7 +288,6 @@ static inline mi_heap_t* mi_prim_get_default_heap(void);
#if defined(MI_MALLOC_OVERRIDE)
#if defined(__APPLE__) // macOS
#define MI_TLS_SLOT 89 // seems unused?
- // #define MI_TLS_RECURSE_GUARD 1
// other possible unused ones are 9, 29, __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY4 (94), __PTK_FRAMEWORK_GC_KEY9 (112) and __PTK_FRAMEWORK_OLDGC_KEY9 (89)
// see <https://github.com/rweichler/substrate/blob/master/include/pthread_machdep.h>
#elif defined(__OpenBSD__)
@@ -269,6 +305,9 @@ static inline mi_heap_t* mi_prim_get_default_heap(void);
#if defined(MI_TLS_SLOT)
+# if !defined(MI_HAS_TLS_SLOT)
+# error "trying to use a TLS slot for the default heap, but the mi_prim_tls_slot primitives are not defined"
+# endif
static inline mi_heap_t* mi_prim_get_default_heap(void) {
mi_heap_t* heap = (mi_heap_t*)mi_prim_tls_slot(MI_TLS_SLOT);
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/track.h b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/track.h
index 9545f75..a659d94 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/track.h
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/track.h
@@ -82,7 +82,9 @@ defined, undefined, or not accessible at all:
#define MI_TRACK_HEAP_DESTROY 1
#define MI_TRACK_TOOL "ETW"
+#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
+#endif
#include <windows.h>
#include "../src/prim/windows/etw.h"
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/types.h b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/types.h
index 2005238..cc807ee 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/types.h
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/include/mimalloc/types.h
@@ -1,5 +1,5 @@
/* ----------------------------------------------------------------------------
-Copyright (c) 2018-2023, Microsoft Research, Daan Leijen
+Copyright (c) 2018-2024, Microsoft Research, Daan Leijen
This is free software; you can redistribute it and/or modify it under the
terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
@@ -13,9 +13,12 @@ terms of the MIT license. A copy of the license can be found in the file
// mi_heap_t : all data for a thread-local heap, contains
// lists of all managed heap pages.
// mi_segment_t : a larger chunk of memory (32GiB) from where pages
-// are allocated.
-// mi_page_t : a mimalloc page (usually 64KiB or 512KiB) from
+// are allocated. A segment is divided in slices (64KiB) from
+// which pages are allocated.
+// mi_page_t : a "mimalloc" page (usually 64KiB or 512KiB) from
// where objects are allocated.
+// Note: we write "OS page" for OS memory pages while
+// using plain "page" for mimalloc pages (`mi_page_t`).
// --------------------------------------------------------------------------
@@ -89,10 +92,11 @@ terms of the MIT license. A copy of the license can be found in the file
#endif
-// We used to abandon huge pages but to eagerly deallocate if freed from another thread,
-// but that makes it not possible to visit them during a heap walk or include them in a
-// `mi_heap_destroy`. We therefore instead reset/decommit the huge blocks if freed from
-// another thread so most memory is available until it gets properly freed by the owning thread.
+// We used to abandon huge pages in order to eagerly deallocate it if freed from another thread.
+// Unfortunately, that makes it not possible to visit them during a heap walk or include them in a
+// `mi_heap_destroy`. We therefore instead reset/decommit the huge blocks nowadays if freed from
+// another thread so the memory becomes "virtually" available (and eventually gets properly freed by
+// the owning thread).
// #define MI_HUGE_PAGE_ABANDON 1
@@ -157,17 +161,24 @@ typedef int32_t mi_ssize_t;
// Main tuning parameters for segment and page sizes
// Sizes for 64-bit (usually divide by two for 32-bit)
+#ifndef MI_SEGMENT_SLICE_SHIFT
#define MI_SEGMENT_SLICE_SHIFT (13 + MI_INTPTR_SHIFT) // 64KiB (32KiB on 32-bit)
+#endif
+#ifndef MI_SEGMENT_SHIFT
#if MI_INTPTR_SIZE > 4
#define MI_SEGMENT_SHIFT ( 9 + MI_SEGMENT_SLICE_SHIFT) // 32MiB
#else
#define MI_SEGMENT_SHIFT ( 7 + MI_SEGMENT_SLICE_SHIFT) // 4MiB on 32-bit
#endif
+#endif
+#ifndef MI_SMALL_PAGE_SHIFT
#define MI_SMALL_PAGE_SHIFT (MI_SEGMENT_SLICE_SHIFT) // 64KiB
+#endif
+#ifndef MI_MEDIUM_PAGE_SHIFT
#define MI_MEDIUM_PAGE_SHIFT ( 3 + MI_SMALL_PAGE_SHIFT) // 512KiB
-
+#endif
// Derived constants
#define MI_SEGMENT_SIZE (MI_ZU(1)<<MI_SEGMENT_SHIFT)
@@ -181,7 +192,7 @@ typedef int32_t mi_ssize_t;
#define MI_SMALL_OBJ_SIZE_MAX (MI_SMALL_PAGE_SIZE/4) // 8KiB on 64-bit
#define MI_MEDIUM_OBJ_SIZE_MAX (MI_MEDIUM_PAGE_SIZE/4) // 128KiB on 64-bit
-#define MI_MEDIUM_OBJ_WSIZE_MAX (MI_MEDIUM_OBJ_SIZE_MAX/MI_INTPTR_SIZE)
+#define MI_MEDIUM_OBJ_WSIZE_MAX (MI_MEDIUM_OBJ_SIZE_MAX/MI_INTPTR_SIZE)
#define MI_LARGE_OBJ_SIZE_MAX (MI_SEGMENT_SIZE/2) // 32MiB on 64-bit
#define MI_LARGE_OBJ_WSIZE_MAX (MI_LARGE_OBJ_SIZE_MAX/MI_INTPTR_SIZE)
@@ -192,17 +203,22 @@ typedef int32_t mi_ssize_t;
#error "mimalloc internal: define more bins"
#endif
-// Maximum slice offset (15)
-#define MI_MAX_SLICE_OFFSET ((MI_ALIGNMENT_MAX / MI_SEGMENT_SLICE_SIZE) - 1)
+// Maximum block size for which blocks are guaranteed to be block size aligned. (see `segment.c:_mi_segment_page_start`)
+#define MI_MAX_ALIGN_GUARANTEE (MI_MEDIUM_OBJ_SIZE_MAX)
-// Used as a special value to encode block sizes in 32 bits.
-#define MI_HUGE_BLOCK_SIZE ((uint32_t)(2*MI_GiB))
+// Alignments over MI_BLOCK_ALIGNMENT_MAX are allocated in dedicated huge page segments
+#define MI_BLOCK_ALIGNMENT_MAX (MI_SEGMENT_SIZE >> 1)
-// blocks up to this size are always allocated aligned
-#define MI_MAX_ALIGN_GUARANTEE (8*MI_MAX_ALIGN_SIZE)
+// Maximum slice count (255) for which we can find the page for interior pointers
+#define MI_MAX_SLICE_OFFSET_COUNT ((MI_BLOCK_ALIGNMENT_MAX / MI_SEGMENT_SLICE_SIZE) - 1)
-// Alignments over MI_ALIGNMENT_MAX are allocated in dedicated huge page segments
-#define MI_ALIGNMENT_MAX (MI_SEGMENT_SIZE >> 1)
+// we never allocate more than PTRDIFF_MAX (see also <https://sourceware.org/ml/libc-announce/2019/msg00001.html>)
+// on 64-bit+ systems we also limit the maximum allocation size such that the slice count fits in 32-bits. (issue #877)
+#if (PTRDIFF_MAX > INT32_MAX) && (PTRDIFF_MAX >= (MI_SEGMENT_SLIZE_SIZE * UINT32_MAX))
+#define MI_MAX_ALLOC_SIZE (MI_SEGMENT_SLICE_SIZE * (UINT32_MAX-1))
+#else
+#define MI_MAX_ALLOC_SIZE PTRDIFF_MAX
+#endif
// ------------------------------------------------------
@@ -227,7 +243,7 @@ typedef enum mi_delayed_e {
MI_USE_DELAYED_FREE = 0, // push on the owning heap thread delayed list
MI_DELAYED_FREEING = 1, // temporary: another thread is accessing the owning heap
MI_NO_DELAYED_FREE = 2, // optimize: push on page local thread free queue if another block is already in the heap thread delayed free list
- MI_NEVER_DELAYED_FREE = 3 // sticky, only resets on page reclaim
+ MI_NEVER_DELAYED_FREE = 3 // sticky: used for abondoned pages without a owning heap; this only resets on page reclaim
} mi_delayed_t;
@@ -266,7 +282,6 @@ typedef uintptr_t mi_thread_free_t;
// implement a monotonic heartbeat. The `thread_free` list is needed for
// avoiding atomic operations in the common case.
//
-//
// `used - |thread_free|` == actual blocks that are in use (alive)
// `used - |thread_free| + |free| + |local_free| == capacity`
//
@@ -274,16 +289,13 @@ typedef uintptr_t mi_thread_free_t;
// the number of memory accesses in the `mi_page_all_free` function(s).
//
// Notes:
-// - Access is optimized for `mi_free` and `mi_page_alloc` (in `alloc.c`)
+// - Access is optimized for `free.c:mi_free` and `alloc.c:mi_page_alloc`
// - Using `uint16_t` does not seem to slow things down
-// - The size is 8 words on 64-bit which helps the page index calculations
-// (and 10 words on 32-bit, and encoded free lists add 2 words. Sizes 10
-// and 12 are still good for address calculation)
-// - To limit the structure size, the `xblock_size` is 32-bits only; for
-// blocks > MI_HUGE_BLOCK_SIZE the size is determined from the segment page size
-// - `thread_free` uses the bottom bits as a delayed-free flags to optimize
+// - The size is 12 words on 64-bit which helps the page index calculations
+// (and 14 words on 32-bit, and encoded free lists add 2 words)
+// - `xthread_free` uses the bottom bits as a delayed-free flags to optimize
// concurrent frees where only the first concurrent free adds to the owning
-// heap `thread_delayed_free` list (see `alloc.c:mi_free_block_mt`).
+// heap `thread_delayed_free` list (see `free.c:mi_free_block_mt`).
// The invariant is that no-delayed-free is only set if there is
// at least one block that will be added, or as already been added, to
// the owning heap `thread_delayed_free` list. This guarantees that pages
@@ -291,21 +303,25 @@ typedef uintptr_t mi_thread_free_t;
typedef struct mi_page_s {
// "owned" by the segment
uint32_t slice_count; // slices in this page (0 if not a page)
- uint32_t slice_offset; // distance from the actual page data slice (0 if a page)
- uint8_t is_committed : 1; // `true` if the page virtual memory is committed
- uint8_t is_zero_init : 1; // `true` if the page was initially zero initialized
-
+ uint32_t slice_offset; // distance from the actual page data slice (0 if a page)
+ uint8_t is_committed:1; // `true` if the page virtual memory is committed
+ uint8_t is_zero_init:1; // `true` if the page was initially zero initialized
+ uint8_t is_huge:1; // `true` if the page is in a huge segment (`segment->kind == MI_SEGMENT_HUGE`)
+ // padding
// layout like this to optimize access in `mi_malloc` and `mi_free`
uint16_t capacity; // number of blocks committed, must be the first field, see `segment.c:page_clear`
uint16_t reserved; // number of blocks reserved in memory
mi_page_flags_t flags; // `in_full` and `has_aligned` flags (8 bits)
- uint8_t free_is_zero : 1; // `true` if the blocks in the free list are zero initialized
- uint8_t retire_expire : 7; // expiration count for retired blocks
+ uint8_t free_is_zero:1; // `true` if the blocks in the free list are zero initialized
+ uint8_t retire_expire:7; // expiration count for retired blocks
mi_block_t* free; // list of available free blocks (`malloc` allocates from this list)
- uint32_t used; // number of blocks in use (including blocks in `local_free` and `thread_free`)
- uint32_t xblock_size; // size available in each block (always `>0`)
mi_block_t* local_free; // list of deferred free blocks by this thread (migrates to `free`)
+ uint16_t used; // number of blocks in use (including blocks in `thread_free`)
+ uint8_t block_size_shift; // if not zero, then `(1 << block_size_shift) == block_size` (only used for fast path in `free.c:_mi_page_ptr_unalign`)
+ // padding
+ size_t block_size; // size available in each block (always `>0`)
+ uint8_t* page_start; // start of the page area containing the blocks
#if (MI_ENCODE_FREELIST || MI_PADDING)
uintptr_t keys[2]; // two random keys to encode the free lists (see `_mi_block_next`) or padding canary
@@ -317,10 +333,8 @@ typedef struct mi_page_s {
struct mi_page_s* next; // next page owned by this thread with the same `block_size`
struct mi_page_s* prev; // previous page owned by this thread with the same `block_size`
- // 64-bit 9 words, 32-bit 12 words, (+2 for secure)
- #if MI_INTPTR_SIZE==8
- uintptr_t padding[1];
- #endif
+ // 64-bit 11 words, 32-bit 13 words, (+2 for secure)
+ void* padding[1];
} mi_page_t;
@@ -331,21 +345,22 @@ typedef struct mi_page_s {
typedef enum mi_page_kind_e {
MI_PAGE_SMALL, // small blocks go into 64KiB pages inside a segment
- MI_PAGE_MEDIUM, // medium blocks go into medium pages inside a segment
- MI_PAGE_LARGE, // larger blocks go into a page of just one block
- MI_PAGE_HUGE, // huge blocks (> 16 MiB) are put into a single page in a single segment.
+ MI_PAGE_MEDIUM, // medium blocks go into 512KiB pages inside a segment
+ MI_PAGE_LARGE, // larger blocks go into a single page spanning a whole segment
+ MI_PAGE_HUGE // a huge page is a single page in a segment of variable size
+ // used for blocks `> MI_LARGE_OBJ_SIZE_MAX` or an aligment `> MI_BLOCK_ALIGNMENT_MAX`.
} mi_page_kind_t;
typedef enum mi_segment_kind_e {
MI_SEGMENT_NORMAL, // MI_SEGMENT_SIZE size with pages inside.
- MI_SEGMENT_HUGE, // > MI_LARGE_SIZE_MAX segment with just one huge page inside.
+ MI_SEGMENT_HUGE, // segment with just one huge page inside.
} mi_segment_kind_t;
// ------------------------------------------------------
// A segment holds a commit mask where a bit is set if
// the corresponding MI_COMMIT_SIZE area is committed.
// The MI_COMMIT_SIZE must be a multiple of the slice
-// size. If it is equal we have the most fine grained
+// size. If it is equal we have the most fine grained
// decommit (but setting it higher can be more efficient).
// The MI_MINIMAL_COMMIT_SIZE is the minimal amount that will
// be committed in one go which can be set higher than
@@ -353,9 +368,9 @@ typedef enum mi_segment_kind_e {
// is still tracked in fine-grained MI_COMMIT_SIZE chunks)
// ------------------------------------------------------
-#define MI_MINIMAL_COMMIT_SIZE (1*MI_SEGMENT_SLICE_SIZE)
+#define MI_MINIMAL_COMMIT_SIZE (1*MI_SEGMENT_SLICE_SIZE)
#define MI_COMMIT_SIZE (MI_SEGMENT_SLICE_SIZE) // 64KiB
-#define MI_COMMIT_MASK_BITS (MI_SEGMENT_SIZE / MI_COMMIT_SIZE)
+#define MI_COMMIT_MASK_BITS (MI_SEGMENT_SIZE / MI_COMMIT_SIZE)
#define MI_COMMIT_MASK_FIELD_BITS MI_SIZE_BITS
#define MI_COMMIT_MASK_FIELD_COUNT (MI_COMMIT_MASK_BITS / MI_COMMIT_MASK_FIELD_BITS)
@@ -371,13 +386,17 @@ typedef mi_page_t mi_slice_t;
typedef int64_t mi_msecs_t;
+// ---------------------------------------------------------------
+// a memory id tracks the provenance of arena/OS allocated memory
+// ---------------------------------------------------------------
+
// Memory can reside in arena's, direct OS allocated, or statically allocated. The memid keeps track of this.
typedef enum mi_memkind_e {
MI_MEM_NONE, // not allocated
MI_MEM_EXTERNAL, // not owned by mimalloc but provided externally (via `mi_manage_os_memory` for example)
MI_MEM_STATIC, // allocated in a static area and should not be freed (for arena meta data for example)
MI_MEM_OS, // allocated from the OS
- MI_MEM_OS_HUGE, // allocated as huge os pages
+ MI_MEM_OS_HUGE, // allocated as huge OS pages (usually 1GiB, pinned to physical memory)
MI_MEM_OS_REMAP, // allocated in a remapable area (i.e. using `mremap`)
MI_MEM_ARENA // allocated from an arena (the usual case)
} mi_memkind_t;
@@ -394,7 +413,7 @@ typedef struct mi_memid_os_info {
typedef struct mi_memid_arena_info {
size_t block_index; // index in the arena
mi_arena_id_t id; // arena id (>= 1)
- bool is_exclusive; // the arena can only be used for specific arena allocations
+ bool is_exclusive; // this arena can only be used for specific arena allocations
} mi_memid_arena_info_t;
typedef struct mi_memid_s {
@@ -402,47 +421,56 @@ typedef struct mi_memid_s {
mi_memid_os_info_t os; // only used for MI_MEM_OS
mi_memid_arena_info_t arena; // only used for MI_MEM_ARENA
} mem;
- bool is_pinned; // `true` if we cannot decommit/reset/protect in this memory (e.g. when allocated using large OS pages)
+ bool is_pinned; // `true` if we cannot decommit/reset/protect in this memory (e.g. when allocated using large (2Mib) or huge (1GiB) OS pages)
bool initially_committed;// `true` if the memory was originally allocated as committed
bool initially_zero; // `true` if the memory was originally zero initialized
mi_memkind_t memkind;
} mi_memid_t;
-// Segments are large allocated memory blocks (8mb on 64 bit) from
-// the OS. Inside segments we allocated fixed size _pages_ that
-// contain blocks.
+// -----------------------------------------------------------------------------------------
+// Segments are large allocated memory blocks (8mb on 64 bit) from arenas or the OS.
+//
+// Inside segments we allocated fixed size mimalloc pages (`mi_page_t`) that contain blocks.
+// The start of a segment is this structure with a fixed number of slice entries (`slices`)
+// usually followed by a guard OS page and the actual allocation area with pages.
+// While a page is not allocated, we view it's data as a `mi_slice_t` (instead of a `mi_page_t`).
+// Of any free area, the first slice has the info and `slice_offset == 0`; for any subsequent
+// slices part of the area, the `slice_offset` is the byte offset back to the first slice
+// (so we can quickly find the page info on a free, `internal.h:_mi_segment_page_of`).
+// For slices, the `block_size` field is repurposed to signify if a slice is used (`1`) or not (`0`).
+// Small and medium pages use a fixed amount of slices to reduce slice fragmentation, while
+// large and huge pages span a variable amount of slices.
typedef struct mi_segment_s {
// constant fields
- mi_memid_t memid; // memory id for arena allocation
- bool allow_decommit;
- bool allow_purge;
+ mi_memid_t memid; // memory id for arena/OS allocation
+ bool allow_decommit; // can we decommmit the memory
+ bool allow_purge; // can we purge the memory (reset or decommit)
size_t segment_size;
// segment fields
- mi_msecs_t purge_expire;
- mi_commit_mask_t purge_mask;
- mi_commit_mask_t commit_mask;
-
- _Atomic(struct mi_segment_s*) abandoned_next;
+ mi_msecs_t purge_expire; // purge slices in the `purge_mask` after this time
+ mi_commit_mask_t purge_mask; // slices that can be purged
+ mi_commit_mask_t commit_mask; // slices that are currently committed
// from here is zero initialized
struct mi_segment_s* next; // the list of freed segments in the cache (must be first field, see `segment.c:mi_segment_init`)
-
+ bool was_reclaimed; // true if it was reclaimed (used to limit on-free reclamation)
+
size_t abandoned; // abandoned pages (i.e. the original owning thread stopped) (`abandoned <= used`)
- size_t abandoned_visits; // count how often this segment is visited in the abandoned list (to force reclaim it it is too long)
+ size_t abandoned_visits; // count how often this segment is visited during abondoned reclamation (to force reclaim if it takes too long)
size_t used; // count of pages in use
- uintptr_t cookie; // verify addresses in debug mode: `mi_ptr_cookie(segment) == segment->cookie`
+ uintptr_t cookie; // verify addresses in debug mode: `mi_ptr_cookie(segment) == segment->cookie`
size_t segment_slices; // for huge segments this may be different from `MI_SLICES_PER_SEGMENT`
- size_t segment_info_slices; // initial slices we are using segment info and possible guard pages.
+ size_t segment_info_slices; // initial count of slices that we are using for segment info and possible guard pages.
// layout like this to optimize access in `mi_free`
mi_segment_kind_t kind;
size_t slice_entries; // entries in the `slices` array, at most `MI_SLICES_PER_SEGMENT`
_Atomic(mi_threadid_t) thread_id; // unique id of the thread owning this segment
- mi_slice_t slices[MI_SLICES_PER_SEGMENT+1]; // one more for huge blocks with large alignment
+ mi_slice_t slices[MI_SLICES_PER_SEGMENT+1]; // one extra final entry for huge blocks with large alignment
} mi_segment_t;
@@ -499,11 +527,9 @@ typedef struct mi_padding_s {
// A heap owns a set of pages.
struct mi_heap_s {
mi_tld_t* tld;
- mi_page_t* pages_free_direct[MI_PAGES_DIRECT]; // optimize: array where every entry points a page with possibly free blocks in the corresponding queue for that size.
- mi_page_queue_t pages[MI_BIN_FULL + 1]; // queue of pages for each size class (or "bin")
_Atomic(mi_block_t*) thread_delayed_free;
mi_threadid_t thread_id; // thread this heap belongs too
- mi_arena_id_t arena_id; // arena id if the heap belongs to a specific arena (or 0)
+ mi_arena_id_t arena_id; // arena id if the heap belongs to a specific arena (or 0)
uintptr_t cookie; // random cookie to verify pointers (see `_mi_ptr_cookie`)
uintptr_t keys[2]; // two random keys used to encode the `thread_delayed_free` list
mi_random_ctx_t random; // random number context used for secure allocation
@@ -512,6 +538,8 @@ struct mi_heap_s {
size_t page_retired_max; // largest retired index into the `pages` array.
mi_heap_t* next; // list of heaps per thread
bool no_reclaim; // `true` if this heap should not reclaim abandoned pages
+ mi_page_t* pages_free_direct[MI_PAGES_DIRECT]; // optimize: array where every entry points a page with possibly free blocks in the corresponding queue for that size.
+ mi_page_queue_t pages[MI_BIN_FULL + 1]; // queue of pages for each size class (or "bin")
};
@@ -600,6 +628,9 @@ typedef struct mi_stats_s {
mi_stat_counter_t normal_count;
mi_stat_counter_t huge_count;
mi_stat_counter_t large_count;
+ mi_stat_counter_t arena_count;
+ mi_stat_counter_t arena_crossover_count;
+ mi_stat_counter_t arena_rollback_count;
#if MI_STAT>1
mi_stat_count_t normal_bins[MI_BIN_HUGE+1];
#endif
@@ -624,6 +655,7 @@ void _mi_stat_counter_increase(mi_stat_counter_t* stat, size_t amount);
#define mi_heap_stat_increase(heap,stat,amount) mi_stat_increase( (heap)->tld->stats.stat, amount)
#define mi_heap_stat_decrease(heap,stat,amount) mi_stat_decrease( (heap)->tld->stats.stat, amount)
+
// ------------------------------------------------------
// Thread Local data
// ------------------------------------------------------
@@ -652,6 +684,7 @@ typedef struct mi_segments_tld_s {
size_t peak_count; // peak number of segments
size_t current_size; // current size of all segments
size_t peak_size; // peak size of all segments
+ size_t reclaim_count;// number of reclaimed (abandoned) segments
mi_stats_t* stats; // points to tld stats
mi_os_tld_t* os; // points to os stats
} mi_segments_tld_t;
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/readme.md b/lib/Utils.Memory/vnlib_mimalloc/vendor/readme.md
index 85d3563..9197458 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/readme.md
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/readme.md
@@ -12,8 +12,8 @@ is a general purpose allocator with excellent [performance](#performance) charac
Initially developed by Daan Leijen for the runtime systems of the
[Koka](https://koka-lang.github.io) and [Lean](https://github.com/leanprover/lean) languages.
-Latest release tag: `v2.1.2` (2023-04-24).
-Latest stable tag: `v1.8.2` (2023-04-24).
+Latest release tag: `v2.1.6` (2024-05-13).
+Latest v1 tag: `v1.8.6` (2024-05-13).
mimalloc is a drop-in replacement for `malloc` and can be used in other programs
without code changes, for example, on dynamically linked ELF-based systems (Linux, BSD, etc.) you can use it as:
@@ -29,6 +29,8 @@ It also includes a robust way to override the default allocator in [Windows](#ov
bounded worst-case times with reference counting).
Partly due to its simplicity, mimalloc has been ported to many systems (Windows, macOS,
Linux, WASM, various BSD's, Haiku, MUSL, etc) and has excellent support for dynamic overriding.
+ At the same time, it is an industrial strength allocator that runs (very) large scale
+ distributed services on thousands of machines with excellent worst case latencies.
- __free list sharding__: instead of one big free list (per size class) we have
many smaller lists per "mimalloc page" which reduces fragmentation and
increases locality --
@@ -70,14 +72,27 @@ Enjoy!
* `master`: latest stable release (based on `dev-slice`).
* `dev`: development branch for mimalloc v1. Use this branch for submitting PR's.
-* `dev-slice`: development branch for mimalloc v2. This branch is downstream of `dev`.
+* `dev-slice`: development branch for mimalloc v2. This branch is downstream of `dev` (and is essentially equal to `dev` except for
+`src/segment.c`)
### Releases
-Note: the `v2.x` version has a new algorithm for managing internal mimalloc pages that tends to reduce memory usage
+Note: the `v2.x` version has a different algorithm for managing internal mimalloc pages (as slices) that tends to use reduce
+memory usage
and fragmentation compared to mimalloc `v1.x` (especially for large workloads). Should otherwise have similar performance
(see [below](#performance)); please report if you observe any significant performance regression.
+* 2024-05-13, `v1.8.6`, `v2.1.6`: Fix build errors on various (older) platforms. Refactored aligned allocation.
+* 2024-04-22, `v1.8.4`, `v2.1.4`: Fixes various bugs and build issues. Add `MI_LIBC_MUSL` cmake flag for musl builds.
+ Free-ing code is refactored into a separate module (`free.c`). Mimalloc page info is simplified with the block size
+ directly available (and new `block_size_shift` to improve aligned block free-ing).
+ New approach to collection of abandoned segments: When
+ a thread terminates the segments it owns are abandoned (containing still live objects) and these can be
+ reclaimed by other threads. We no longer use a list of abandoned segments but this is now done using bitmaps in arena's
+ which is more concurrent (and more aggressive). Abandoned memory can now also be reclaimed if a thread frees an object in
+ an abandoned page (which can be disabled using `mi_option_abandoned_reclaim_on_free`). The option `mi_option_max_segment_reclaim`
+ gives a maximum percentage of abandoned segments that can be reclaimed per try (=10%).
+
* 2023-04-24, `v1.8.2`, `v2.1.2`: Fixes build issues on freeBSD, musl, and C17 (UE 5.1.1). Reduce code size/complexity
by removing regions and segment-cache's and only use arenas with improved memory purging -- this may improve memory
usage as well for larger services. Renamed options for consistency. Improved Valgrind and ASAN checking.
@@ -89,9 +104,10 @@ Note: the `v2.x` version has a new algorithm for managing internal mimalloc page
abstraction layer to make it easier to port and separate platform dependent code (in `src/prim`). Fixed C++ STL compilation on older Microsoft C++ compilers, and various small bug fixes.
* 2022-12-23, `v1.7.9`, `v2.0.9`: Supports building with [asan](#asan) and improved [Valgrind](#valgrind) support.
- Support abitrary large alignments (in particular for `std::pmr` pools).
+ Support arbitrary large alignments (in particular for `std::pmr` pools).
Added C++ STL allocators attached to a specific heap (thanks @vmarkovtsev).
- Heap walks now visit all object (including huge objects). Support Windows nano server containers (by Johannes Schindelin,@dscho). Various small bug fixes.
+ Heap walks now visit all object (including huge objects). Support Windows nano server containers (by Johannes Schindelin,@dscho).
+ Various small bug fixes.
* 2022-11-03, `v1.7.7`, `v2.0.7`: Initial support for [Valgrind](#valgrind) for leak testing and heap block overflow
detection. Initial
@@ -141,7 +157,7 @@ mimalloc is used in various large scale low-latency services and programs, for e
## Windows
-Open `ide/vs2019/mimalloc.sln` in Visual Studio 2019 and build.
+Open `ide/vs2022/mimalloc.sln` in Visual Studio 2022 and build.
The `mimalloc` project builds a static library (in `out/msvc-x64`), while the
`mimalloc-override` project builds a DLL for overriding malloc
in the entire program.
@@ -221,7 +237,7 @@ target_link_libraries(myapp PUBLIC mimalloc-static)
to link with the static library. See `test\CMakeLists.txt` for an example.
For best performance in C++ programs, it is also recommended to override the
-global `new` and `delete` operators. For convience, mimalloc provides
+global `new` and `delete` operators. For convenience, mimalloc provides
[`mimalloc-new-delete.h`](https://github.com/microsoft/mimalloc/blob/master/include/mimalloc-new-delete.h) which does this for you -- just include it in a single(!) source file in your project.
In C++, mimalloc also provides the `mi_stl_allocator` struct which implements the `std::allocator`
interface.
@@ -277,17 +293,23 @@ You can set further options either programmatically (using [`mi_option_set`](htt
Advanced options:
+- `MIMALLOC_ARENA_EAGER_COMMIT=2`: turns on eager commit for the large arenas (usually 1GiB) from which mimalloc
+ allocates segments and pages. Set this to 2 (default) to
+ only enable this on overcommit systems (e.g. Linux). Set this to 1 to enable explicitly on other systems
+ as well (like Windows or macOS) which may improve performance (as the whole arena is committed at once).
+ Note that eager commit only increases the commit but not the actual the peak resident set
+ (rss) so it is generally ok to enable this.
- `MIMALLOC_PURGE_DELAY=N`: the delay in `N` milli-seconds (by default `10`) after which mimalloc will purge
OS pages that are not in use. This signals to the OS that the underlying physical memory can be reused which
can reduce memory fragmentation especially in long running (server) programs. Setting `N` to `0` purges immediately when
a page becomes unused which can improve memory usage but also decreases performance. Setting `N` to a higher
value like `100` can improve performance (sometimes by a lot) at the cost of potentially using more memory at times.
- Setting it to `-1` disables purging completely.
-- `MIMALLOC_ARENA_EAGER_COMMIT=1`: turns on eager commit for the large arenas (usually 1GiB) from which mimalloc
- allocates segments and pages. This is by default
- only enabled on overcommit systems (e.g. Linux) but enabling it explicitly on other systems (like Windows or macOS)
- may improve performance. Note that eager commit only increases the commit but not the actual the peak resident set
- (rss) so it is generally ok to enable this.
+ Setting it to `-1` disables purging completely.
+- `MIMALLOC_PURGE_DECOMMITS=1`: By default "purging" memory means unused memory is decommitted (`MEM_DECOMMIT` on Windows,
+ `MADV_DONTNEED` (which decresease rss immediately) on `mmap` systems). Set this to 0 to instead "reset" unused
+ memory on a purge (`MEM_RESET` on Windows, generally `MADV_FREE` (which does not decrease rss immediately) on `mmap` systems).
+ Mimalloc generally does not "free" OS memory but only "purges" OS memory, in other words, it tries to keep virtual
+ address ranges and decommits within those ranges (to make the underlying physical memory available to other processes).
Further options for large workloads and services:
@@ -295,9 +317,10 @@ Further options for large workloads and services:
at runtime. Setting `N` to 1 may avoid problems in some virtual environments. Also, setting it to a lower number than
the actual NUMA nodes is fine and will only cause threads to potentially allocate more memory across actual NUMA
nodes (but this can happen in any case as NUMA local allocation is always a best effort but not guaranteed).
-- `MIMALLOC_ALLOW_LARGE_OS_PAGES=1`: use large OS pages (2MiB) when available; for some workloads this can significantly
- improve performance. Use `MIMALLOC_VERBOSE` to check if the large OS pages are enabled -- usually one needs
- to explicitly allow large OS pages (as on [Windows][windows-huge] and [Linux][linux-huge]). However, sometimes
+- `MIMALLOC_ALLOW_LARGE_OS_PAGES=1`: use large OS pages (2 or 4MiB) when available; for some workloads this can significantly
+ improve performance. When this option is disabled, it also disables transparent huge pages (THP) for the process
+ (on Linux and Android). Use `MIMALLOC_VERBOSE` to check if the large OS pages are enabled -- usually one needs
+ to explicitly give permissions for large OS pages (as on [Windows][windows-huge] and [Linux][linux-huge]). However, sometimes
the OS is very slow to reserve contiguous physical memory for large OS pages so use with care on systems that
can have fragmented memory (for that reason, we generally recommend to use `MIMALLOC_RESERVE_HUGE_OS_PAGES` instead whenever possible).
- `MIMALLOC_RESERVE_HUGE_OS_PAGES=N`: where `N` is the number of 1GiB _huge_ OS pages. This reserves the huge pages at
@@ -306,11 +329,12 @@ Further options for large workloads and services:
OS pages, use with care as reserving
contiguous physical memory can take a long time when memory is fragmented (but reserving the huge pages is done at
startup only once).
- Note that we usually need to explicitly enable huge OS pages (as on [Windows][windows-huge] and [Linux][linux-huge])).
+ Note that we usually need to explicitly give permission for huge OS pages (as on [Windows][windows-huge] and [Linux][linux-huge])).
With huge OS pages, it may be beneficial to set the setting
`MIMALLOC_EAGER_COMMIT_DELAY=N` (`N` is 1 by default) to delay the initial `N` segments (of 4MiB)
of a thread to not allocate in the huge OS pages; this prevents threads that are short lived
- and allocate just a little to take up space in the huge OS page area (which cannot be purged).
+ and allocate just a little to take up space in the huge OS page area (which cannot be purged as huge OS pages are pinned
+ to physical memory).
The huge pages are usually allocated evenly among NUMA nodes.
We can use `MIMALLOC_RESERVE_HUGE_OS_PAGES_AT=N` where `N` is the numa node (starting at 0) to allocate all
the huge pages at a specific numa node instead.
@@ -391,32 +415,41 @@ the [shell](https://stackoverflow.com/questions/43941322/dyld-insert-libraries-i
### Dynamic Override on Windows
-<span id="override_on_windows">Overriding on Windows</span> is robust and has the
-particular advantage to be able to redirect all malloc/free calls that go through
+<span id="override_on_windows">Dynamically overriding on mimalloc on Windows</span>
+is robust and has the particular advantage to be able to redirect all malloc/free calls that go through
the (dynamic) C runtime allocator, including those from other DLL's or libraries.
-
-The overriding on Windows requires that you link your program explicitly with
-the mimalloc DLL and use the C-runtime library as a DLL (using the `/MD` or `/MDd` switch).
-Also, the `mimalloc-redirect.dll` (or `mimalloc-redirect32.dll`) must be put
-in the same folder as the main `mimalloc-override.dll` at runtime (as it is a dependency).
-The redirection DLL ensures that all calls to the C runtime malloc API get redirected to
-mimalloc (in `mimalloc-override.dll`).
-
-To ensure the mimalloc DLL is loaded at run-time it is easiest to insert some
-call to the mimalloc API in the `main` function, like `mi_version()`
-(or use the `/INCLUDE:mi_version` switch on the linker). See the `mimalloc-override-test` project
-for an example on how to use this. For best performance on Windows with C++, it
+As it intercepts all allocation calls on a low level, it can be used reliably
+on large programs that include other 3rd party components.
+There are four requirements to make the overriding work robustly:
+
+1. Use the C-runtime library as a DLL (using the `/MD` or `/MDd` switch).
+2. Link your program explicitly with `mimalloc-override.dll` library.
+ To ensure the `mimalloc-override.dll` is loaded at run-time it is easiest to insert some
+ call to the mimalloc API in the `main` function, like `mi_version()`
+ (or use the `/INCLUDE:mi_version` switch on the linker). See the `mimalloc-override-test` project
+ for an example on how to use this.
+3. The [`mimalloc-redirect.dll`](bin) (or `mimalloc-redirect32.dll`) must be put
+ in the same folder as the main `mimalloc-override.dll` at runtime (as it is a dependency of that DLL).
+ The redirection DLL ensures that all calls to the C runtime malloc API get redirected to
+ mimalloc functions (which reside in `mimalloc-override.dll`).
+4. Ensure the `mimalloc-override.dll` comes as early as possible in the import
+ list of the final executable (so it can intercept all potential allocations).
+
+For best performance on Windows with C++, it
is also recommended to also override the `new`/`delete` operations (by including
-[`mimalloc-new-delete.h`](https://github.com/microsoft/mimalloc/blob/master/include/mimalloc-new-delete.h) a single(!) source file in your project).
+[`mimalloc-new-delete.h`](include/mimalloc-new-delete.h)
+a single(!) source file in your project).
The environment variable `MIMALLOC_DISABLE_REDIRECT=1` can be used to disable dynamic
overriding at run-time. Use `MIMALLOC_VERBOSE=1` to check if mimalloc was successfully redirected.
-(Note: in principle, it is possible to even patch existing executables without any recompilation
+We cannot always re-link an executable with `mimalloc-override.dll`, and similarly, we cannot always
+ensure the the DLL comes first in the import table of the final executable.
+In many cases though we can patch existing executables without any recompilation
if they are linked with the dynamic C runtime (`ucrtbase.dll`) -- just put the `mimalloc-override.dll`
into the import table (and put `mimalloc-redirect.dll` in the same folder)
-Such patching can be done for example with [CFF Explorer](https://ntcore.com/?page_id=388)).
-
+Such patching can be done for example with [CFF Explorer](https://ntcore.com/?page_id=388) or
+the [`minject`](bin) program.
## Static override
@@ -438,7 +471,7 @@ This is provided by [`mimalloc-override.h`](https://github.com/microsoft/mimallo
under your control or otherwise mixing of pointers from different heaps may occur!
-## Tools
+# Tools
Generally, we recommend using the standard allocator with memory tracking tools, but mimalloc
can also be build to support the [address sanitizer][asan] or the excellent [Valgrind] tool.
@@ -446,7 +479,7 @@ Moreover, it can be build to support Windows event tracing ([ETW]).
This has a small performance overhead but does allow detecting memory leaks and byte-precise
buffer overflows directly on final executables. See also the `test/test-wrong.c` file to test with various tools.
-### Valgrind
+## Valgrind
To build with [valgrind] support, use the `MI_TRACK_VALGRIND=ON` cmake option:
@@ -480,7 +513,7 @@ Valgrind support is in its initial development -- please report any issues.
[Valgrind]: https://valgrind.org/
[valgrind-soname]: https://valgrind.org/docs/manual/manual-core.html#opt.soname-synonyms
-### ASAN
+## ASAN
To build with the address sanitizer, use the `-DMI_TRACK_ASAN=ON` cmake option:
@@ -509,7 +542,7 @@ Adress sanitizer support is in its initial development -- please report any issu
[asan]: https://github.com/google/sanitizers/wiki/AddressSanitizer
-### ETW
+## ETW
Event tracing for Windows ([ETW]) provides a high performance way to capture all allocations though
mimalloc and analyze them later. To build with ETW support, use the `-DMI_TRACK_ETW=ON` cmake option.
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-aligned.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-aligned.c
index 1cd809f..ba629ef 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-aligned.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-aligned.c
@@ -15,25 +15,24 @@ terms of the MIT license. A copy of the license can be found in the file
// Aligned Allocation
// ------------------------------------------------------
-// Fallback primitive aligned allocation -- split out for better codegen
-static mi_decl_noinline void* mi_heap_malloc_zero_aligned_at_fallback(mi_heap_t* const heap, const size_t size, const size_t alignment, const size_t offset, const bool zero) mi_attr_noexcept
+static bool mi_malloc_is_naturally_aligned( size_t size, size_t alignment ) {
+ // objects up to `MI_MAX_ALIGN_GUARANTEE` are allocated aligned to their size (see `segment.c:_mi_segment_page_start`).
+ mi_assert_internal(_mi_is_power_of_two(alignment) && (alignment > 0));
+ if (alignment > size) return false;
+ if (alignment <= MI_MAX_ALIGN_SIZE) return true;
+ const size_t bsize = mi_good_size(size);
+ return (bsize <= MI_MAX_ALIGN_GUARANTEE && (bsize & (alignment-1)) == 0);
+}
+
+// Fallback aligned allocation that over-allocates -- split out for better codegen
+static mi_decl_noinline void* mi_heap_malloc_zero_aligned_at_overalloc(mi_heap_t* const heap, const size_t size, const size_t alignment, const size_t offset, const bool zero) mi_attr_noexcept
{
- mi_assert_internal(size <= PTRDIFF_MAX);
+ mi_assert_internal(size <= (MI_MAX_ALLOC_SIZE - MI_PADDING_SIZE));
mi_assert_internal(alignment != 0 && _mi_is_power_of_two(alignment));
- const uintptr_t align_mask = alignment - 1; // for any x, `(x & align_mask) == (x % alignment)`
- const size_t padsize = size + MI_PADDING_SIZE;
-
- // use regular allocation if it is guaranteed to fit the alignment constraints
- if (offset==0 && alignment<=padsize && padsize<=MI_MAX_ALIGN_GUARANTEE && (padsize&align_mask)==0) {
- void* p = _mi_heap_malloc_zero(heap, size, zero);
- mi_assert_internal(p == NULL || ((uintptr_t)p % alignment) == 0);
- return p;
- }
-
void* p;
size_t oversize;
- if mi_unlikely(alignment > MI_ALIGNMENT_MAX) {
+ if mi_unlikely(alignment > MI_BLOCK_ALIGNMENT_MAX) {
// use OS allocation for very large alignment and allocate inside a huge page (dedicated segment with 1 page)
// This can support alignments >= MI_SEGMENT_SIZE by ensuring the object can be aligned at a point in the
// first (and single) page such that the segment info is `MI_SEGMENT_SIZE` bytes before it (so it can be found by aligning the pointer down)
@@ -47,7 +46,7 @@ static mi_decl_noinline void* mi_heap_malloc_zero_aligned_at_fallback(mi_heap_t*
oversize = (size <= MI_SMALL_SIZE_MAX ? MI_SMALL_SIZE_MAX + 1 /* ensure we use generic malloc path */ : size);
p = _mi_heap_malloc_zero_ex(heap, oversize, false, alignment); // the page block size should be large enough to align in the single huge page block
// zero afterwards as only the area from the aligned_p may be committed!
- if (p == NULL) return NULL;
+ if (p == NULL) return NULL;
}
else {
// otherwise over-allocate
@@ -57,6 +56,7 @@ static mi_decl_noinline void* mi_heap_malloc_zero_aligned_at_fallback(mi_heap_t*
}
// .. and align within the allocation
+ const uintptr_t align_mask = alignment - 1; // for any x, `(x & align_mask) == (x % alignment)`
const uintptr_t poffset = ((uintptr_t)p + offset) & align_mask;
const uintptr_t adjust = (poffset == 0 ? 0 : alignment - poffset);
mi_assert_internal(adjust < alignment);
@@ -69,14 +69,14 @@ static mi_decl_noinline void* mi_heap_malloc_zero_aligned_at_fallback(mi_heap_t*
// todo: expand padding if overallocated ?
mi_assert_internal(mi_page_usable_block_size(_mi_ptr_page(p)) >= adjust + size);
- mi_assert_internal(p == _mi_page_ptr_unalign(_mi_ptr_segment(aligned_p), _mi_ptr_page(aligned_p), aligned_p));
+ mi_assert_internal(p == _mi_page_ptr_unalign(_mi_ptr_page(aligned_p), aligned_p));
mi_assert_internal(((uintptr_t)aligned_p + offset) % alignment == 0);
mi_assert_internal(mi_usable_size(aligned_p)>=size);
mi_assert_internal(mi_usable_size(p) == mi_usable_size(aligned_p)+adjust);
-
+
// now zero the block if needed
- if (alignment > MI_ALIGNMENT_MAX) {
- // for the tracker, on huge aligned allocations only from the start of the large block is defined
+ if (alignment > MI_BLOCK_ALIGNMENT_MAX) {
+ // for the tracker, on huge aligned allocations only the memory from the start of the large block is defined
mi_track_mem_undefined(aligned_p, size);
if (zero) {
_mi_memzero_aligned(aligned_p, mi_usable_size(aligned_p));
@@ -85,48 +85,77 @@ static mi_decl_noinline void* mi_heap_malloc_zero_aligned_at_fallback(mi_heap_t*
if (p != aligned_p) {
mi_track_align(p,aligned_p,adjust,mi_usable_size(aligned_p));
- }
+ }
return aligned_p;
}
-// Primitive aligned allocation
-static void* mi_heap_malloc_zero_aligned_at(mi_heap_t* const heap, const size_t size, const size_t alignment, const size_t offset, const bool zero) mi_attr_noexcept
+// Generic primitive aligned allocation -- split out for better codegen
+static mi_decl_noinline void* mi_heap_malloc_zero_aligned_at_generic(mi_heap_t* const heap, const size_t size, const size_t alignment, const size_t offset, const bool zero) mi_attr_noexcept
{
- // note: we don't require `size > offset`, we just guarantee that the address at offset is aligned regardless of the allocated size.
- if mi_unlikely(alignment == 0 || !_mi_is_power_of_two(alignment)) { // require power-of-two (see <https://en.cppreference.com/w/c/memory/aligned_alloc>)
+ mi_assert_internal(alignment != 0 && _mi_is_power_of_two(alignment));
+ // we don't allocate more than MI_MAX_ALLOC_SIZE (see <https://sourceware.org/ml/libc-announce/2019/msg00001.html>)
+ if mi_unlikely(size > (MI_MAX_ALLOC_SIZE - MI_PADDING_SIZE)) {
#if MI_DEBUG > 0
- _mi_error_message(EOVERFLOW, "aligned allocation requires the alignment to be a power-of-two (size %zu, alignment %zu)\n", size, alignment);
+ _mi_error_message(EOVERFLOW, "aligned allocation request is too large (size %zu, alignment %zu)\n", size, alignment);
#endif
return NULL;
}
+
+ // use regular allocation if it is guaranteed to fit the alignment constraints.
+ // this is important to try as the fast path in `mi_heap_malloc_zero_aligned` only works when there exist
+ // a page with the right block size, and if we always use the over-alloc fallback that would never happen.
+ if (offset == 0 && mi_malloc_is_naturally_aligned(size,alignment)) {
+ void* p = _mi_heap_malloc_zero(heap, size, zero);
+ mi_assert_internal(p == NULL || ((uintptr_t)p % alignment) == 0);
+ const bool is_aligned_or_null = (((uintptr_t)p) & (alignment-1))==0;
+ if mi_likely(is_aligned_or_null) {
+ return p;
+ }
+ else {
+ // this should never happen if the `mi_malloc_is_naturally_aligned` check is correct..
+ mi_assert(false);
+ mi_free(p);
+ }
+ }
+
+ // fall back to over-allocation
+ return mi_heap_malloc_zero_aligned_at_overalloc(heap,size,alignment,offset,zero);
+}
- if mi_unlikely(size > PTRDIFF_MAX) { // we don't allocate more than PTRDIFF_MAX (see <https://sourceware.org/ml/libc-announce/2019/msg00001.html>)
+// Primitive aligned allocation
+static void* mi_heap_malloc_zero_aligned_at(mi_heap_t* const heap, const size_t size, const size_t alignment, const size_t offset, const bool zero) mi_attr_noexcept
+{
+ // note: we don't require `size > offset`, we just guarantee that the address at offset is aligned regardless of the allocated size.
+ if mi_unlikely(alignment == 0 || !_mi_is_power_of_two(alignment)) { // require power-of-two (see <https://en.cppreference.com/w/c/memory/aligned_alloc>)
#if MI_DEBUG > 0
- _mi_error_message(EOVERFLOW, "aligned allocation request is too large (size %zu, alignment %zu)\n", size, alignment);
+ _mi_error_message(EOVERFLOW, "aligned allocation requires the alignment to be a power-of-two (size %zu, alignment %zu)\n", size, alignment);
#endif
return NULL;
}
- const uintptr_t align_mask = alignment-1; // for any x, `(x & align_mask) == (x % alignment)`
- const size_t padsize = size + MI_PADDING_SIZE; // note: cannot overflow due to earlier size > PTRDIFF_MAX check
-
+
// try first if there happens to be a small block available with just the right alignment
- if mi_likely(padsize <= MI_SMALL_SIZE_MAX && alignment <= padsize) {
+ if mi_likely(size <= MI_SMALL_SIZE_MAX && alignment <= size) {
+ const uintptr_t align_mask = alignment-1; // for any x, `(x & align_mask) == (x % alignment)`
+ const size_t padsize = size + MI_PADDING_SIZE;
mi_page_t* page = _mi_heap_get_free_small_page(heap, padsize);
- const bool is_aligned = (((uintptr_t)page->free+offset) & align_mask)==0;
- if mi_likely(page->free != NULL && is_aligned)
- {
- #if MI_STAT>1
- mi_heap_stat_increase(heap, malloc, size);
- #endif
- void* p = _mi_page_malloc(heap, page, padsize, zero); // TODO: inline _mi_page_malloc
- mi_assert_internal(p != NULL);
- mi_assert_internal(((uintptr_t)p + offset) % alignment == 0);
- mi_track_malloc(p,size,zero);
- return p;
+ if mi_likely(page->free != NULL) {
+ const bool is_aligned = (((uintptr_t)page->free + offset) & align_mask)==0;
+ if mi_likely(is_aligned)
+ {
+ #if MI_STAT>1
+ mi_heap_stat_increase(heap, malloc, size);
+ #endif
+ void* p = (zero ? _mi_page_malloc_zeroed(heap,page,padsize) : _mi_page_malloc(heap,page,padsize)); // call specific page malloc for better codegen
+ mi_assert_internal(p != NULL);
+ mi_assert_internal(((uintptr_t)p + offset) % alignment == 0);
+ mi_track_malloc(p,size,zero);
+ return p;
+ }
}
}
- // fallback
- return mi_heap_malloc_zero_aligned_at_fallback(heap, size, alignment, offset, zero);
+
+ // fallback to generic aligned allocation
+ return mi_heap_malloc_zero_aligned_at_generic(heap, size, alignment, offset, zero);
}
@@ -139,27 +168,12 @@ mi_decl_nodiscard mi_decl_restrict void* mi_heap_malloc_aligned_at(mi_heap_t* he
}
mi_decl_nodiscard mi_decl_restrict void* mi_heap_malloc_aligned(mi_heap_t* heap, size_t size, size_t alignment) mi_attr_noexcept {
- if mi_unlikely(alignment == 0 || !_mi_is_power_of_two(alignment)) return NULL;
- #if !MI_PADDING
- // without padding, any small sized allocation is naturally aligned (see also `_mi_segment_page_start`)
- if mi_likely(_mi_is_power_of_two(size) && size >= alignment && size <= MI_SMALL_SIZE_MAX)
- #else
- // with padding, we can only guarantee this for fixed alignments
- if mi_likely((alignment == sizeof(void*) || (alignment == MI_MAX_ALIGN_SIZE && size > (MI_MAX_ALIGN_SIZE/2)))
- && size <= MI_SMALL_SIZE_MAX)
- #endif
- {
- // fast path for common alignment and size
- return mi_heap_malloc_small(heap, size);
- }
- else {
- return mi_heap_malloc_aligned_at(heap, size, alignment, 0);
- }
+ return mi_heap_malloc_aligned_at(heap, size, alignment, 0);
}
// ensure a definition is emitted
#if defined(__cplusplus)
-static void* _mi_heap_malloc_aligned = (void*)&mi_heap_malloc_aligned;
+void* _mi_extern_heap_malloc_aligned = (void*)&mi_heap_malloc_aligned;
#endif
// ------------------------------------------------------
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-override.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-override.c
index 873065d..12837cd 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-override.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc-override.c
@@ -23,7 +23,7 @@ mi_decl_externc size_t malloc_good_size(size_t size);
#endif
// helper definition for C override of C++ new
-typedef struct mi_nothrow_s { int _tag; } mi_nothrow_t;
+typedef void* mi_nothrow_t;
// ------------------------------------------------------
// Override system malloc
@@ -77,7 +77,9 @@ typedef struct mi_nothrow_s { int _tag; } mi_nothrow_t;
MI_INTERPOSE_MI(calloc),
MI_INTERPOSE_MI(realloc),
MI_INTERPOSE_MI(strdup),
+ #if defined(MAC_OS_X_VERSION_10_7) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
MI_INTERPOSE_MI(strndup),
+ #endif
MI_INTERPOSE_MI(realpath),
MI_INTERPOSE_MI(posix_memalign),
MI_INTERPOSE_MI(reallocf),
@@ -128,11 +130,19 @@ typedef struct mi_nothrow_s { int _tag; } mi_nothrow_t;
// cannot override malloc unless using a dll.
// we just override new/delete which does work in a static library.
#else
- // On all other systems forward to our API
+ // On all other systems forward allocation primitives to our API
mi_decl_export void* malloc(size_t size) MI_FORWARD1(mi_malloc, size)
mi_decl_export void* calloc(size_t size, size_t n) MI_FORWARD2(mi_calloc, size, n)
mi_decl_export void* realloc(void* p, size_t newsize) MI_FORWARD2(mi_realloc, p, newsize)
- mi_decl_export void free(void* p) MI_FORWARD0(mi_free, p)
+ mi_decl_export void free(void* p) MI_FORWARD0(mi_free, p)
+ // In principle we do not need to forward `strdup`/`strndup` but on some systems these do not use `malloc` internally (but a more primitive call)
+ // We only override if `strdup` is not a macro (as on some older libc's, see issue #885)
+ #if !defined(strdup)
+ mi_decl_export char* strdup(const char* str) MI_FORWARD1(mi_strdup, str)
+ #endif
+ #if !defined(strndup) && (!defined(__APPLE__) || (defined(MAC_OS_X_VERSION_10_7) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7))
+ mi_decl_export char* strndup(const char* str, size_t n) MI_FORWARD2(mi_strndup, str, n)
+ #endif
#endif
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__APPLE__)
@@ -192,11 +202,17 @@ typedef struct mi_nothrow_s { int _tag; } mi_nothrow_t;
void _ZdaPv(void* p) MI_FORWARD0(mi_free,p) // delete[]
void _ZdlPvm(void* p, size_t n) MI_FORWARD02(mi_free_size,p,n)
void _ZdaPvm(void* p, size_t n) MI_FORWARD02(mi_free_size,p,n)
+
void _ZdlPvSt11align_val_t(void* p, size_t al) { mi_free_aligned(p,al); }
void _ZdaPvSt11align_val_t(void* p, size_t al) { mi_free_aligned(p,al); }
void _ZdlPvmSt11align_val_t(void* p, size_t n, size_t al) { mi_free_size_aligned(p,n,al); }
void _ZdaPvmSt11align_val_t(void* p, size_t n, size_t al) { mi_free_size_aligned(p,n,al); }
+ void _ZdlPvRKSt9nothrow_t(void* p, mi_nothrow_t tag) { MI_UNUSED(tag); mi_free(p); } // operator delete(void*, std::nothrow_t const&)
+ void _ZdaPvRKSt9nothrow_t(void* p, mi_nothrow_t tag) { MI_UNUSED(tag); mi_free(p); } // operator delete[](void*, std::nothrow_t const&)
+ void _ZdlPvSt11align_val_tRKSt9nothrow_t(void* p, size_t al, mi_nothrow_t tag) { MI_UNUSED(tag); mi_free_aligned(p,al); } // operator delete(void*, std::align_val_t, std::nothrow_t const&)
+ void _ZdaPvSt11align_val_tRKSt9nothrow_t(void* p, size_t al, mi_nothrow_t tag) { MI_UNUSED(tag); mi_free_aligned(p,al); } // operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+
#if (MI_INTPTR_SIZE==8)
void* _Znwm(size_t n) MI_FORWARD1(mi_new,n) // new 64-bit
void* _Znam(size_t n) MI_FORWARD1(mi_new,n) // new[] 64-bit
@@ -259,10 +275,11 @@ extern "C" {
// no forwarding here due to aliasing/name mangling issues
void cfree(void* p) { mi_free(p); }
void* pvalloc(size_t size) { return mi_pvalloc(size); }
-void* reallocarray(void* p, size_t count, size_t size) { return mi_reallocarray(p, count, size); }
-int reallocarr(void* p, size_t count, size_t size) { return mi_reallocarr(p, count, size); }
void* memalign(size_t alignment, size_t size) { return mi_memalign(alignment, size); }
void* _aligned_malloc(size_t alignment, size_t size) { return mi_aligned_alloc(alignment, size); }
+void* reallocarray(void* p, size_t count, size_t size) { return mi_reallocarray(p, count, size); }
+// some systems define reallocarr so mark it as a weak symbol (#751)
+mi_decl_weak int reallocarr(void* p, size_t count, size_t size) { return mi_reallocarr(p, count, size); }
#if defined(__wasi__)
// forward __libc interface (see PR #667)
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc.c
index ffc1747..86aaae7 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/alloc.c
@@ -1,5 +1,5 @@
/* ----------------------------------------------------------------------------
-Copyright (c) 2018-2022, Microsoft Research, Daan Leijen
+Copyright (c) 2018-2024, Microsoft Research, Daan Leijen
This is free software; you can redistribute it and/or modify it under the
terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
@@ -18,6 +18,7 @@ terms of the MIT license. A copy of the license can be found in the file
#define MI_IN_ALLOC_C
#include "alloc-override.c"
+#include "free.c"
#undef MI_IN_ALLOC_C
// ------------------------------------------------------
@@ -26,16 +27,18 @@ terms of the MIT license. A copy of the license can be found in the file
// Fast allocation in a page: just pop from the free list.
// Fall back to generic allocation only if the list is empty.
-extern inline void* _mi_page_malloc(mi_heap_t* heap, mi_page_t* page, size_t size, bool zero) mi_attr_noexcept {
- mi_assert_internal(page->xblock_size==0||mi_page_block_size(page) >= size);
+// Note: in release mode the (inlined) routine is about 7 instructions with a single test.
+extern inline void* _mi_page_malloc_zero(mi_heap_t* heap, mi_page_t* page, size_t size, bool zero) mi_attr_noexcept
+{
+ mi_assert_internal(page->block_size == 0 /* empty heap */ || mi_page_block_size(page) >= size);
mi_block_t* const block = page->free;
if mi_unlikely(block == NULL) {
return _mi_malloc_generic(heap, size, zero, 0);
}
mi_assert_internal(block != NULL && _mi_ptr_page(block) == page);
// pop from the free list
- page->used++;
page->free = mi_block_next(page, block);
+ page->used++;
mi_assert_internal(page->free == NULL || _mi_ptr_page(page->free) == page);
#if MI_DEBUG>3
if (page->free_is_zero) {
@@ -50,58 +53,66 @@ extern inline void* _mi_page_malloc(mi_heap_t* heap, mi_page_t* page, size_t siz
// zero the block? note: we need to zero the full block size (issue #63)
if mi_unlikely(zero) {
- mi_assert_internal(page->xblock_size != 0); // do not call with zero'ing for huge blocks (see _mi_malloc_generic)
- mi_assert_internal(page->xblock_size >= MI_PADDING_SIZE);
+ mi_assert_internal(page->block_size != 0); // do not call with zero'ing for huge blocks (see _mi_malloc_generic)
+ mi_assert_internal(page->block_size >= MI_PADDING_SIZE);
if (page->free_is_zero) {
block->next = 0;
- mi_track_mem_defined(block, page->xblock_size - MI_PADDING_SIZE);
+ mi_track_mem_defined(block, page->block_size - MI_PADDING_SIZE);
}
else {
- _mi_memzero_aligned(block, page->xblock_size - MI_PADDING_SIZE);
- }
+ _mi_memzero_aligned(block, page->block_size - MI_PADDING_SIZE);
+ }
}
-#if (MI_DEBUG>0) && !MI_TRACK_ENABLED && !MI_TSAN
+ #if (MI_DEBUG>0) && !MI_TRACK_ENABLED && !MI_TSAN
if (!zero && !mi_page_is_huge(page)) {
memset(block, MI_DEBUG_UNINIT, mi_page_usable_block_size(page));
}
-#elif (MI_SECURE!=0)
+ #elif (MI_SECURE!=0)
if (!zero) { block->next = 0; } // don't leak internal data
-#endif
+ #endif
-#if (MI_STAT>0)
+ #if (MI_STAT>0)
const size_t bsize = mi_page_usable_block_size(page);
if (bsize <= MI_MEDIUM_OBJ_SIZE_MAX) {
mi_heap_stat_increase(heap, normal, bsize);
mi_heap_stat_counter_increase(heap, normal_count, 1);
-#if (MI_STAT>1)
+ #if (MI_STAT>1)
const size_t bin = _mi_bin(bsize);
mi_heap_stat_increase(heap, normal_bins[bin], 1);
-#endif
+ #endif
}
-#endif
-
-#if MI_PADDING // && !MI_TRACK_ENABLED
- mi_padding_t* const padding = (mi_padding_t*)((uint8_t*)block + mi_page_usable_block_size(page));
- ptrdiff_t delta = ((uint8_t*)padding - (uint8_t*)block - (size - MI_PADDING_SIZE));
- #if (MI_DEBUG>=2)
- mi_assert_internal(delta >= 0 && mi_page_usable_block_size(page) >= (size - MI_PADDING_SIZE + delta));
#endif
- mi_track_mem_defined(padding,sizeof(mi_padding_t)); // note: re-enable since mi_page_usable_block_size may set noaccess
- padding->canary = (uint32_t)(mi_ptr_encode(page,block,page->keys));
- padding->delta = (uint32_t)(delta);
- #if MI_PADDING_CHECK
- if (!mi_page_is_huge(page)) {
- uint8_t* fill = (uint8_t*)padding - delta;
- const size_t maxpad = (delta > MI_MAX_ALIGN_SIZE ? MI_MAX_ALIGN_SIZE : delta); // set at most N initial padding bytes
- for (size_t i = 0; i < maxpad; i++) { fill[i] = MI_DEBUG_PADDING; }
- }
+
+ #if MI_PADDING // && !MI_TRACK_ENABLED
+ mi_padding_t* const padding = (mi_padding_t*)((uint8_t*)block + mi_page_usable_block_size(page));
+ ptrdiff_t delta = ((uint8_t*)padding - (uint8_t*)block - (size - MI_PADDING_SIZE));
+ #if (MI_DEBUG>=2)
+ mi_assert_internal(delta >= 0 && mi_page_usable_block_size(page) >= (size - MI_PADDING_SIZE + delta));
+ #endif
+ mi_track_mem_defined(padding,sizeof(mi_padding_t)); // note: re-enable since mi_page_usable_block_size may set noaccess
+ padding->canary = (uint32_t)(mi_ptr_encode(page,block,page->keys));
+ padding->delta = (uint32_t)(delta);
+ #if MI_PADDING_CHECK
+ if (!mi_page_is_huge(page)) {
+ uint8_t* fill = (uint8_t*)padding - delta;
+ const size_t maxpad = (delta > MI_MAX_ALIGN_SIZE ? MI_MAX_ALIGN_SIZE : delta); // set at most N initial padding bytes
+ for (size_t i = 0; i < maxpad; i++) { fill[i] = MI_DEBUG_PADDING; }
+ }
+ #endif
#endif
-#endif
return block;
}
+// extra entries for improved efficiency in `alloc-aligned.c`.
+extern void* _mi_page_malloc(mi_heap_t* heap, mi_page_t* page, size_t size) mi_attr_noexcept {
+ return _mi_page_malloc_zero(heap,page,size,false);
+}
+extern void* _mi_page_malloc_zeroed(mi_heap_t* heap, mi_page_t* page, size_t size) mi_attr_noexcept {
+ return _mi_page_malloc_zero(heap,page,size,true);
+}
+
static inline mi_decl_restrict void* mi_heap_malloc_small_zero(mi_heap_t* heap, size_t size, bool zero) mi_attr_noexcept {
mi_assert(heap != NULL);
#if MI_DEBUG
@@ -112,9 +123,11 @@ static inline mi_decl_restrict void* mi_heap_malloc_small_zero(mi_heap_t* heap,
#if (MI_PADDING)
if (size == 0) { size = sizeof(void*); }
#endif
+
mi_page_t* page = _mi_heap_get_free_small_page(heap, size + MI_PADDING_SIZE);
- void* const p = _mi_page_malloc(heap, page, size + MI_PADDING_SIZE, zero);
+ void* const p = _mi_page_malloc_zero(heap, page, size + MI_PADDING_SIZE, zero);
mi_track_malloc(p,size,zero);
+
#if MI_STAT>1
if (p != NULL) {
if (!mi_heap_is_initialized(heap)) { heap = mi_prim_get_default_heap(); }
@@ -190,484 +203,6 @@ mi_decl_nodiscard mi_decl_restrict void* mi_zalloc(size_t size) mi_attr_noexcept
}
-// ------------------------------------------------------
-// Check for double free in secure and debug mode
-// This is somewhat expensive so only enabled for secure mode 4
-// ------------------------------------------------------
-
-#if (MI_ENCODE_FREELIST && (MI_SECURE>=4 || MI_DEBUG!=0))
-// linear check if the free list contains a specific element
-static bool mi_list_contains(const mi_page_t* page, const mi_block_t* list, const mi_block_t* elem) {
- while (list != NULL) {
- if (elem==list) return true;
- list = mi_block_next(page, list);
- }
- return false;
-}
-
-static mi_decl_noinline bool mi_check_is_double_freex(const mi_page_t* page, const mi_block_t* block) {
- // The decoded value is in the same page (or NULL).
- // Walk the free lists to verify positively if it is already freed
- if (mi_list_contains(page, page->free, block) ||
- mi_list_contains(page, page->local_free, block) ||
- mi_list_contains(page, mi_page_thread_free(page), block))
- {
- _mi_error_message(EAGAIN, "double free detected of block %p with size %zu\n", block, mi_page_block_size(page));
- return true;
- }
- return false;
-}
-
-#define mi_track_page(page,access) { size_t psize; void* pstart = _mi_page_start(_mi_page_segment(page),page,&psize); mi_track_mem_##access( pstart, psize); }
-
-static inline bool mi_check_is_double_free(const mi_page_t* page, const mi_block_t* block) {
- bool is_double_free = false;
- mi_block_t* n = mi_block_nextx(page, block, page->keys); // pretend it is freed, and get the decoded first field
- if (((uintptr_t)n & (MI_INTPTR_SIZE-1))==0 && // quick check: aligned pointer?
- (n==NULL || mi_is_in_same_page(block, n))) // quick check: in same page or NULL?
- {
- // Suspicous: decoded value a in block is in the same page (or NULL) -- maybe a double free?
- // (continue in separate function to improve code generation)
- is_double_free = mi_check_is_double_freex(page, block);
- }
- return is_double_free;
-}
-#else
-static inline bool mi_check_is_double_free(const mi_page_t* page, const mi_block_t* block) {
- MI_UNUSED(page);
- MI_UNUSED(block);
- return false;
-}
-#endif
-
-// ---------------------------------------------------------------------------
-// Check for heap block overflow by setting up padding at the end of the block
-// ---------------------------------------------------------------------------
-
-#if MI_PADDING // && !MI_TRACK_ENABLED
-static bool mi_page_decode_padding(const mi_page_t* page, const mi_block_t* block, size_t* delta, size_t* bsize) {
- *bsize = mi_page_usable_block_size(page);
- const mi_padding_t* const padding = (mi_padding_t*)((uint8_t*)block + *bsize);
- mi_track_mem_defined(padding,sizeof(mi_padding_t));
- *delta = padding->delta;
- uint32_t canary = padding->canary;
- uintptr_t keys[2];
- keys[0] = page->keys[0];
- keys[1] = page->keys[1];
- bool ok = ((uint32_t)mi_ptr_encode(page,block,keys) == canary && *delta <= *bsize);
- mi_track_mem_noaccess(padding,sizeof(mi_padding_t));
- return ok;
-}
-
-// Return the exact usable size of a block.
-static size_t mi_page_usable_size_of(const mi_page_t* page, const mi_block_t* block) {
- size_t bsize;
- size_t delta;
- bool ok = mi_page_decode_padding(page, block, &delta, &bsize);
- mi_assert_internal(ok); mi_assert_internal(delta <= bsize);
- return (ok ? bsize - delta : 0);
-}
-
-// When a non-thread-local block is freed, it becomes part of the thread delayed free
-// list that is freed later by the owning heap. If the exact usable size is too small to
-// contain the pointer for the delayed list, then shrink the padding (by decreasing delta)
-// so it will later not trigger an overflow error in `mi_free_block`.
-void _mi_padding_shrink(const mi_page_t* page, const mi_block_t* block, const size_t min_size) {
- size_t bsize;
- size_t delta;
- bool ok = mi_page_decode_padding(page, block, &delta, &bsize);
- mi_assert_internal(ok);
- if (!ok || (bsize - delta) >= min_size) return; // usually already enough space
- mi_assert_internal(bsize >= min_size);
- if (bsize < min_size) return; // should never happen
- size_t new_delta = (bsize - min_size);
- mi_assert_internal(new_delta < bsize);
- mi_padding_t* padding = (mi_padding_t*)((uint8_t*)block + bsize);
- mi_track_mem_defined(padding,sizeof(mi_padding_t));
- padding->delta = (uint32_t)new_delta;
- mi_track_mem_noaccess(padding,sizeof(mi_padding_t));
-}
-#else
-static size_t mi_page_usable_size_of(const mi_page_t* page, const mi_block_t* block) {
- MI_UNUSED(block);
- return mi_page_usable_block_size(page);
-}
-
-void _mi_padding_shrink(const mi_page_t* page, const mi_block_t* block, const size_t min_size) {
- MI_UNUSED(page);
- MI_UNUSED(block);
- MI_UNUSED(min_size);
-}
-#endif
-
-#if MI_PADDING && MI_PADDING_CHECK
-
-static bool mi_verify_padding(const mi_page_t* page, const mi_block_t* block, size_t* size, size_t* wrong) {
- size_t bsize;
- size_t delta;
- bool ok = mi_page_decode_padding(page, block, &delta, &bsize);
- *size = *wrong = bsize;
- if (!ok) return false;
- mi_assert_internal(bsize >= delta);
- *size = bsize - delta;
- if (!mi_page_is_huge(page)) {
- uint8_t* fill = (uint8_t*)block + bsize - delta;
- const size_t maxpad = (delta > MI_MAX_ALIGN_SIZE ? MI_MAX_ALIGN_SIZE : delta); // check at most the first N padding bytes
- mi_track_mem_defined(fill, maxpad);
- for (size_t i = 0; i < maxpad; i++) {
- if (fill[i] != MI_DEBUG_PADDING) {
- *wrong = bsize - delta + i;
- ok = false;
- break;
- }
- }
- mi_track_mem_noaccess(fill, maxpad);
- }
- return ok;
-}
-
-static void mi_check_padding(const mi_page_t* page, const mi_block_t* block) {
- size_t size;
- size_t wrong;
- if (!mi_verify_padding(page,block,&size,&wrong)) {
- _mi_error_message(EFAULT, "buffer overflow in heap block %p of size %zu: write after %zu bytes\n", block, size, wrong );
- }
-}
-
-#else
-
-static void mi_check_padding(const mi_page_t* page, const mi_block_t* block) {
- MI_UNUSED(page);
- MI_UNUSED(block);
-}
-
-#endif
-
-// only maintain stats for smaller objects if requested
-#if (MI_STAT>0)
-static void mi_stat_free(const mi_page_t* page, const mi_block_t* block) {
- #if (MI_STAT < 2)
- MI_UNUSED(block);
- #endif
- mi_heap_t* const heap = mi_heap_get_default();
- const size_t bsize = mi_page_usable_block_size(page);
- #if (MI_STAT>1)
- const size_t usize = mi_page_usable_size_of(page, block);
- mi_heap_stat_decrease(heap, malloc, usize);
- #endif
- if (bsize <= MI_MEDIUM_OBJ_SIZE_MAX) {
- mi_heap_stat_decrease(heap, normal, bsize);
- #if (MI_STAT > 1)
- mi_heap_stat_decrease(heap, normal_bins[_mi_bin(bsize)], 1);
- #endif
- }
- else if (bsize <= MI_LARGE_OBJ_SIZE_MAX) {
- mi_heap_stat_decrease(heap, large, bsize);
- }
- else {
- mi_heap_stat_decrease(heap, huge, bsize);
- }
-}
-#else
-static void mi_stat_free(const mi_page_t* page, const mi_block_t* block) {
- MI_UNUSED(page); MI_UNUSED(block);
-}
-#endif
-
-#if MI_HUGE_PAGE_ABANDON
-#if (MI_STAT>0)
-// maintain stats for huge objects
-static void mi_stat_huge_free(const mi_page_t* page) {
- mi_heap_t* const heap = mi_heap_get_default();
- const size_t bsize = mi_page_block_size(page); // to match stats in `page.c:mi_page_huge_alloc`
- if (bsize <= MI_LARGE_OBJ_SIZE_MAX) {
- mi_heap_stat_decrease(heap, large, bsize);
- }
- else {
- mi_heap_stat_decrease(heap, huge, bsize);
- }
-}
-#else
-static void mi_stat_huge_free(const mi_page_t* page) {
- MI_UNUSED(page);
-}
-#endif
-#endif
-
-// ------------------------------------------------------
-// Free
-// ------------------------------------------------------
-
-// multi-threaded free (or free in huge block if compiled with MI_HUGE_PAGE_ABANDON)
-static mi_decl_noinline void _mi_free_block_mt(mi_page_t* page, mi_block_t* block)
-{
- // The padding check may access the non-thread-owned page for the key values.
- // that is safe as these are constant and the page won't be freed (as the block is not freed yet).
- mi_check_padding(page, block);
- _mi_padding_shrink(page, block, sizeof(mi_block_t)); // for small size, ensure we can fit the delayed thread pointers without triggering overflow detection
-
- // huge page segments are always abandoned and can be freed immediately
- mi_segment_t* segment = _mi_page_segment(page);
- if (segment->kind == MI_SEGMENT_HUGE) {
- #if MI_HUGE_PAGE_ABANDON
- // huge page segments are always abandoned and can be freed immediately
- mi_stat_huge_free(page);
- _mi_segment_huge_page_free(segment, page, block);
- return;
- #else
- // huge pages are special as they occupy the entire segment
- // as these are large we reset the memory occupied by the page so it is available to other threads
- // (as the owning thread needs to actually free the memory later).
- _mi_segment_huge_page_reset(segment, page, block);
- #endif
- }
-
- #if (MI_DEBUG>0) && !MI_TRACK_ENABLED && !MI_TSAN // note: when tracking, cannot use mi_usable_size with multi-threading
- if (segment->kind != MI_SEGMENT_HUGE) { // not for huge segments as we just reset the content
- memset(block, MI_DEBUG_FREED, mi_usable_size(block));
- }
- #endif
-
- // Try to put the block on either the page-local thread free list, or the heap delayed free list.
- mi_thread_free_t tfreex;
- bool use_delayed;
- mi_thread_free_t tfree = mi_atomic_load_relaxed(&page->xthread_free);
- do {
- use_delayed = (mi_tf_delayed(tfree) == MI_USE_DELAYED_FREE);
- if mi_unlikely(use_delayed) {
- // unlikely: this only happens on the first concurrent free in a page that is in the full list
- tfreex = mi_tf_set_delayed(tfree,MI_DELAYED_FREEING);
- }
- else {
- // usual: directly add to page thread_free list
- mi_block_set_next(page, block, mi_tf_block(tfree));
- tfreex = mi_tf_set_block(tfree,block);
- }
- } while (!mi_atomic_cas_weak_release(&page->xthread_free, &tfree, tfreex));
-
- if mi_unlikely(use_delayed) {
- // racy read on `heap`, but ok because MI_DELAYED_FREEING is set (see `mi_heap_delete` and `mi_heap_collect_abandon`)
- mi_heap_t* const heap = (mi_heap_t*)(mi_atomic_load_acquire(&page->xheap)); //mi_page_heap(page);
- mi_assert_internal(heap != NULL);
- if (heap != NULL) {
- // add to the delayed free list of this heap. (do this atomically as the lock only protects heap memory validity)
- mi_block_t* dfree = mi_atomic_load_ptr_relaxed(mi_block_t, &heap->thread_delayed_free);
- do {
- mi_block_set_nextx(heap,block,dfree, heap->keys);
- } while (!mi_atomic_cas_ptr_weak_release(mi_block_t,&heap->thread_delayed_free, &dfree, block));
- }
-
- // and reset the MI_DELAYED_FREEING flag
- tfree = mi_atomic_load_relaxed(&page->xthread_free);
- do {
- tfreex = tfree;
- mi_assert_internal(mi_tf_delayed(tfree) == MI_DELAYED_FREEING);
- tfreex = mi_tf_set_delayed(tfree,MI_NO_DELAYED_FREE);
- } while (!mi_atomic_cas_weak_release(&page->xthread_free, &tfree, tfreex));
- }
-}
-
-// regular free
-static inline void _mi_free_block(mi_page_t* page, bool local, mi_block_t* block)
-{
- // and push it on the free list
- //const size_t bsize = mi_page_block_size(page);
- if mi_likely(local) {
- // owning thread can free a block directly
- if mi_unlikely(mi_check_is_double_free(page, block)) return;
- mi_check_padding(page, block);
- #if (MI_DEBUG>0) && !MI_TRACK_ENABLED && !MI_TSAN
- if (!mi_page_is_huge(page)) { // huge page content may be already decommitted
- memset(block, MI_DEBUG_FREED, mi_page_block_size(page));
- }
- #endif
- mi_block_set_next(page, block, page->local_free);
- page->local_free = block;
- page->used--;
- if mi_unlikely(mi_page_all_free(page)) {
- _mi_page_retire(page);
- }
- else if mi_unlikely(mi_page_is_in_full(page)) {
- _mi_page_unfull(page);
- }
- }
- else {
- _mi_free_block_mt(page,block);
- }
-}
-
-
-// Adjust a block that was allocated aligned, to the actual start of the block in the page.
-mi_block_t* _mi_page_ptr_unalign(const mi_segment_t* segment, const mi_page_t* page, const void* p) {
- mi_assert_internal(page!=NULL && p!=NULL);
- const size_t diff = (uint8_t*)p - _mi_page_start(segment, page, NULL);
- const size_t adjust = (diff % mi_page_block_size(page));
- return (mi_block_t*)((uintptr_t)p - adjust);
-}
-
-
-void mi_decl_noinline _mi_free_generic(const mi_segment_t* segment, mi_page_t* page, bool is_local, void* p) mi_attr_noexcept {
- mi_block_t* const block = (mi_page_has_aligned(page) ? _mi_page_ptr_unalign(segment, page, p) : (mi_block_t*)p);
- mi_stat_free(page, block); // stat_free may access the padding
- mi_track_free_size(block, mi_page_usable_size_of(page,block));
- _mi_free_block(page, is_local, block);
-}
-
-// Get the segment data belonging to a pointer
-// This is just a single `and` in assembly but does further checks in debug mode
-// (and secure mode) if this was a valid pointer.
-static inline mi_segment_t* mi_checked_ptr_segment(const void* p, const char* msg)
-{
- MI_UNUSED(msg);
- mi_assert(p != NULL);
-
-#if (MI_DEBUG>0)
- if mi_unlikely(((uintptr_t)p & (MI_INTPTR_SIZE - 1)) != 0) {
- _mi_error_message(EINVAL, "%s: invalid (unaligned) pointer: %p\n", msg, p);
- return NULL;
- }
-#endif
-
- mi_segment_t* const segment = _mi_ptr_segment(p);
- mi_assert_internal(segment != NULL);
-
-#if (MI_DEBUG>0)
- if mi_unlikely(!mi_is_in_heap_region(p)) {
- #if (MI_INTPTR_SIZE == 8 && defined(__linux__))
- if (((uintptr_t)p >> 40) != 0x7F) { // linux tends to align large blocks above 0x7F000000000 (issue #640)
- #else
- {
- #endif
- _mi_warning_message("%s: pointer might not point to a valid heap region: %p\n"
- "(this may still be a valid very large allocation (over 64MiB))\n", msg, p);
- if mi_likely(_mi_ptr_cookie(segment) == segment->cookie) {
- _mi_warning_message("(yes, the previous pointer %p was valid after all)\n", p);
- }
- }
- }
-#endif
-#if (MI_DEBUG>0 || MI_SECURE>=4)
- if mi_unlikely(_mi_ptr_cookie(segment) != segment->cookie) {
- _mi_error_message(EINVAL, "%s: pointer does not point to a valid heap space: %p\n", msg, p);
- return NULL;
- }
-#endif
-
- return segment;
-}
-
-// Free a block
-// fast path written carefully to prevent spilling on the stack
-void mi_free(void* p) mi_attr_noexcept
-{
- if mi_unlikely(p == NULL) return;
- mi_segment_t* const segment = mi_checked_ptr_segment(p,"mi_free");
- const bool is_local= (_mi_prim_thread_id() == mi_atomic_load_relaxed(&segment->thread_id));
- mi_page_t* const page = _mi_segment_page_of(segment, p);
-
- if mi_likely(is_local) { // thread-local free?
- if mi_likely(page->flags.full_aligned == 0) // and it is not a full page (full pages need to move from the full bin), nor has aligned blocks (aligned blocks need to be unaligned)
- {
- mi_block_t* const block = (mi_block_t*)p;
- if mi_unlikely(mi_check_is_double_free(page, block)) return;
- mi_check_padding(page, block);
- mi_stat_free(page, block);
- #if (MI_DEBUG>0) && !MI_TRACK_ENABLED && !MI_TSAN
- memset(block, MI_DEBUG_FREED, mi_page_block_size(page));
- #endif
- mi_track_free_size(p, mi_page_usable_size_of(page,block)); // faster then mi_usable_size as we already know the page and that p is unaligned
- mi_block_set_next(page, block, page->local_free);
- page->local_free = block;
- if mi_unlikely(--page->used == 0) { // using this expression generates better code than: page->used--; if (mi_page_all_free(page))
- _mi_page_retire(page);
- }
- }
- else {
- // page is full or contains (inner) aligned blocks; use generic path
- _mi_free_generic(segment, page, true, p);
- }
- }
- else {
- // not thread-local; use generic path
- _mi_free_generic(segment, page, false, p);
- }
-}
-
-// return true if successful
-bool _mi_free_delayed_block(mi_block_t* block) {
- // get segment and page
- const mi_segment_t* const segment = _mi_ptr_segment(block);
- mi_assert_internal(_mi_ptr_cookie(segment) == segment->cookie);
- mi_assert_internal(_mi_thread_id() == segment->thread_id);
- mi_page_t* const page = _mi_segment_page_of(segment, block);
-
- // Clear the no-delayed flag so delayed freeing is used again for this page.
- // This must be done before collecting the free lists on this page -- otherwise
- // some blocks may end up in the page `thread_free` list with no blocks in the
- // heap `thread_delayed_free` list which may cause the page to be never freed!
- // (it would only be freed if we happen to scan it in `mi_page_queue_find_free_ex`)
- if (!_mi_page_try_use_delayed_free(page, MI_USE_DELAYED_FREE, false /* dont overwrite never delayed */)) {
- return false;
- }
-
- // collect all other non-local frees to ensure up-to-date `used` count
- _mi_page_free_collect(page, false);
-
- // and free the block (possibly freeing the page as well since used is updated)
- _mi_free_block(page, true, block);
- return true;
-}
-
-// Bytes available in a block
-mi_decl_noinline static size_t mi_page_usable_aligned_size_of(const mi_segment_t* segment, const mi_page_t* page, const void* p) mi_attr_noexcept {
- const mi_block_t* block = _mi_page_ptr_unalign(segment, page, p);
- const size_t size = mi_page_usable_size_of(page, block);
- const ptrdiff_t adjust = (uint8_t*)p - (uint8_t*)block;
- mi_assert_internal(adjust >= 0 && (size_t)adjust <= size);
- return (size - adjust);
-}
-
-static inline size_t _mi_usable_size(const void* p, const char* msg) mi_attr_noexcept {
- if (p == NULL) return 0;
- const mi_segment_t* const segment = mi_checked_ptr_segment(p, msg);
- const mi_page_t* const page = _mi_segment_page_of(segment, p);
- if mi_likely(!mi_page_has_aligned(page)) {
- const mi_block_t* block = (const mi_block_t*)p;
- return mi_page_usable_size_of(page, block);
- }
- else {
- // split out to separate routine for improved code generation
- return mi_page_usable_aligned_size_of(segment, page, p);
- }
-}
-
-mi_decl_nodiscard size_t mi_usable_size(const void* p) mi_attr_noexcept {
- return _mi_usable_size(p, "mi_usable_size");
-}
-
-
-// ------------------------------------------------------
-// Allocation extensions
-// ------------------------------------------------------
-
-void mi_free_size(void* p, size_t size) mi_attr_noexcept {
- MI_UNUSED_RELEASE(size);
- mi_assert(p == NULL || size <= _mi_usable_size(p,"mi_free_size"));
- mi_free(p);
-}
-
-void mi_free_size_aligned(void* p, size_t size, size_t alignment) mi_attr_noexcept {
- MI_UNUSED_RELEASE(alignment);
- mi_assert(((uintptr_t)p % alignment) == 0);
- mi_free_size(p,size);
-}
-
-void mi_free_aligned(void* p, size_t alignment) mi_attr_noexcept {
- MI_UNUSED_RELEASE(alignment);
- mi_assert(((uintptr_t)p % alignment) == 0);
- mi_free(p);
-}
-
mi_decl_nodiscard extern inline mi_decl_restrict void* mi_heap_calloc(mi_heap_t* heap, size_t count, size_t size) mi_attr_noexcept {
size_t total;
if (mi_count_size_overflow(count,size,&total)) return NULL;
@@ -794,11 +329,11 @@ mi_decl_nodiscard void* mi_recalloc(void* p, size_t count, size_t size) mi_attr_
// `strdup` using mi_malloc
mi_decl_nodiscard mi_decl_restrict char* mi_heap_strdup(mi_heap_t* heap, const char* s) mi_attr_noexcept {
if (s == NULL) return NULL;
- size_t n = strlen(s);
- char* t = (char*)mi_heap_malloc(heap,n+1);
+ size_t len = _mi_strlen(s);
+ char* t = (char*)mi_heap_malloc(heap,len+1);
if (t == NULL) return NULL;
- _mi_memcpy(t, s, n);
- t[n] = 0;
+ _mi_memcpy(t, s, len);
+ t[len] = 0;
return t;
}
@@ -809,13 +344,11 @@ mi_decl_nodiscard mi_decl_restrict char* mi_strdup(const char* s) mi_attr_noexce
// `strndup` using mi_malloc
mi_decl_nodiscard mi_decl_restrict char* mi_heap_strndup(mi_heap_t* heap, const char* s, size_t n) mi_attr_noexcept {
if (s == NULL) return NULL;
- const char* end = (const char*)memchr(s, 0, n); // find end of string in the first `n` characters (returns NULL if not found)
- const size_t m = (end != NULL ? (size_t)(end - s) : n); // `m` is the minimum of `n` or the end-of-string
- mi_assert_internal(m <= n);
- char* t = (char*)mi_heap_malloc(heap, m+1);
+ const size_t len = _mi_strnlen(s,n); // len <= n
+ char* t = (char*)mi_heap_malloc(heap, len+1);
if (t == NULL) return NULL;
- _mi_memcpy(t, s, m);
- t[m] = 0;
+ _mi_memcpy(t, s, len);
+ t[len] = 0;
return t;
}
@@ -869,7 +402,8 @@ char* mi_heap_realpath(mi_heap_t* heap, const char* fname, char* resolved_name)
char* rname = realpath(fname, NULL);
if (rname == NULL) return NULL;
char* result = mi_heap_strdup(heap, rname);
- free(rname); // use regular free! (which may be redirected to our free but that's ok)
+ mi_cfree(rname); // use checked free (which may be redirected to our free but that's ok)
+ // note: with ASAN realpath is intercepted and mi_cfree may leak the returned pointer :-(
return result;
}
/*
@@ -913,9 +447,13 @@ static bool mi_try_new_handler(bool nothrow) {
#endif
if (h==NULL) {
_mi_error_message(ENOMEM, "out of memory in 'new'");
+ #if defined(_CPPUNWIND) || defined(__cpp_exceptions) // exceptions are not always enabled
if (!nothrow) {
throw std::bad_alloc();
}
+ #else
+ MI_UNUSED(nothrow);
+ #endif
return false;
}
else {
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/arena.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/arena.c
index a04a04c..62bea78 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/arena.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/arena.c
@@ -13,7 +13,7 @@ threads and need to be accessed using atomic operations.
Arenas are used to for huge OS page (1GiB) reservations or for reserving
OS memory upfront which can be improve performance or is sometimes needed
-on embedded devices. We can also employ this with WASI or `sbrk` systems
+on embedded devices. We can also employ this with WASI or `sbrk` systems
to reserve large arenas upfront and be able to reuse the memory more effectively.
The arena allocation needs to be thread safe and we use an atomic bitmap to allocate.
@@ -48,13 +48,14 @@ typedef struct mi_arena_s {
size_t meta_size; // size of the arena structure itself (including its bitmaps)
mi_memid_t meta_memid; // memid of the arena structure itself (OS or static allocation)
int numa_node; // associated NUMA node
- bool exclusive; // only allow allocations if specifically for this arena
+ bool exclusive; // only allow allocations if specifically for this arena
bool is_large; // memory area consists of large- or huge OS pages (always committed)
_Atomic(size_t) search_idx; // optimization to start the search for free blocks
- _Atomic(mi_msecs_t) purge_expire; // expiration time when blocks should be decommitted from `blocks_decommit`.
+ _Atomic(mi_msecs_t) purge_expire; // expiration time when blocks should be decommitted from `blocks_decommit`.
mi_bitmap_field_t* blocks_dirty; // are the blocks potentially non-zero?
mi_bitmap_field_t* blocks_committed; // are the blocks committed? (can be NULL for memory that cannot be decommitted)
- mi_bitmap_field_t* blocks_purge; // blocks that can be (reset) decommitted. (can be NULL for memory that cannot be (reset) decommitted)
+ mi_bitmap_field_t* blocks_purge; // blocks that can be (reset) decommitted. (can be NULL for memory that cannot be (reset) decommitted)
+ mi_bitmap_field_t* blocks_abandoned; // blocks that start with an abandoned segment. (This crosses API's but it is convenient to have here)
mi_bitmap_field_t blocks_inuse[1]; // in-place bitmap of in-use blocks (of size `field_count`)
} mi_arena_t;
@@ -94,7 +95,7 @@ bool _mi_arena_memid_is_suitable(mi_memid_t memid, mi_arena_id_t request_arena_i
return mi_arena_id_is_suitable(memid.mem.arena.id, memid.mem.arena.is_exclusive, request_arena_id);
}
else {
- return mi_arena_id_is_suitable(0, false, request_arena_id);
+ return mi_arena_id_is_suitable(_mi_arena_id_none(), false, request_arena_id);
}
}
@@ -103,7 +104,7 @@ bool _mi_arena_memid_is_os_allocated(mi_memid_t memid) {
}
/* -----------------------------------------------------------
- Arena allocations get a (currently) 16-bit memory id where the
+ Arena allocations get a (currently) 16-bit memory id where the
lower 8 bits are the arena id, and the upper bits the block index.
----------------------------------------------------------- */
@@ -165,6 +166,7 @@ static void* mi_arena_static_zalloc(size_t size, size_t alignment, mi_memid_t* m
// success
*memid = _mi_memid_create(MI_MEM_STATIC);
+ memid->initially_zero = true;
const size_t start = _mi_align_up(oldtop, alignment);
uint8_t* const p = &mi_arena_static[start];
_mi_memzero(p, size);
@@ -175,11 +177,19 @@ static void* mi_arena_meta_zalloc(size_t size, mi_memid_t* memid, mi_stats_t* st
*memid = _mi_memid_none();
// try static
- void* p = mi_arena_static_zalloc(size, MI_ALIGNMENT_MAX, memid);
+ void* p = mi_arena_static_zalloc(size, MI_MAX_ALIGN_SIZE, memid);
if (p != NULL) return p;
// or fall back to the OS
- return _mi_os_alloc(size, memid, stats);
+ p = _mi_os_alloc(size, memid, stats);
+ if (p == NULL) return NULL;
+
+ // zero the OS memory if needed
+ if (!memid->initially_zero) {
+ _mi_memzero_aligned(p, size);
+ memid->initially_zero = true;
+ }
+ return p;
}
static void mi_arena_meta_free(void* p, mi_memid_t memid, size_t size, mi_stats_t* stats) {
@@ -201,11 +211,11 @@ static void* mi_arena_block_start(mi_arena_t* arena, mi_bitmap_index_t bindex) {
----------------------------------------------------------- */
// claim the `blocks_inuse` bits
-static bool mi_arena_try_claim(mi_arena_t* arena, size_t blocks, mi_bitmap_index_t* bitmap_idx)
+static bool mi_arena_try_claim(mi_arena_t* arena, size_t blocks, mi_bitmap_index_t* bitmap_idx, mi_stats_t* stats)
{
size_t idx = 0; // mi_atomic_load_relaxed(&arena->search_idx); // start from last search; ok to be relaxed as the exact start does not matter
- if (_mi_bitmap_try_find_from_claim_across(arena->blocks_inuse, arena->field_count, idx, blocks, bitmap_idx)) {
- mi_atomic_store_relaxed(&arena->search_idx, mi_bitmap_index_field(*bitmap_idx)); // start search from found location next time around
+ if (_mi_bitmap_try_find_from_claim_across(arena->blocks_inuse, arena->field_count, idx, blocks, bitmap_idx, stats)) {
+ mi_atomic_store_relaxed(&arena->search_idx, mi_bitmap_index_field(*bitmap_idx)); // start search from found location next time around
return true;
};
return false;
@@ -223,9 +233,9 @@ static mi_decl_noinline void* mi_arena_try_alloc_at(mi_arena_t* arena, size_t ar
mi_assert_internal(mi_arena_id_index(arena->id) == arena_index);
mi_bitmap_index_t bitmap_index;
- if (!mi_arena_try_claim(arena, needed_bcount, &bitmap_index)) return NULL;
+ if (!mi_arena_try_claim(arena, needed_bcount, &bitmap_index, tld->stats)) return NULL;
- // claimed it!
+ // claimed it!
void* p = mi_arena_block_start(arena, bitmap_index);
*memid = mi_memid_create_arena(arena->id, arena->exclusive, bitmap_index);
memid->is_pinned = arena->memid.is_pinned;
@@ -265,21 +275,21 @@ static mi_decl_noinline void* mi_arena_try_alloc_at(mi_arena_t* arena, size_t ar
// no need to commit, but check if already fully committed
memid->initially_committed = _mi_bitmap_is_claimed_across(arena->blocks_committed, arena->field_count, needed_bcount, bitmap_index);
}
-
+
return p;
}
// allocate in a speficic arena
-static void* mi_arena_try_alloc_at_id(mi_arena_id_t arena_id, bool match_numa_node, int numa_node, size_t size, size_t alignment,
- bool commit, bool allow_large, mi_arena_id_t req_arena_id, mi_memid_t* memid, mi_os_tld_t* tld )
+static void* mi_arena_try_alloc_at_id(mi_arena_id_t arena_id, bool match_numa_node, int numa_node, size_t size, size_t alignment,
+ bool commit, bool allow_large, mi_arena_id_t req_arena_id, mi_memid_t* memid, mi_os_tld_t* tld )
{
MI_UNUSED_RELEASE(alignment);
mi_assert_internal(alignment <= MI_SEGMENT_ALIGN);
- const size_t bcount = mi_block_count_of_size(size);
+ const size_t bcount = mi_block_count_of_size(size);
const size_t arena_index = mi_arena_id_index(arena_id);
mi_assert_internal(arena_index < mi_atomic_load_relaxed(&mi_arena_count));
mi_assert_internal(size <= mi_arena_block_size(bcount));
-
+
// Check arena suitability
mi_arena_t* arena = mi_atomic_load_ptr_acquire(mi_arena_t, &mi_arenas[arena_index]);
if (arena == NULL) return NULL;
@@ -299,7 +309,7 @@ static void* mi_arena_try_alloc_at_id(mi_arena_id_t arena_id, bool match_numa_no
// allocate from an arena with fallback to the OS
-static mi_decl_noinline void* mi_arena_try_alloc(int numa_node, size_t size, size_t alignment,
+static mi_decl_noinline void* mi_arena_try_alloc(int numa_node, size_t size, size_t alignment,
bool commit, bool allow_large,
mi_arena_id_t req_arena_id, mi_memid_t* memid, mi_os_tld_t* tld )
{
@@ -307,9 +317,9 @@ static mi_decl_noinline void* mi_arena_try_alloc(int numa_node, size_t size, siz
mi_assert_internal(alignment <= MI_SEGMENT_ALIGN);
const size_t max_arena = mi_atomic_load_relaxed(&mi_arena_count);
if mi_likely(max_arena == 0) return NULL;
-
+
if (req_arena_id != _mi_arena_id_none()) {
- // try a specific arena if requested
+ // try a specific arena if requested
if (mi_arena_id_index(req_arena_id) < max_arena) {
void* p = mi_arena_try_alloc_at_id(req_arena_id, true, numa_node, size, alignment, commit, allow_large, req_arena_id, memid, tld);
if (p != NULL) return p;
@@ -317,7 +327,7 @@ static mi_decl_noinline void* mi_arena_try_alloc(int numa_node, size_t size, siz
}
else {
// try numa affine allocation
- for (size_t i = 0; i < max_arena; i++) {
+ for (size_t i = 0; i < max_arena; i++) {
void* p = mi_arena_try_alloc_at_id(mi_arena_id_create(i), true, numa_node, size, alignment, commit, allow_large, req_arena_id, memid, tld);
if (p != NULL) return p;
}
@@ -345,22 +355,22 @@ static bool mi_arena_reserve(size_t req_size, bool allow_large, mi_arena_id_t re
size_t arena_reserve = mi_option_get_size(mi_option_arena_reserve);
if (arena_reserve == 0) return false;
- if (!_mi_os_has_virtual_reserve()) {
- arena_reserve = arena_reserve/4; // be conservative if virtual reserve is not supported (for some embedded systems for example)
+ if (!_mi_os_has_virtual_reserve()) {
+ arena_reserve = arena_reserve/4; // be conservative if virtual reserve is not supported (for WASM for example)
}
arena_reserve = _mi_align_up(arena_reserve, MI_ARENA_BLOCK_SIZE);
if (arena_count >= 8 && arena_count <= 128) {
arena_reserve = ((size_t)1<<(arena_count/8)) * arena_reserve; // scale up the arena sizes exponentially
- }
+ }
if (arena_reserve < req_size) return false; // should be able to at least handle the current allocation size
-
+
// commit eagerly?
bool arena_commit = false;
if (mi_option_get(mi_option_arena_eager_commit) == 2) { arena_commit = _mi_os_has_overcommit(); }
else if (mi_option_get(mi_option_arena_eager_commit) == 1) { arena_commit = true; }
- return (mi_reserve_os_memory_ex(arena_reserve, arena_commit, allow_large, false /* exclusive */, arena_id) == 0);
-}
+ return (mi_reserve_os_memory_ex(arena_reserve, arena_commit, allow_large, false /* exclusive? */, arena_id) == 0);
+}
void* _mi_arena_alloc_aligned(size_t size, size_t alignment, size_t align_offset, bool commit, bool allow_large,
@@ -373,35 +383,37 @@ void* _mi_arena_alloc_aligned(size_t size, size_t alignment, size_t align_offset
const int numa_node = _mi_os_numa_node(tld); // current numa node
// try to allocate in an arena if the alignment is small enough and the object is not too small (as for heap meta data)
- if (size >= MI_ARENA_MIN_OBJ_SIZE && alignment <= MI_SEGMENT_ALIGN && align_offset == 0) {
- void* p = mi_arena_try_alloc(numa_node, size, alignment, commit, allow_large, req_arena_id, memid, tld);
- if (p != NULL) return p;
-
- // otherwise, try to first eagerly reserve a new arena
- if (req_arena_id == _mi_arena_id_none()) {
- mi_arena_id_t arena_id = 0;
- if (mi_arena_reserve(size, allow_large, req_arena_id, &arena_id)) {
- // and try allocate in there
- mi_assert_internal(req_arena_id == _mi_arena_id_none());
- p = mi_arena_try_alloc_at_id(arena_id, true, numa_node, size, alignment, commit, allow_large, req_arena_id, memid, tld);
- if (p != NULL) return p;
+ if (!mi_option_is_enabled(mi_option_disallow_arena_alloc) || req_arena_id != _mi_arena_id_none()) { // is arena allocation allowed?
+ if (size >= MI_ARENA_MIN_OBJ_SIZE && alignment <= MI_SEGMENT_ALIGN && align_offset == 0) {
+ void* p = mi_arena_try_alloc(numa_node, size, alignment, commit, allow_large, req_arena_id, memid, tld);
+ if (p != NULL) return p;
+
+ // otherwise, try to first eagerly reserve a new arena
+ if (req_arena_id == _mi_arena_id_none()) {
+ mi_arena_id_t arena_id = 0;
+ if (mi_arena_reserve(size, allow_large, req_arena_id, &arena_id)) {
+ // and try allocate in there
+ mi_assert_internal(req_arena_id == _mi_arena_id_none());
+ p = mi_arena_try_alloc_at_id(arena_id, true, numa_node, size, alignment, commit, allow_large, req_arena_id, memid, tld);
+ if (p != NULL) return p;
+ }
}
}
}
// if we cannot use OS allocation, return NULL
- if (mi_option_is_enabled(mi_option_limit_os_alloc) || req_arena_id != _mi_arena_id_none()) {
+ if (mi_option_is_enabled(mi_option_disallow_os_alloc) || req_arena_id != _mi_arena_id_none()) {
errno = ENOMEM;
return NULL;
}
-
+
// finally, fall back to the OS
if (align_offset > 0) {
return _mi_os_alloc_aligned_at_offset(size, alignment, align_offset, commit, allow_large, memid, tld->stats);
}
else {
return _mi_os_alloc_aligned(size, alignment, commit, allow_large, memid, tld->stats);
- }
+ }
}
void* _mi_arena_alloc(size_t size, bool commit, bool allow_large, mi_arena_id_t req_arena_id, mi_memid_t* memid, mi_os_tld_t* tld)
@@ -437,22 +449,22 @@ static void mi_arena_purge(mi_arena_t* arena, size_t bitmap_idx, size_t blocks,
mi_assert_internal(arena->blocks_purge != NULL);
mi_assert_internal(!arena->memid.is_pinned);
const size_t size = mi_arena_block_size(blocks);
- void* const p = mi_arena_block_start(arena, bitmap_idx);
+ void* const p = mi_arena_block_start(arena, bitmap_idx);
bool needs_recommit;
if (_mi_bitmap_is_claimed_across(arena->blocks_committed, arena->field_count, blocks, bitmap_idx)) {
// all blocks are committed, we can purge freely
needs_recommit = _mi_os_purge(p, size, stats);
}
else {
- // some blocks are not committed -- this can happen when a partially committed block is freed
+ // some blocks are not committed -- this can happen when a partially committed block is freed
// in `_mi_arena_free` and it is conservatively marked as uncommitted but still scheduled for a purge
- // we need to ensure we do not try to reset (as that may be invalid for uncommitted memory),
+ // we need to ensure we do not try to reset (as that may be invalid for uncommitted memory),
// and also undo the decommit stats (as it was already adjusted)
mi_assert_internal(mi_option_is_enabled(mi_option_purge_decommits));
needs_recommit = _mi_os_purge_ex(p, size, false /* allow reset? */, stats);
- _mi_stat_increase(&stats->committed, size);
+ if (needs_recommit) { _mi_stat_increase(&_mi_stats_main.committed, size); }
}
-
+
// clear the purged blocks
_mi_bitmap_unclaim_across(arena->blocks_purge, arena->field_count, blocks, bitmap_idx);
// update committed bitmap
@@ -470,13 +482,13 @@ static void mi_arena_schedule_purge(mi_arena_t* arena, size_t bitmap_idx, size_t
if (_mi_preloading() || delay == 0) {
// decommit directly
- mi_arena_purge(arena, bitmap_idx, blocks, stats);
+ mi_arena_purge(arena, bitmap_idx, blocks, stats);
}
else {
// schedule decommit
mi_msecs_t expire = mi_atomic_loadi64_relaxed(&arena->purge_expire);
if (expire != 0) {
- mi_atomic_addi64_acq_rel(&arena->purge_expire, delay/10); // add smallish extra delay
+ mi_atomic_addi64_acq_rel(&arena->purge_expire, (mi_msecs_t)(delay/10)); // add smallish extra delay
}
else {
mi_atomic_storei64_release(&arena->purge_expire, _mi_clock_now() + delay);
@@ -512,7 +524,7 @@ static bool mi_arena_purge_range(mi_arena_t* arena, size_t idx, size_t startidx,
}
// returns true if anything was purged
-static bool mi_arena_try_purge(mi_arena_t* arena, mi_msecs_t now, bool force, mi_stats_t* stats)
+static bool mi_arena_try_purge(mi_arena_t* arena, mi_msecs_t now, bool force, mi_stats_t* stats)
{
if (arena->memid.is_pinned || arena->blocks_purge == NULL) return false;
mi_msecs_t expire = mi_atomic_loadi64_relaxed(&arena->purge_expire);
@@ -520,11 +532,11 @@ static bool mi_arena_try_purge(mi_arena_t* arena, mi_msecs_t now, bool force, mi
if (!force && expire > now) return false;
// reset expire (if not already set concurrently)
- mi_atomic_casi64_strong_acq_rel(&arena->purge_expire, &expire, 0);
-
+ mi_atomic_casi64_strong_acq_rel(&arena->purge_expire, &expire, (mi_msecs_t)0);
+
// potential purges scheduled, walk through the bitmap
bool any_purged = false;
- bool full_purge = true;
+ bool full_purge = true;
for (size_t i = 0; i < arena->field_count; i++) {
size_t purge = mi_atomic_load_relaxed(&arena->blocks_purge[i]);
if (purge != 0) {
@@ -575,7 +587,7 @@ static void mi_arenas_try_purge( bool force, bool visit_all, mi_stats_t* stats )
// allow only one thread to purge at a time
static mi_atomic_guard_t purge_guard;
- mi_atomic_guard(&purge_guard)
+ mi_atomic_guard(&purge_guard)
{
mi_msecs_t now = _mi_clock_now();
size_t max_purge_count = (visit_all ? max_arena : 1);
@@ -588,7 +600,7 @@ static void mi_arenas_try_purge( bool force, bool visit_all, mi_stats_t* stats )
}
}
}
- }
+ }
}
@@ -602,12 +614,12 @@ void _mi_arena_free(void* p, size_t size, size_t committed_size, mi_memid_t memi
if (p==NULL) return;
if (size==0) return;
const bool all_committed = (committed_size == size);
-
+
if (mi_memkind_is_os(memid.memkind)) {
// was a direct OS allocation, pass through
if (!all_committed && committed_size > 0) {
// if partially committed, adjust the committed stats (as `_mi_os_free` will increase decommit by the full size)
- _mi_stat_decrease(&stats->committed, committed_size);
+ _mi_stat_decrease(&_mi_stats_main.committed, committed_size);
}
_mi_os_free(p, size, memid, stats);
}
@@ -620,15 +632,15 @@ void _mi_arena_free(void* p, size_t size, size_t committed_size, mi_memid_t memi
mi_arena_t* arena = mi_atomic_load_ptr_acquire(mi_arena_t,&mi_arenas[arena_idx]);
mi_assert_internal(arena != NULL);
const size_t blocks = mi_block_count_of_size(size);
-
+
// checks
if (arena == NULL) {
- _mi_error_message(EINVAL, "trying to free from non-existent arena: %p, size %zu, memid: 0x%zx\n", p, size, memid);
+ _mi_error_message(EINVAL, "trying to free from an invalid arena: %p, size %zu, memid: 0x%zx\n", p, size, memid);
return;
}
mi_assert_internal(arena->field_count > mi_bitmap_index_field(bitmap_idx));
if (arena->field_count <= mi_bitmap_index_field(bitmap_idx)) {
- _mi_error_message(EINVAL, "trying to free from non-existent arena block: %p, size %zu, memid: 0x%zx\n", p, size, memid);
+ _mi_error_message(EINVAL, "trying to free from an invalid arena block: %p, size %zu, memid: 0x%zx\n", p, size, memid);
return;
}
@@ -642,7 +654,7 @@ void _mi_arena_free(void* p, size_t size, size_t committed_size, mi_memid_t memi
else {
mi_assert_internal(arena->blocks_committed != NULL);
mi_assert_internal(arena->blocks_purge != NULL);
-
+
if (!all_committed) {
// mark the entire range as no longer committed (so we recommit the full range when re-using)
_mi_bitmap_unclaim_across(arena->blocks_committed, arena->field_count, blocks, bitmap_idx);
@@ -650,16 +662,16 @@ void _mi_arena_free(void* p, size_t size, size_t committed_size, mi_memid_t memi
if (committed_size > 0) {
// if partially committed, adjust the committed stats (is it will be recommitted when re-using)
// in the delayed purge, we now need to not count a decommit if the range is not marked as committed.
- _mi_stat_decrease(&stats->committed, committed_size);
+ _mi_stat_decrease(&_mi_stats_main.committed, committed_size);
}
// note: if not all committed, it may be that the purge will reset/decommit the entire range
// that contains already decommitted parts. Since purge consistently uses reset or decommit that
// works (as we should never reset decommitted parts).
}
// (delay) purge the entire range
- mi_arena_schedule_purge(arena, bitmap_idx, blocks, stats);
+ mi_arena_schedule_purge(arena, bitmap_idx, blocks, stats);
}
-
+
// and make it available to others again
bool all_inuse = _mi_bitmap_unclaim_across(arena->blocks_inuse, arena->field_count, blocks, bitmap_idx);
if (!all_inuse) {
@@ -684,9 +696,9 @@ static void mi_arenas_unsafe_destroy(void) {
for (size_t i = 0; i < max_arena; i++) {
mi_arena_t* arena = mi_atomic_load_ptr_acquire(mi_arena_t, &mi_arenas[i]);
if (arena != NULL) {
- if (arena->start != NULL && mi_memkind_is_os(arena->memid.memkind)) {
+ if (arena->start != NULL && mi_memkind_is_os(arena->memid.memkind)) {
mi_atomic_store_ptr_release(mi_arena_t, &mi_arenas[i], NULL);
- _mi_os_free(arena->start, mi_arena_size(arena), arena->memid, &_mi_stats_main);
+ _mi_os_free(arena->start, mi_arena_size(arena), arena->memid, &_mi_stats_main);
}
else {
new_max_arena = i;
@@ -701,15 +713,15 @@ static void mi_arenas_unsafe_destroy(void) {
}
// Purge the arenas; if `force_purge` is true, amenable parts are purged even if not yet expired
-void _mi_arena_collect(bool force_purge, mi_stats_t* stats) {
- mi_arenas_try_purge(force_purge, true /* visit all */, stats);
+void _mi_arenas_collect(bool force_purge, mi_stats_t* stats) {
+ mi_arenas_try_purge(force_purge, force_purge /* visit all? */, stats);
}
// destroy owned arenas; this is unsafe and should only be done using `mi_option_destroy_on_exit`
// for dynamic libraries that are unloaded and need to release all their allocated memory.
void _mi_arena_unsafe_destroy_all(mi_stats_t* stats) {
mi_arenas_unsafe_destroy();
- _mi_arena_collect(true /* force purge */, stats); // purge non-owned arenas
+ _mi_arenas_collect(true /* force purge */, stats); // purge non-owned arenas
}
// Is a pointer inside any of our arenas?
@@ -717,19 +729,151 @@ bool _mi_arena_contains(const void* p) {
const size_t max_arena = mi_atomic_load_relaxed(&mi_arena_count);
for (size_t i = 0; i < max_arena; i++) {
mi_arena_t* arena = mi_atomic_load_ptr_acquire(mi_arena_t, &mi_arenas[i]);
- if (arena != NULL && arena->start <= (const uint8_t*)p && arena->start + mi_arena_block_size(arena->block_count) > (const uint8_t*)p) {
- return true;
+ if (arena != NULL && arena->start <= (const uint8_t*)p && arena->start + mi_arena_block_size(arena->block_count) > (const uint8_t*)p) {
+ return true;
}
}
return false;
}
+/* -----------------------------------------------------------
+ Abandoned blocks/segments.
+ This is used to atomically abandon/reclaim segments
+ (and crosses the arena API but it is convenient to have here).
+ Abandoned segments still have live blocks; they get reclaimed
+ when a thread frees a block in it, or when a thread needs a fresh
+ segment; these threads scan the abandoned segments through
+ the arena bitmaps.
+----------------------------------------------------------- */
+
+// Maintain a count of all abandoned segments
+static mi_decl_cache_align _Atomic(size_t)abandoned_count;
+
+size_t _mi_arena_segment_abandoned_count(void) {
+ return mi_atomic_load_relaxed(&abandoned_count);
+}
+
+// reclaim a specific abandoned segment; `true` on success.
+// sets the thread_id.
+bool _mi_arena_segment_clear_abandoned(mi_segment_t* segment )
+{
+ if (segment->memid.memkind != MI_MEM_ARENA) {
+ // not in an arena, consider it un-abandoned now.
+ // but we need to still claim it atomically -- we use the thread_id for that.
+ size_t expected = 0;
+ if (mi_atomic_cas_strong_acq_rel(&segment->thread_id, &expected, _mi_thread_id())) {
+ mi_atomic_decrement_relaxed(&abandoned_count);
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+ // arena segment: use the blocks_abandoned bitmap.
+ size_t arena_idx;
+ size_t bitmap_idx;
+ mi_arena_memid_indices(segment->memid, &arena_idx, &bitmap_idx);
+ mi_assert_internal(arena_idx < MI_MAX_ARENAS);
+ mi_arena_t* arena = mi_atomic_load_ptr_acquire(mi_arena_t, &mi_arenas[arena_idx]);
+ mi_assert_internal(arena != NULL);
+ bool was_marked = _mi_bitmap_unclaim(arena->blocks_abandoned, arena->field_count, 1, bitmap_idx);
+ if (was_marked) {
+ mi_assert_internal(mi_atomic_load_relaxed(&segment->thread_id) == 0);
+ mi_atomic_decrement_relaxed(&abandoned_count);
+ mi_atomic_store_release(&segment->thread_id, _mi_thread_id());
+ }
+ // mi_assert_internal(was_marked);
+ mi_assert_internal(!was_marked || _mi_bitmap_is_claimed(arena->blocks_inuse, arena->field_count, 1, bitmap_idx));
+ //mi_assert_internal(arena->blocks_committed == NULL || _mi_bitmap_is_claimed(arena->blocks_committed, arena->field_count, 1, bitmap_idx));
+ return was_marked;
+}
+
+// mark a specific segment as abandoned
+// clears the thread_id.
+void _mi_arena_segment_mark_abandoned(mi_segment_t* segment)
+{
+ mi_atomic_store_release(&segment->thread_id, 0);
+ mi_assert_internal(segment->used == segment->abandoned);
+ if (segment->memid.memkind != MI_MEM_ARENA) {
+ // not in an arena; count it as abandoned and return
+ mi_atomic_increment_relaxed(&abandoned_count);
+ return;
+ }
+ size_t arena_idx;
+ size_t bitmap_idx;
+ mi_arena_memid_indices(segment->memid, &arena_idx, &bitmap_idx);
+ mi_assert_internal(arena_idx < MI_MAX_ARENAS);
+ mi_arena_t* arena = mi_atomic_load_ptr_acquire(mi_arena_t, &mi_arenas[arena_idx]);
+ mi_assert_internal(arena != NULL);
+ const bool was_unmarked = _mi_bitmap_claim(arena->blocks_abandoned, arena->field_count, 1, bitmap_idx, NULL);
+ if (was_unmarked) { mi_atomic_increment_relaxed(&abandoned_count); }
+ mi_assert_internal(was_unmarked);
+ mi_assert_internal(_mi_bitmap_is_claimed(arena->blocks_inuse, arena->field_count, 1, bitmap_idx));
+}
+
+// start a cursor at a randomized arena
+void _mi_arena_field_cursor_init(mi_heap_t* heap, mi_arena_field_cursor_t* current) {
+ const size_t max_arena = mi_atomic_load_relaxed(&mi_arena_count);
+ current->start = (max_arena == 0 ? 0 : (mi_arena_id_t)( _mi_heap_random_next(heap) % max_arena));
+ current->count = 0;
+ current->bitmap_idx = 0;
+}
+
+// reclaim abandoned segments
+// this does not set the thread id (so it appears as still abandoned)
+mi_segment_t* _mi_arena_segment_clear_abandoned_next(mi_arena_field_cursor_t* previous )
+{
+ const int max_arena = (int)mi_atomic_load_relaxed(&mi_arena_count);
+ if (max_arena <= 0 || mi_atomic_load_relaxed(&abandoned_count) == 0) return NULL;
+
+ int count = previous->count;
+ size_t field_idx = mi_bitmap_index_field(previous->bitmap_idx);
+ size_t bit_idx = mi_bitmap_index_bit_in_field(previous->bitmap_idx) + 1;
+ // visit arena's (from previous)
+ for (; count < max_arena; count++, field_idx = 0, bit_idx = 0) {
+ mi_arena_id_t arena_idx = previous->start + count;
+ if (arena_idx >= max_arena) { arena_idx = arena_idx % max_arena; } // wrap around
+ mi_arena_t* arena = mi_atomic_load_ptr_acquire(mi_arena_t, &mi_arenas[arena_idx]);
+ if (arena != NULL) {
+ // visit the abandoned fields (starting at previous_idx)
+ for ( ; field_idx < arena->field_count; field_idx++, bit_idx = 0) {
+ size_t field = mi_atomic_load_relaxed(&arena->blocks_abandoned[field_idx]);
+ if mi_unlikely(field != 0) { // skip zero fields quickly
+ // visit each set bit in the field (todo: maybe use `ctz` here?)
+ for ( ; bit_idx < MI_BITMAP_FIELD_BITS; bit_idx++) {
+ // pre-check if the bit is set
+ size_t mask = ((size_t)1 << bit_idx);
+ if mi_unlikely((field & mask) == mask) {
+ mi_bitmap_index_t bitmap_idx = mi_bitmap_index_create(field_idx, bit_idx);
+ // try to reclaim it atomically
+ if (_mi_bitmap_unclaim(arena->blocks_abandoned, arena->field_count, 1, bitmap_idx)) {
+ mi_atomic_decrement_relaxed(&abandoned_count);
+ previous->bitmap_idx = bitmap_idx;
+ previous->count = count;
+ mi_assert_internal(_mi_bitmap_is_claimed(arena->blocks_inuse, arena->field_count, 1, bitmap_idx));
+ mi_segment_t* segment = (mi_segment_t*)mi_arena_block_start(arena, bitmap_idx);
+ mi_assert_internal(mi_atomic_load_relaxed(&segment->thread_id) == 0);
+ //mi_assert_internal(arena->blocks_committed == NULL || _mi_bitmap_is_claimed(arena->blocks_committed, arena->field_count, 1, bitmap_idx));
+ return segment;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ // no more found
+ previous->bitmap_idx = 0;
+ previous->count = 0;
+ return NULL;
+}
+
/* -----------------------------------------------------------
Add an arena.
----------------------------------------------------------- */
-static bool mi_arena_add(mi_arena_t* arena, mi_arena_id_t* arena_id) {
+static bool mi_arena_add(mi_arena_t* arena, mi_arena_id_t* arena_id, mi_stats_t* stats) {
mi_assert_internal(arena != NULL);
mi_assert_internal((uintptr_t)mi_atomic_load_ptr_relaxed(uint8_t,&arena->start) % MI_SEGMENT_ALIGN == 0);
mi_assert_internal(arena->block_count > 0);
@@ -740,6 +884,7 @@ static bool mi_arena_add(mi_arena_t* arena, mi_arena_id_t* arena_id) {
mi_atomic_decrement_acq_rel(&mi_arena_count);
return false;
}
+ _mi_stat_counter_increase(&stats->arena_count,1);
arena->id = mi_arena_id_create(i);
mi_atomic_store_ptr_release(mi_arena_t,&mi_arenas[i], arena);
if (arena_id != NULL) { *arena_id = arena->id; }
@@ -757,13 +902,13 @@ static bool mi_manage_os_memory_ex2(void* start, size_t size, bool is_large, int
const size_t bcount = size / MI_ARENA_BLOCK_SIZE;
const size_t fields = _mi_divide_up(bcount, MI_BITMAP_FIELD_BITS);
- const size_t bitmaps = (memid.is_pinned ? 2 : 4);
+ const size_t bitmaps = (memid.is_pinned ? 3 : 5);
const size_t asize = sizeof(mi_arena_t) + (bitmaps*fields*sizeof(mi_bitmap_field_t));
mi_memid_t meta_memid;
mi_arena_t* arena = (mi_arena_t*)mi_arena_meta_zalloc(asize, &meta_memid, &_mi_stats_main); // TODO: can we avoid allocating from the OS?
if (arena == NULL) return false;
-
- // already zero'd due to os_alloc
+
+ // already zero'd due to zalloc
// _mi_memzero(arena, asize);
arena->id = _mi_arena_id_none();
arena->memid = memid;
@@ -777,14 +922,16 @@ static bool mi_manage_os_memory_ex2(void* start, size_t size, bool is_large, int
arena->is_large = is_large;
arena->purge_expire = 0;
arena->search_idx = 0;
- arena->blocks_dirty = &arena->blocks_inuse[fields]; // just after inuse bitmap
- arena->blocks_committed = (arena->memid.is_pinned ? NULL : &arena->blocks_inuse[2*fields]); // just after dirty bitmap
- arena->blocks_purge = (arena->memid.is_pinned ? NULL : &arena->blocks_inuse[3*fields]); // just after committed bitmap
+ // consequetive bitmaps
+ arena->blocks_dirty = &arena->blocks_inuse[fields]; // just after inuse bitmap
+ arena->blocks_abandoned = &arena->blocks_inuse[2 * fields]; // just after dirty bitmap
+ arena->blocks_committed = (arena->memid.is_pinned ? NULL : &arena->blocks_inuse[3*fields]); // just after abandoned bitmap
+ arena->blocks_purge = (arena->memid.is_pinned ? NULL : &arena->blocks_inuse[4*fields]); // just after committed bitmap
// initialize committed bitmap?
if (arena->blocks_committed != NULL && arena->memid.initially_committed) {
memset((void*)arena->blocks_committed, 0xFF, fields*sizeof(mi_bitmap_field_t)); // cast to void* to avoid atomic warning
}
-
+
// and claim leftover blocks if needed (so we never allocate there)
ptrdiff_t post = (fields * MI_BITMAP_FIELD_BITS) - bcount;
mi_assert_internal(post >= 0);
@@ -793,7 +940,7 @@ static bool mi_manage_os_memory_ex2(void* start, size_t size, bool is_large, int
mi_bitmap_index_t postidx = mi_bitmap_index_create(fields - 1, MI_BITMAP_FIELD_BITS - post);
_mi_bitmap_claim(arena->blocks_inuse, fields, post, postidx, NULL);
}
- return mi_arena_add(arena, arena_id);
+ return mi_arena_add(arena, arena_id, &_mi_stats_main);
}
@@ -815,7 +962,7 @@ int mi_reserve_os_memory_ex(size_t size, bool commit, bool allow_large, bool exc
const bool is_large = memid.is_pinned; // todo: use separate is_large field?
if (!mi_manage_os_memory_ex2(start, size, is_large, -1 /* numa node */, exclusive, memid, arena_id)) {
_mi_os_free_ex(start, size, commit, memid, &_mi_stats_main);
- _mi_verbose_message("failed to reserve %zu k memory\n", _mi_divide_up(size, 1024));
+ _mi_verbose_message("failed to reserve %zu KiB memory\n", _mi_divide_up(size, 1024));
return ENOMEM;
}
_mi_verbose_message("reserved %zu KiB memory%s\n", _mi_divide_up(size, 1024), is_large ? " (in large os pages)" : "");
@@ -838,32 +985,55 @@ int mi_reserve_os_memory(size_t size, bool commit, bool allow_large) mi_attr_noe
Debugging
----------------------------------------------------------- */
-static size_t mi_debug_show_bitmap(const char* prefix, mi_bitmap_field_t* fields, size_t field_count ) {
+static size_t mi_debug_show_bitmap(const char* prefix, const char* header, size_t block_count, mi_bitmap_field_t* fields, size_t field_count ) {
+ _mi_verbose_message("%s%s:\n", prefix, header);
+ size_t bcount = 0;
size_t inuse_count = 0;
for (size_t i = 0; i < field_count; i++) {
char buf[MI_BITMAP_FIELD_BITS + 1];
uintptr_t field = mi_atomic_load_relaxed(&fields[i]);
- for (size_t bit = 0; bit < MI_BITMAP_FIELD_BITS; bit++) {
- bool inuse = ((((uintptr_t)1 << bit) & field) != 0);
- if (inuse) inuse_count++;
- buf[MI_BITMAP_FIELD_BITS - 1 - bit] = (inuse ? 'x' : '.');
+ for (size_t bit = 0; bit < MI_BITMAP_FIELD_BITS; bit++, bcount++) {
+ if (bcount < block_count) {
+ bool inuse = ((((uintptr_t)1 << bit) & field) != 0);
+ if (inuse) inuse_count++;
+ buf[bit] = (inuse ? 'x' : '.');
+ }
+ else {
+ buf[bit] = ' ';
+ }
}
buf[MI_BITMAP_FIELD_BITS] = 0;
- _mi_verbose_message("%s%s\n", prefix, buf);
+ _mi_verbose_message("%s %s\n", prefix, buf);
}
+ _mi_verbose_message("%s total ('x'): %zu\n", prefix, inuse_count);
return inuse_count;
}
-void mi_debug_show_arenas(void) mi_attr_noexcept {
+void mi_debug_show_arenas(bool show_inuse, bool show_abandoned, bool show_purge) mi_attr_noexcept {
size_t max_arenas = mi_atomic_load_relaxed(&mi_arena_count);
+ size_t inuse_total = 0;
+ size_t abandoned_total = 0;
+ size_t purge_total = 0;
for (size_t i = 0; i < max_arenas; i++) {
mi_arena_t* arena = mi_atomic_load_ptr_relaxed(mi_arena_t, &mi_arenas[i]);
if (arena == NULL) break;
- size_t inuse_count = 0;
- _mi_verbose_message("arena %zu: %zu blocks with %zu fields\n", i, arena->block_count, arena->field_count);
- inuse_count += mi_debug_show_bitmap(" ", arena->blocks_inuse, arena->field_count);
- _mi_verbose_message(" blocks in use ('x'): %zu\n", inuse_count);
+ _mi_verbose_message("arena %zu: %zu blocks of size %zuMiB (in %zu fields) %s\n", i, arena->block_count, MI_ARENA_BLOCK_SIZE / MI_MiB, arena->field_count, (arena->memid.is_pinned ? ", pinned" : ""));
+ if (show_inuse) {
+ inuse_total += mi_debug_show_bitmap(" ", "inuse blocks", arena->block_count, arena->blocks_inuse, arena->field_count);
+ }
+ if (arena->blocks_committed != NULL) {
+ mi_debug_show_bitmap(" ", "committed blocks", arena->block_count, arena->blocks_committed, arena->field_count);
+ }
+ if (show_abandoned) {
+ abandoned_total += mi_debug_show_bitmap(" ", "abandoned blocks", arena->block_count, arena->blocks_abandoned, arena->field_count);
+ }
+ if (show_purge && arena->blocks_purge != NULL) {
+ purge_total += mi_debug_show_bitmap(" ", "purgeable blocks", arena->block_count, arena->blocks_purge, arena->field_count);
+ }
}
+ if (show_inuse) _mi_verbose_message("total inuse blocks : %zu\n", inuse_total);
+ if (show_abandoned) _mi_verbose_message("total abandoned blocks: %zu\n", abandoned_total);
+ if (show_purge) _mi_verbose_message("total purgeable blocks: %zu\n", purge_total);
}
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.c
index a13dbe1..4b6be66 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.c
@@ -7,7 +7,7 @@ terms of the MIT license. A copy of the license can be found in the file
/* ----------------------------------------------------------------------------
Concurrent bitmap that can set/reset sequences of bits atomically,
-represeted as an array of fields where each field is a machine word (`size_t`)
+represented as an array of fields where each field is a machine word (`size_t`)
There are two api's; the standard one cannot have sequences that cross
between the bitmap fields (and a sequence must be <= MI_BITMAP_FIELD_BITS).
@@ -200,7 +200,7 @@ bool _mi_bitmap_is_any_claimed(mi_bitmap_t bitmap, size_t bitmap_fields, size_t
// Try to atomically claim a sequence of `count` bits starting from the field
// at `idx` in `bitmap` and crossing into subsequent fields. Returns `true` on success.
// Only needs to consider crossing into the next fields (see `mi_bitmap_try_find_from_claim_across`)
-static bool mi_bitmap_try_find_claim_field_across(mi_bitmap_t bitmap, size_t bitmap_fields, size_t idx, const size_t count, const size_t retries, mi_bitmap_index_t* bitmap_idx)
+static bool mi_bitmap_try_find_claim_field_across(mi_bitmap_t bitmap, size_t bitmap_fields, size_t idx, const size_t count, const size_t retries, mi_bitmap_index_t* bitmap_idx, mi_stats_t* stats)
{
mi_assert_internal(bitmap_idx != NULL);
@@ -260,6 +260,7 @@ static bool mi_bitmap_try_find_claim_field_across(mi_bitmap_t bitmap, size_t bit
} while (!mi_atomic_cas_strong_acq_rel(field, &map, newmap));
// claimed!
+ mi_stat_counter_increase(stats->arena_crossover_count,1);
*bitmap_idx = mi_bitmap_index_create(idx, initial_idx);
return true;
@@ -279,9 +280,10 @@ rollback:
newmap = (map & ~initial_mask);
} while (!mi_atomic_cas_strong_acq_rel(field, &map, newmap));
}
+ mi_stat_counter_increase(stats->arena_rollback_count,1);
// retry? (we make a recursive call instead of goto to be able to use const declarations)
if (retries <= 2) {
- return mi_bitmap_try_find_claim_field_across(bitmap, bitmap_fields, idx, count, retries+1, bitmap_idx);
+ return mi_bitmap_try_find_claim_field_across(bitmap, bitmap_fields, idx, count, retries+1, bitmap_idx, stats);
}
else {
return false;
@@ -291,7 +293,7 @@ rollback:
// Find `count` bits of zeros and set them to 1 atomically; returns `true` on success.
// Starts at idx, and wraps around to search in all `bitmap_fields` fields.
-bool _mi_bitmap_try_find_from_claim_across(mi_bitmap_t bitmap, const size_t bitmap_fields, const size_t start_field_idx, const size_t count, mi_bitmap_index_t* bitmap_idx) {
+bool _mi_bitmap_try_find_from_claim_across(mi_bitmap_t bitmap, const size_t bitmap_fields, const size_t start_field_idx, const size_t count, mi_bitmap_index_t* bitmap_idx, mi_stats_t* stats) {
mi_assert_internal(count > 0);
if (count <= 2) {
// we don't bother with crossover fields for small counts
@@ -303,13 +305,15 @@ bool _mi_bitmap_try_find_from_claim_across(mi_bitmap_t bitmap, const size_t bitm
for (size_t visited = 0; visited < bitmap_fields; visited++, idx++) {
if (idx >= bitmap_fields) { idx = 0; } // wrap
// first try to claim inside a field
+ /*
if (count <= MI_BITMAP_FIELD_BITS) {
if (_mi_bitmap_try_find_claim_field(bitmap, idx, count, bitmap_idx)) {
return true;
}
}
+ */
// if that fails, then try to claim across fields
- if (mi_bitmap_try_find_claim_field_across(bitmap, bitmap_fields, idx, count, 0, bitmap_idx)) {
+ if (mi_bitmap_try_find_claim_field_across(bitmap, bitmap_fields, idx, count, 0, bitmap_idx, stats)) {
return true;
}
}
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.h b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.h
index 0a765c7..d8316b8 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.h
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/bitmap.h
@@ -7,7 +7,7 @@ terms of the MIT license. A copy of the license can be found in the file
/* ----------------------------------------------------------------------------
Concurrent bitmap that can set/reset sequences of bits atomically,
-represeted as an array of fields where each field is a machine word (`size_t`)
+represented as an array of fields where each field is a machine word (`size_t`)
There are two api's; the standard one cannot have sequences that cross
between the bitmap fields (and a sequence must be <= MI_BITMAP_FIELD_BITS).
@@ -99,7 +99,7 @@ bool _mi_bitmap_is_any_claimed(mi_bitmap_t bitmap, size_t bitmap_fields, size_t
// Find `count` bits of zeros and set them to 1 atomically; returns `true` on success.
// Starts at idx, and wraps around to search in all `bitmap_fields` fields.
-bool _mi_bitmap_try_find_from_claim_across(mi_bitmap_t bitmap, const size_t bitmap_fields, const size_t start_field_idx, const size_t count, mi_bitmap_index_t* bitmap_idx);
+bool _mi_bitmap_try_find_from_claim_across(mi_bitmap_t bitmap, const size_t bitmap_fields, const size_t start_field_idx, const size_t count, mi_bitmap_index_t* bitmap_idx, mi_stats_t* stats);
// Set `count` bits at `bitmap_idx` to 0 atomically
// Returns `true` if all `count` bits were 1 previously.
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/free.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/free.c
new file mode 100644
index 0000000..b9cb634
--- /dev/null
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/free.c
@@ -0,0 +1,530 @@
+/* ----------------------------------------------------------------------------
+Copyright (c) 2018-2024, Microsoft Research, Daan Leijen
+This is free software; you can redistribute it and/or modify it under the
+terms of the MIT license. A copy of the license can be found in the file
+"LICENSE" at the root of this distribution.
+-----------------------------------------------------------------------------*/
+#if !defined(MI_IN_ALLOC_C)
+#error "this file should be included from 'alloc.c' (so aliases can work from alloc-override)"
+// add includes help an IDE
+#include "mimalloc.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h" // _mi_prim_thread_id()
+#endif
+
+// forward declarations
+static void mi_check_padding(const mi_page_t* page, const mi_block_t* block);
+static bool mi_check_is_double_free(const mi_page_t* page, const mi_block_t* block);
+static size_t mi_page_usable_size_of(const mi_page_t* page, const mi_block_t* block);
+static void mi_stat_free(const mi_page_t* page, const mi_block_t* block);
+
+
+// ------------------------------------------------------
+// Free
+// ------------------------------------------------------
+
+// forward declaration of multi-threaded free (`_mt`) (or free in huge block if compiled with MI_HUGE_PAGE_ABANDON)
+static mi_decl_noinline void mi_free_block_mt(mi_page_t* page, mi_segment_t* segment, mi_block_t* block);
+
+// regular free of a (thread local) block pointer
+// fast path written carefully to prevent spilling on the stack
+static inline void mi_free_block_local(mi_page_t* page, mi_block_t* block, bool track_stats, bool check_full)
+{
+ // checks
+ if mi_unlikely(mi_check_is_double_free(page, block)) return;
+ mi_check_padding(page, block);
+ if (track_stats) { mi_stat_free(page, block); }
+ #if (MI_DEBUG>0) && !MI_TRACK_ENABLED && !MI_TSAN
+ if (!mi_page_is_huge(page)) { // huge page content may be already decommitted
+ memset(block, MI_DEBUG_FREED, mi_page_block_size(page));
+ }
+ #endif
+ if (track_stats) { mi_track_free_size(block, mi_page_usable_size_of(page, block)); } // faster then mi_usable_size as we already know the page and that p is unaligned
+
+ // actual free: push on the local free list
+ mi_block_set_next(page, block, page->local_free);
+ page->local_free = block;
+ if mi_unlikely(--page->used == 0) {
+ _mi_page_retire(page);
+ }
+ else if mi_unlikely(check_full && mi_page_is_in_full(page)) {
+ _mi_page_unfull(page);
+ }
+}
+
+// Adjust a block that was allocated aligned, to the actual start of the block in the page.
+// note: this can be called from `mi_free_generic_mt` where a non-owning thread accesses the
+// `page_start` and `block_size` fields; however these are constant and the page won't be
+// deallocated (as the block we are freeing keeps it alive) and thus safe to read concurrently.
+mi_block_t* _mi_page_ptr_unalign(const mi_page_t* page, const void* p) {
+ mi_assert_internal(page!=NULL && p!=NULL);
+
+ size_t diff = (uint8_t*)p - page->page_start;
+ size_t adjust;
+ if mi_likely(page->block_size_shift != 0) {
+ adjust = diff & (((size_t)1 << page->block_size_shift) - 1);
+ }
+ else {
+ adjust = diff % mi_page_block_size(page);
+ }
+
+ return (mi_block_t*)((uintptr_t)p - adjust);
+}
+
+// free a local pointer (page parameter comes first for better codegen)
+static void mi_decl_noinline mi_free_generic_local(mi_page_t* page, mi_segment_t* segment, void* p) mi_attr_noexcept {
+ MI_UNUSED(segment);
+ mi_block_t* const block = (mi_page_has_aligned(page) ? _mi_page_ptr_unalign(page, p) : (mi_block_t*)p);
+ mi_free_block_local(page, block, true /* track stats */, true /* check for a full page */);
+}
+
+// free a pointer owned by another thread (page parameter comes first for better codegen)
+static void mi_decl_noinline mi_free_generic_mt(mi_page_t* page, mi_segment_t* segment, void* p) mi_attr_noexcept {
+ mi_block_t* const block = _mi_page_ptr_unalign(page, p); // don't check `has_aligned` flag to avoid a race (issue #865)
+ mi_free_block_mt(page, segment, block);
+}
+
+// generic free (for runtime integration)
+void mi_decl_noinline _mi_free_generic(mi_segment_t* segment, mi_page_t* page, bool is_local, void* p) mi_attr_noexcept {
+ if (is_local) mi_free_generic_local(page,segment,p);
+ else mi_free_generic_mt(page,segment,p);
+}
+
+// Get the segment data belonging to a pointer
+// This is just a single `and` in release mode but does further checks in debug mode
+// (and secure mode) to see if this was a valid pointer.
+static inline mi_segment_t* mi_checked_ptr_segment(const void* p, const char* msg)
+{
+ MI_UNUSED(msg);
+
+#if (MI_DEBUG>0)
+ if mi_unlikely(((uintptr_t)p & (MI_INTPTR_SIZE - 1)) != 0) {
+ _mi_error_message(EINVAL, "%s: invalid (unaligned) pointer: %p\n", msg, p);
+ return NULL;
+ }
+#endif
+
+ mi_segment_t* const segment = _mi_ptr_segment(p);
+ if mi_unlikely(segment==NULL) return segment;
+
+#if (MI_DEBUG>0)
+ if mi_unlikely(!mi_is_in_heap_region(p)) {
+ #if (MI_INTPTR_SIZE == 8 && defined(__linux__))
+ if (((uintptr_t)p >> 40) != 0x7F) { // linux tends to align large blocks above 0x7F000000000 (issue #640)
+ #else
+ {
+ #endif
+ _mi_warning_message("%s: pointer might not point to a valid heap region: %p\n"
+ "(this may still be a valid very large allocation (over 64MiB))\n", msg, p);
+ if mi_likely(_mi_ptr_cookie(segment) == segment->cookie) {
+ _mi_warning_message("(yes, the previous pointer %p was valid after all)\n", p);
+ }
+ }
+ }
+#endif
+#if (MI_DEBUG>0 || MI_SECURE>=4)
+ if mi_unlikely(_mi_ptr_cookie(segment) != segment->cookie) {
+ _mi_error_message(EINVAL, "%s: pointer does not point to a valid heap space: %p\n", msg, p);
+ return NULL;
+ }
+#endif
+
+ return segment;
+}
+
+// Free a block
+// Fast path written carefully to prevent register spilling on the stack
+void mi_free(void* p) mi_attr_noexcept
+{
+ mi_segment_t* const segment = mi_checked_ptr_segment(p,"mi_free");
+ if mi_unlikely(segment==NULL) return;
+
+ const bool is_local = (_mi_prim_thread_id() == mi_atomic_load_relaxed(&segment->thread_id));
+ mi_page_t* const page = _mi_segment_page_of(segment, p);
+
+ if mi_likely(is_local) { // thread-local free?
+ if mi_likely(page->flags.full_aligned == 0) { // and it is not a full page (full pages need to move from the full bin), nor has aligned blocks (aligned blocks need to be unaligned)
+ // thread-local, aligned, and not a full page
+ mi_block_t* const block = (mi_block_t*)p;
+ mi_free_block_local(page, block, true /* track stats */, false /* no need to check if the page is full */);
+ }
+ else {
+ // page is full or contains (inner) aligned blocks; use generic path
+ mi_free_generic_local(page, segment, p);
+ }
+ }
+ else {
+ // not thread-local; use generic path
+ mi_free_generic_mt(page, segment, p);
+ }
+}
+
+// return true if successful
+bool _mi_free_delayed_block(mi_block_t* block) {
+ // get segment and page
+ mi_assert_internal(block!=NULL);
+ const mi_segment_t* const segment = _mi_ptr_segment(block);
+ mi_assert_internal(_mi_ptr_cookie(segment) == segment->cookie);
+ mi_assert_internal(_mi_thread_id() == segment->thread_id);
+ mi_page_t* const page = _mi_segment_page_of(segment, block);
+
+ // Clear the no-delayed flag so delayed freeing is used again for this page.
+ // This must be done before collecting the free lists on this page -- otherwise
+ // some blocks may end up in the page `thread_free` list with no blocks in the
+ // heap `thread_delayed_free` list which may cause the page to be never freed!
+ // (it would only be freed if we happen to scan it in `mi_page_queue_find_free_ex`)
+ if (!_mi_page_try_use_delayed_free(page, MI_USE_DELAYED_FREE, false /* dont overwrite never delayed */)) {
+ return false;
+ }
+
+ // collect all other non-local frees (move from `thread_free` to `free`) to ensure up-to-date `used` count
+ _mi_page_free_collect(page, false);
+
+ // and free the block (possibly freeing the page as well since `used` is updated)
+ mi_free_block_local(page, block, false /* stats have already been adjusted */, true /* check for a full page */);
+ return true;
+}
+
+// ------------------------------------------------------
+// Multi-threaded Free (`_mt`)
+// ------------------------------------------------------
+
+// Push a block that is owned by another thread on its page-local thread free
+// list or it's heap delayed free list. Such blocks are later collected by
+// the owning thread in `_mi_free_delayed_block`.
+static void mi_decl_noinline mi_free_block_delayed_mt( mi_page_t* page, mi_block_t* block )
+{
+ // Try to put the block on either the page-local thread free list,
+ // or the heap delayed free list (if this is the first non-local free in that page)
+ mi_thread_free_t tfreex;
+ bool use_delayed;
+ mi_thread_free_t tfree = mi_atomic_load_relaxed(&page->xthread_free);
+ do {
+ use_delayed = (mi_tf_delayed(tfree) == MI_USE_DELAYED_FREE);
+ if mi_unlikely(use_delayed) {
+ // unlikely: this only happens on the first concurrent free in a page that is in the full list
+ tfreex = mi_tf_set_delayed(tfree,MI_DELAYED_FREEING);
+ }
+ else {
+ // usual: directly add to page thread_free list
+ mi_block_set_next(page, block, mi_tf_block(tfree));
+ tfreex = mi_tf_set_block(tfree,block);
+ }
+ } while (!mi_atomic_cas_weak_release(&page->xthread_free, &tfree, tfreex));
+
+ // If this was the first non-local free, we need to push it on the heap delayed free list instead
+ if mi_unlikely(use_delayed) {
+ // racy read on `heap`, but ok because MI_DELAYED_FREEING is set (see `mi_heap_delete` and `mi_heap_collect_abandon`)
+ mi_heap_t* const heap = (mi_heap_t*)(mi_atomic_load_acquire(&page->xheap)); //mi_page_heap(page);
+ mi_assert_internal(heap != NULL);
+ if (heap != NULL) {
+ // add to the delayed free list of this heap. (do this atomically as the lock only protects heap memory validity)
+ mi_block_t* dfree = mi_atomic_load_ptr_relaxed(mi_block_t, &heap->thread_delayed_free);
+ do {
+ mi_block_set_nextx(heap,block,dfree, heap->keys);
+ } while (!mi_atomic_cas_ptr_weak_release(mi_block_t,&heap->thread_delayed_free, &dfree, block));
+ }
+
+ // and reset the MI_DELAYED_FREEING flag
+ tfree = mi_atomic_load_relaxed(&page->xthread_free);
+ do {
+ tfreex = tfree;
+ mi_assert_internal(mi_tf_delayed(tfree) == MI_DELAYED_FREEING);
+ tfreex = mi_tf_set_delayed(tfree,MI_NO_DELAYED_FREE);
+ } while (!mi_atomic_cas_weak_release(&page->xthread_free, &tfree, tfreex));
+ }
+}
+
+// Multi-threaded free (`_mt`) (or free in huge block if compiled with MI_HUGE_PAGE_ABANDON)
+static void mi_decl_noinline mi_free_block_mt(mi_page_t* page, mi_segment_t* segment, mi_block_t* block)
+{
+ // first see if the segment was abandoned and if we can reclaim it into our thread
+ if (mi_option_is_enabled(mi_option_abandoned_reclaim_on_free) &&
+ #if MI_HUGE_PAGE_ABANDON
+ segment->page_kind != MI_PAGE_HUGE &&
+ #endif
+ mi_atomic_load_relaxed(&segment->thread_id) == 0)
+ {
+ // the segment is abandoned, try to reclaim it into our heap
+ if (_mi_segment_attempt_reclaim(mi_heap_get_default(), segment)) {
+ mi_assert_internal(_mi_prim_thread_id() == mi_atomic_load_relaxed(&segment->thread_id));
+ mi_free(block); // recursively free as now it will be a local free in our heap
+ return;
+ }
+ }
+
+ // The padding check may access the non-thread-owned page for the key values.
+ // that is safe as these are constant and the page won't be freed (as the block is not freed yet).
+ mi_check_padding(page, block);
+
+ // adjust stats (after padding check and potentially recursive `mi_free` above)
+ mi_stat_free(page, block); // stat_free may access the padding
+ mi_track_free_size(block, mi_page_usable_size_of(page,block));
+
+ // for small size, ensure we can fit the delayed thread pointers without triggering overflow detection
+ _mi_padding_shrink(page, block, sizeof(mi_block_t));
+
+ if (segment->kind == MI_SEGMENT_HUGE) {
+ #if MI_HUGE_PAGE_ABANDON
+ // huge page segments are always abandoned and can be freed immediately
+ _mi_segment_huge_page_free(segment, page, block);
+ return;
+ #else
+ // huge pages are special as they occupy the entire segment
+ // as these are large we reset the memory occupied by the page so it is available to other threads
+ // (as the owning thread needs to actually free the memory later).
+ _mi_segment_huge_page_reset(segment, page, block);
+ #endif
+ }
+ else {
+ #if (MI_DEBUG>0) && !MI_TRACK_ENABLED && !MI_TSAN // note: when tracking, cannot use mi_usable_size with multi-threading
+ memset(block, MI_DEBUG_FREED, mi_usable_size(block));
+ #endif
+ }
+
+ // and finally free the actual block by pushing it on the owning heap
+ // thread_delayed free list (or heap delayed free list)
+ mi_free_block_delayed_mt(page,block);
+}
+
+
+// ------------------------------------------------------
+// Usable size
+// ------------------------------------------------------
+
+// Bytes available in a block
+static size_t mi_decl_noinline mi_page_usable_aligned_size_of(const mi_page_t* page, const void* p) mi_attr_noexcept {
+ const mi_block_t* block = _mi_page_ptr_unalign(page, p);
+ const size_t size = mi_page_usable_size_of(page, block);
+ const ptrdiff_t adjust = (uint8_t*)p - (uint8_t*)block;
+ mi_assert_internal(adjust >= 0 && (size_t)adjust <= size);
+ return (size - adjust);
+}
+
+static inline size_t _mi_usable_size(const void* p, const char* msg) mi_attr_noexcept {
+ const mi_segment_t* const segment = mi_checked_ptr_segment(p, msg);
+ if mi_unlikely(segment==NULL) return 0;
+ const mi_page_t* const page = _mi_segment_page_of(segment, p);
+ if mi_likely(!mi_page_has_aligned(page)) {
+ const mi_block_t* block = (const mi_block_t*)p;
+ return mi_page_usable_size_of(page, block);
+ }
+ else {
+ // split out to separate routine for improved code generation
+ return mi_page_usable_aligned_size_of(page, p);
+ }
+}
+
+mi_decl_nodiscard size_t mi_usable_size(const void* p) mi_attr_noexcept {
+ return _mi_usable_size(p, "mi_usable_size");
+}
+
+
+// ------------------------------------------------------
+// Free variants
+// ------------------------------------------------------
+
+void mi_free_size(void* p, size_t size) mi_attr_noexcept {
+ MI_UNUSED_RELEASE(size);
+ mi_assert(p == NULL || size <= _mi_usable_size(p,"mi_free_size"));
+ mi_free(p);
+}
+
+void mi_free_size_aligned(void* p, size_t size, size_t alignment) mi_attr_noexcept {
+ MI_UNUSED_RELEASE(alignment);
+ mi_assert(((uintptr_t)p % alignment) == 0);
+ mi_free_size(p,size);
+}
+
+void mi_free_aligned(void* p, size_t alignment) mi_attr_noexcept {
+ MI_UNUSED_RELEASE(alignment);
+ mi_assert(((uintptr_t)p % alignment) == 0);
+ mi_free(p);
+}
+
+
+// ------------------------------------------------------
+// Check for double free in secure and debug mode
+// This is somewhat expensive so only enabled for secure mode 4
+// ------------------------------------------------------
+
+#if (MI_ENCODE_FREELIST && (MI_SECURE>=4 || MI_DEBUG!=0))
+// linear check if the free list contains a specific element
+static bool mi_list_contains(const mi_page_t* page, const mi_block_t* list, const mi_block_t* elem) {
+ while (list != NULL) {
+ if (elem==list) return true;
+ list = mi_block_next(page, list);
+ }
+ return false;
+}
+
+static mi_decl_noinline bool mi_check_is_double_freex(const mi_page_t* page, const mi_block_t* block) {
+ // The decoded value is in the same page (or NULL).
+ // Walk the free lists to verify positively if it is already freed
+ if (mi_list_contains(page, page->free, block) ||
+ mi_list_contains(page, page->local_free, block) ||
+ mi_list_contains(page, mi_page_thread_free(page), block))
+ {
+ _mi_error_message(EAGAIN, "double free detected of block %p with size %zu\n", block, mi_page_block_size(page));
+ return true;
+ }
+ return false;
+}
+
+#define mi_track_page(page,access) { size_t psize; void* pstart = _mi_page_start(_mi_page_segment(page),page,&psize); mi_track_mem_##access( pstart, psize); }
+
+static inline bool mi_check_is_double_free(const mi_page_t* page, const mi_block_t* block) {
+ bool is_double_free = false;
+ mi_block_t* n = mi_block_nextx(page, block, page->keys); // pretend it is freed, and get the decoded first field
+ if (((uintptr_t)n & (MI_INTPTR_SIZE-1))==0 && // quick check: aligned pointer?
+ (n==NULL || mi_is_in_same_page(block, n))) // quick check: in same page or NULL?
+ {
+ // Suspicious: decoded value a in block is in the same page (or NULL) -- maybe a double free?
+ // (continue in separate function to improve code generation)
+ is_double_free = mi_check_is_double_freex(page, block);
+ }
+ return is_double_free;
+}
+#else
+static inline bool mi_check_is_double_free(const mi_page_t* page, const mi_block_t* block) {
+ MI_UNUSED(page);
+ MI_UNUSED(block);
+ return false;
+}
+#endif
+
+
+// ---------------------------------------------------------------------------
+// Check for heap block overflow by setting up padding at the end of the block
+// ---------------------------------------------------------------------------
+
+#if MI_PADDING // && !MI_TRACK_ENABLED
+static bool mi_page_decode_padding(const mi_page_t* page, const mi_block_t* block, size_t* delta, size_t* bsize) {
+ *bsize = mi_page_usable_block_size(page);
+ const mi_padding_t* const padding = (mi_padding_t*)((uint8_t*)block + *bsize);
+ mi_track_mem_defined(padding,sizeof(mi_padding_t));
+ *delta = padding->delta;
+ uint32_t canary = padding->canary;
+ uintptr_t keys[2];
+ keys[0] = page->keys[0];
+ keys[1] = page->keys[1];
+ bool ok = ((uint32_t)mi_ptr_encode(page,block,keys) == canary && *delta <= *bsize);
+ mi_track_mem_noaccess(padding,sizeof(mi_padding_t));
+ return ok;
+}
+
+// Return the exact usable size of a block.
+static size_t mi_page_usable_size_of(const mi_page_t* page, const mi_block_t* block) {
+ size_t bsize;
+ size_t delta;
+ bool ok = mi_page_decode_padding(page, block, &delta, &bsize);
+ mi_assert_internal(ok); mi_assert_internal(delta <= bsize);
+ return (ok ? bsize - delta : 0);
+}
+
+// When a non-thread-local block is freed, it becomes part of the thread delayed free
+// list that is freed later by the owning heap. If the exact usable size is too small to
+// contain the pointer for the delayed list, then shrink the padding (by decreasing delta)
+// so it will later not trigger an overflow error in `mi_free_block`.
+void _mi_padding_shrink(const mi_page_t* page, const mi_block_t* block, const size_t min_size) {
+ size_t bsize;
+ size_t delta;
+ bool ok = mi_page_decode_padding(page, block, &delta, &bsize);
+ mi_assert_internal(ok);
+ if (!ok || (bsize - delta) >= min_size) return; // usually already enough space
+ mi_assert_internal(bsize >= min_size);
+ if (bsize < min_size) return; // should never happen
+ size_t new_delta = (bsize - min_size);
+ mi_assert_internal(new_delta < bsize);
+ mi_padding_t* padding = (mi_padding_t*)((uint8_t*)block + bsize);
+ mi_track_mem_defined(padding,sizeof(mi_padding_t));
+ padding->delta = (uint32_t)new_delta;
+ mi_track_mem_noaccess(padding,sizeof(mi_padding_t));
+}
+#else
+static size_t mi_page_usable_size_of(const mi_page_t* page, const mi_block_t* block) {
+ MI_UNUSED(block);
+ return mi_page_usable_block_size(page);
+}
+
+void _mi_padding_shrink(const mi_page_t* page, const mi_block_t* block, const size_t min_size) {
+ MI_UNUSED(page);
+ MI_UNUSED(block);
+ MI_UNUSED(min_size);
+}
+#endif
+
+#if MI_PADDING && MI_PADDING_CHECK
+
+static bool mi_verify_padding(const mi_page_t* page, const mi_block_t* block, size_t* size, size_t* wrong) {
+ size_t bsize;
+ size_t delta;
+ bool ok = mi_page_decode_padding(page, block, &delta, &bsize);
+ *size = *wrong = bsize;
+ if (!ok) return false;
+ mi_assert_internal(bsize >= delta);
+ *size = bsize - delta;
+ if (!mi_page_is_huge(page)) {
+ uint8_t* fill = (uint8_t*)block + bsize - delta;
+ const size_t maxpad = (delta > MI_MAX_ALIGN_SIZE ? MI_MAX_ALIGN_SIZE : delta); // check at most the first N padding bytes
+ mi_track_mem_defined(fill, maxpad);
+ for (size_t i = 0; i < maxpad; i++) {
+ if (fill[i] != MI_DEBUG_PADDING) {
+ *wrong = bsize - delta + i;
+ ok = false;
+ break;
+ }
+ }
+ mi_track_mem_noaccess(fill, maxpad);
+ }
+ return ok;
+}
+
+static void mi_check_padding(const mi_page_t* page, const mi_block_t* block) {
+ size_t size;
+ size_t wrong;
+ if (!mi_verify_padding(page,block,&size,&wrong)) {
+ _mi_error_message(EFAULT, "buffer overflow in heap block %p of size %zu: write after %zu bytes\n", block, size, wrong );
+ }
+}
+
+#else
+
+static void mi_check_padding(const mi_page_t* page, const mi_block_t* block) {
+ MI_UNUSED(page);
+ MI_UNUSED(block);
+}
+
+#endif
+
+// only maintain stats for smaller objects if requested
+#if (MI_STAT>0)
+static void mi_stat_free(const mi_page_t* page, const mi_block_t* block) {
+ #if (MI_STAT < 2)
+ MI_UNUSED(block);
+ #endif
+ mi_heap_t* const heap = mi_heap_get_default();
+ const size_t bsize = mi_page_usable_block_size(page);
+ #if (MI_STAT>1)
+ const size_t usize = mi_page_usable_size_of(page, block);
+ mi_heap_stat_decrease(heap, malloc, usize);
+ #endif
+ if (bsize <= MI_MEDIUM_OBJ_SIZE_MAX) {
+ mi_heap_stat_decrease(heap, normal, bsize);
+ #if (MI_STAT > 1)
+ mi_heap_stat_decrease(heap, normal_bins[_mi_bin(bsize)], 1);
+ #endif
+ }
+ else if (bsize <= MI_LARGE_OBJ_SIZE_MAX) {
+ mi_heap_stat_decrease(heap, large, bsize);
+ }
+ else {
+ mi_heap_stat_decrease(heap, huge, bsize);
+ }
+}
+#else
+static void mi_stat_free(const mi_page_t* page, const mi_block_t* block) {
+ MI_UNUSED(page); MI_UNUSED(block);
+}
+#endif
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/heap.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/heap.c
index 58520dd..6c56edd 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/heap.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/heap.c
@@ -32,7 +32,7 @@ static bool mi_heap_visit_pages(mi_heap_t* heap, heap_page_visitor_fun* fn, void
#if MI_DEBUG>1
size_t total = heap->page_count;
size_t count = 0;
- #endif
+ #endif
for (size_t i = 0; i <= MI_BIN_FULL; i++) {
mi_page_queue_t* pq = &heap->pages[i];
@@ -95,6 +95,11 @@ static bool mi_heap_page_collect(mi_heap_t* heap, mi_page_queue_t* pq, mi_page_t
mi_assert_internal(mi_heap_page_is_valid(heap, pq, page, NULL, NULL));
mi_collect_t collect = *((mi_collect_t*)arg_collect);
_mi_page_free_collect(page, collect >= MI_FORCE);
+ if (collect == MI_FORCE) {
+ // note: call before a potential `_mi_page_free` as the segment may be freed if this was the last used page in that segment.
+ mi_segment_t* segment = _mi_page_segment(page);
+ _mi_segment_collect(segment, true /* force? */, &heap->tld->segments);
+ }
if (mi_page_all_free(page)) {
// no more used blocks, free the page.
// note: this will free retired pages as well.
@@ -120,11 +125,11 @@ static void mi_heap_collect_ex(mi_heap_t* heap, mi_collect_t collect)
{
if (heap==NULL || !mi_heap_is_initialized(heap)) return;
- const bool force = collect >= MI_FORCE;
+ const bool force = (collect >= MI_FORCE);
_mi_deferred_free(heap, force);
- // note: never reclaim on collect but leave it to threads that need storage to reclaim
- const bool force_main =
+ // note: never reclaim on collect but leave it to threads that need storage to reclaim
+ const bool force_main =
#ifdef NDEBUG
collect == MI_FORCE
#else
@@ -157,17 +162,14 @@ static void mi_heap_collect_ex(mi_heap_t* heap, mi_collect_t collect)
// collect abandoned segments (in particular, purge expired parts of segments in the abandoned segment list)
// note: forced purge can be quite expensive if many threads are created/destroyed so we do not force on abandonment
_mi_abandoned_collect(heap, collect == MI_FORCE /* force? */, &heap->tld->segments);
-
- // collect segment local caches
- if (force) {
- _mi_segment_thread_collect(&heap->tld->segments);
- }
-
- // collect regions on program-exit (or shared library unload)
+
+ // if forced, collect thread data cache on program-exit (or shared library unload)
if (force && _mi_is_main_thread() && mi_heap_is_backing(heap)) {
_mi_thread_data_collect(); // collect thread data cache
- _mi_arena_collect(true /* force purge */, &heap->tld->stats);
}
+
+ // collect arenas (this is program wide so don't force purges on abandonment of threads)
+ _mi_arenas_collect(collect == MI_FORCE /* force purge? */, &heap->tld->stats);
}
void _mi_heap_collect_abandon(mi_heap_t* heap) {
@@ -425,7 +427,7 @@ void mi_heap_delete(mi_heap_t* heap)
if (heap==NULL || !mi_heap_is_initialized(heap)) return;
if (!mi_heap_is_backing(heap)) {
- // tranfer still used pages to the backing heap
+ // transfer still used pages to the backing heap
mi_heap_absorb(heap->tld->heap_backing, heap);
}
else {
@@ -474,8 +476,7 @@ static bool mi_heap_page_check_owned(mi_heap_t* heap, mi_page_queue_t* pq, mi_pa
MI_UNUSED(heap);
MI_UNUSED(pq);
bool* found = (bool*)vfound;
- mi_segment_t* segment = _mi_page_segment(page);
- void* start = _mi_page_start(segment, page, NULL);
+ void* start = mi_page_start(page);
void* end = (uint8_t*)start + (page->capacity * mi_page_block_size(page));
*found = (p >= start && p < end);
return (!*found); // continue if not found
@@ -521,7 +522,7 @@ static bool mi_heap_area_visit_blocks(const mi_heap_area_ex_t* xarea, mi_block_v
const size_t bsize = mi_page_block_size(page);
const size_t ubsize = mi_page_usable_block_size(page); // without padding
size_t psize;
- uint8_t* pstart = _mi_page_start(_mi_page_segment(page), page, &psize);
+ uint8_t* pstart = _mi_segment_page_start(_mi_page_segment(page), page, &psize);
if (page->capacity == 1) {
// optimize page with one block
@@ -588,7 +589,7 @@ static bool mi_heap_visit_areas_page(mi_heap_t* heap, mi_page_queue_t* pq, mi_pa
xarea.page = page;
xarea.area.reserved = page->reserved * bsize;
xarea.area.committed = page->capacity * bsize;
- xarea.area.blocks = _mi_page_start(_mi_page_segment(page), page, NULL);
+ xarea.area.blocks = mi_page_start(page);
xarea.area.used = page->used; // number of blocks in use (#553)
xarea.area.block_size = ubsize;
xarea.area.full_block_size = bsize;
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/init.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/init.c
index b1db14c..3316106 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/init.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/init.c
@@ -14,16 +14,19 @@ terms of the MIT license. A copy of the license can be found in the file
// Empty page used to initialize the small free pages array
const mi_page_t _mi_page_empty = {
- 0, false, false, false,
+ 0,
+ false, false, false, false,
0, // capacity
0, // reserved capacity
{ 0 }, // flags
false, // is_zero
0, // retire_expire
NULL, // free
- 0, // used
- 0, // xblock_size
NULL, // local_free
+ 0, // used
+ 0, // block size shift
+ 0, // block_size
+ NULL, // page_start
#if (MI_PADDING || MI_ENCODE_FREELIST)
{ 0, 0 },
#endif
@@ -84,7 +87,9 @@ const mi_page_t _mi_page_empty = {
MI_STAT_COUNT_NULL(), MI_STAT_COUNT_NULL(), \
MI_STAT_COUNT_NULL(), \
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
- { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } \
+ { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+ { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+ { 0, 0 } \
MI_STAT_COUNT_END_NULL()
@@ -110,8 +115,6 @@ const mi_page_t _mi_page_empty = {
mi_decl_cache_align const mi_heap_t _mi_heap_empty = {
NULL,
- MI_SMALL_PAGES_EMPTY,
- MI_PAGE_QUEUES_EMPTY,
MI_ATOMIC_VAR_INIT(NULL),
0, // tid
0, // cookie
@@ -121,7 +124,9 @@ mi_decl_cache_align const mi_heap_t _mi_heap_empty = {
0, // page count
MI_BIN_FULL, 0, // page retired min/max
NULL, // next
- false
+ false,
+ MI_SMALL_PAGES_EMPTY,
+ MI_PAGE_QUEUES_EMPTY
};
#define tld_empty_stats ((mi_stats_t*)((uint8_t*)&tld_empty + offsetof(mi_tld_t,stats)))
@@ -131,7 +136,7 @@ mi_decl_cache_align static const mi_tld_t tld_empty = {
0,
false,
NULL, NULL,
- { MI_SEGMENT_SPAN_QUEUES_EMPTY, 0, 0, 0, 0, tld_empty_stats, tld_empty_os }, // segments
+ { MI_SEGMENT_SPAN_QUEUES_EMPTY, 0, 0, 0, 0, 0, tld_empty_stats, tld_empty_os }, // segments
{ 0, tld_empty_stats }, // os
{ MI_STATS_NULL } // stats
};
@@ -148,15 +153,13 @@ extern mi_heap_t _mi_heap_main;
static mi_tld_t tld_main = {
0, false,
&_mi_heap_main, & _mi_heap_main,
- { MI_SEGMENT_SPAN_QUEUES_EMPTY, 0, 0, 0, 0, &tld_main.stats, &tld_main.os }, // segments
+ { MI_SEGMENT_SPAN_QUEUES_EMPTY, 0, 0, 0, 0, 0, &tld_main.stats, &tld_main.os }, // segments
{ 0, &tld_main.stats }, // os
{ MI_STATS_NULL } // stats
};
mi_heap_t _mi_heap_main = {
&tld_main,
- MI_SMALL_PAGES_EMPTY,
- MI_PAGE_QUEUES_EMPTY,
MI_ATOMIC_VAR_INIT(NULL),
0, // thread id
0, // initial cookie
@@ -166,7 +169,9 @@ mi_heap_t _mi_heap_main = {
0, // page count
MI_BIN_FULL, 0, // page retired min/max
NULL, // next heap
- false // can reclaim
+ false, // can reclaim
+ MI_SMALL_PAGES_EMPTY,
+ MI_PAGE_QUEUES_EMPTY
};
bool _mi_process_is_initialized = false; // set to `true` in `mi_process_init`.
@@ -201,9 +206,9 @@ mi_heap_t* _mi_heap_main_get(void) {
// note: in x64 in release build `sizeof(mi_thread_data_t)` is under 4KiB (= OS page size).
typedef struct mi_thread_data_s {
- mi_heap_t heap; // must come first due to cast in `_mi_heap_done`
+ mi_heap_t heap; // must come first due to cast in `_mi_heap_done`
mi_tld_t tld;
- mi_memid_t memid;
+ mi_memid_t memid; // must come last due to zero'ing
} mi_thread_data_t;
@@ -247,9 +252,9 @@ static mi_thread_data_t* mi_thread_data_zalloc(void) {
is_zero = memid.initially_zero;
}
}
-
+
if (td != NULL && !is_zero) {
- _mi_memzero_aligned(td, sizeof(*td));
+ _mi_memzero_aligned(td, offsetof(mi_thread_data_t,memid));
}
return td;
}
@@ -426,23 +431,23 @@ void mi_thread_done(void) mi_attr_noexcept {
_mi_thread_done(NULL);
}
-void _mi_thread_done(mi_heap_t* heap)
+void _mi_thread_done(mi_heap_t* heap)
{
// calling with NULL implies using the default heap
- if (heap == NULL) {
- heap = mi_prim_get_default_heap();
+ if (heap == NULL) {
+ heap = mi_prim_get_default_heap();
if (heap == NULL) return;
}
// prevent re-entrancy through heap_done/heap_set_default_direct (issue #699)
if (!mi_heap_is_initialized(heap)) {
- return;
+ return;
}
// adjust stats
mi_atomic_decrement_relaxed(&thread_count);
_mi_stat_decrease(&_mi_stats_main.threads, 1);
-
+
// check thread-id as on Windows shutdown with FLS the main (exit) thread may call this on thread-local heaps...
if (heap->thread_id != _mi_thread_id()) return;
@@ -455,7 +460,7 @@ void _mi_heap_set_default_direct(mi_heap_t* heap) {
#if defined(MI_TLS_SLOT)
mi_prim_tls_slot_set(MI_TLS_SLOT,heap);
#elif defined(MI_TLS_PTHREAD_SLOT_OFS)
- *mi_tls_pthread_heap_slot() = heap;
+ *mi_prim_tls_pthread_heap_slot() = heap;
#elif defined(MI_TLS_PTHREAD)
// we use _mi_heap_default_key
#else
@@ -464,7 +469,7 @@ void _mi_heap_set_default_direct(mi_heap_t* heap) {
// ensure the default heap is passed to `_mi_thread_done`
// setting to a non-NULL value also ensures `mi_thread_done` is called.
- _mi_prim_thread_associate_default_heap(heap);
+ _mi_prim_thread_associate_default_heap(heap);
}
@@ -624,7 +629,7 @@ static void mi_cdecl mi_process_done(void) {
// release any thread specific resources and ensure _mi_thread_done is called on all but the main thread
_mi_prim_thread_done_auto_done();
-
+
#ifndef MI_SKIP_COLLECT_ON_EXIT
#if (MI_DEBUG || !defined(MI_SHARED_LIB))
// free all memory if possible on process exit. This is not needed for a stand-alone process
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/libc.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/libc.c
new file mode 100644
index 0000000..dd6b400
--- /dev/null
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/libc.c
@@ -0,0 +1,273 @@
+/* ----------------------------------------------------------------------------
+Copyright (c) 2018-2023, Microsoft Research, Daan Leijen
+This is free software; you can redistribute it and/or modify it under the
+terms of the MIT license. A copy of the license can be found in the file
+"LICENSE" at the root of this distribution.
+-----------------------------------------------------------------------------*/
+
+// --------------------------------------------------------
+// This module defines various std libc functions to reduce
+// the dependency on libc, and also prevent errors caused
+// by some libc implementations when called before `main`
+// executes (due to malloc redirection)
+// --------------------------------------------------------
+
+#include "mimalloc.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/prim.h" // mi_prim_getenv
+
+char _mi_toupper(char c) {
+ if (c >= 'a' && c <= 'z') return (c - 'a' + 'A');
+ else return c;
+}
+
+int _mi_strnicmp(const char* s, const char* t, size_t n) {
+ if (n == 0) return 0;
+ for (; *s != 0 && *t != 0 && n > 0; s++, t++, n--) {
+ if (_mi_toupper(*s) != _mi_toupper(*t)) break;
+ }
+ return (n == 0 ? 0 : *s - *t);
+}
+
+void _mi_strlcpy(char* dest, const char* src, size_t dest_size) {
+ if (dest==NULL || src==NULL || dest_size == 0) return;
+ // copy until end of src, or when dest is (almost) full
+ while (*src != 0 && dest_size > 1) {
+ *dest++ = *src++;
+ dest_size--;
+ }
+ // always zero terminate
+ *dest = 0;
+}
+
+void _mi_strlcat(char* dest, const char* src, size_t dest_size) {
+ if (dest==NULL || src==NULL || dest_size == 0) return;
+ // find end of string in the dest buffer
+ while (*dest != 0 && dest_size > 1) {
+ dest++;
+ dest_size--;
+ }
+ // and catenate
+ _mi_strlcpy(dest, src, dest_size);
+}
+
+size_t _mi_strlen(const char* s) {
+ if (s==NULL) return 0;
+ size_t len = 0;
+ while(s[len] != 0) { len++; }
+ return len;
+}
+
+size_t _mi_strnlen(const char* s, size_t max_len) {
+ if (s==NULL) return 0;
+ size_t len = 0;
+ while(s[len] != 0 && len < max_len) { len++; }
+ return len;
+}
+
+#ifdef MI_NO_GETENV
+bool _mi_getenv(const char* name, char* result, size_t result_size) {
+ MI_UNUSED(name);
+ MI_UNUSED(result);
+ MI_UNUSED(result_size);
+ return false;
+}
+#else
+bool _mi_getenv(const char* name, char* result, size_t result_size) {
+ if (name==NULL || result == NULL || result_size < 64) return false;
+ return _mi_prim_getenv(name,result,result_size);
+}
+#endif
+
+// --------------------------------------------------------
+// Define our own limited `_mi_vsnprintf` and `_mi_snprintf`
+// This is mostly to avoid calling these when libc is not yet
+// initialized (and to reduce dependencies)
+//
+// format: d i, p x u, s
+// prec: z l ll L
+// width: 10
+// align-left: -
+// fill: 0
+// plus: +
+// --------------------------------------------------------
+
+static void mi_outc(char c, char** out, char* end) {
+ char* p = *out;
+ if (p >= end) return;
+ *p = c;
+ *out = p + 1;
+}
+
+static void mi_outs(const char* s, char** out, char* end) {
+ if (s == NULL) return;
+ char* p = *out;
+ while (*s != 0 && p < end) {
+ *p++ = *s++;
+ }
+ *out = p;
+}
+
+static void mi_out_fill(char fill, size_t len, char** out, char* end) {
+ char* p = *out;
+ for (size_t i = 0; i < len && p < end; i++) {
+ *p++ = fill;
+ }
+ *out = p;
+}
+
+static void mi_out_alignright(char fill, char* start, size_t len, size_t extra, char* end) {
+ if (len == 0 || extra == 0) return;
+ if (start + len + extra >= end) return;
+ // move `len` characters to the right (in reverse since it can overlap)
+ for (size_t i = 1; i <= len; i++) {
+ start[len + extra - i] = start[len - i];
+ }
+ // and fill the start
+ for (size_t i = 0; i < extra; i++) {
+ start[i] = fill;
+ }
+}
+
+
+static void mi_out_num(uintptr_t x, size_t base, char prefix, char** out, char* end)
+{
+ if (x == 0 || base == 0 || base > 16) {
+ if (prefix != 0) { mi_outc(prefix, out, end); }
+ mi_outc('0',out,end);
+ }
+ else {
+ // output digits in reverse
+ char* start = *out;
+ while (x > 0) {
+ char digit = (char)(x % base);
+ mi_outc((digit <= 9 ? '0' + digit : 'A' + digit - 10),out,end);
+ x = x / base;
+ }
+ if (prefix != 0) {
+ mi_outc(prefix, out, end);
+ }
+ size_t len = *out - start;
+ // and reverse in-place
+ for (size_t i = 0; i < (len / 2); i++) {
+ char c = start[len - i - 1];
+ start[len - i - 1] = start[i];
+ start[i] = c;
+ }
+ }
+}
+
+
+#define MI_NEXTC() c = *in; if (c==0) break; in++;
+
+void _mi_vsnprintf(char* buf, size_t bufsize, const char* fmt, va_list args) {
+ if (buf == NULL || bufsize == 0 || fmt == NULL) return;
+ buf[bufsize - 1] = 0;
+ char* const end = buf + (bufsize - 1);
+ const char* in = fmt;
+ char* out = buf;
+ while (true) {
+ if (out >= end) break;
+ char c;
+ MI_NEXTC();
+ if (c != '%') {
+ if ((c >= ' ' && c <= '~') || c=='\n' || c=='\r' || c=='\t') { // output visible ascii or standard control only
+ mi_outc(c, &out, end);
+ }
+ }
+ else {
+ MI_NEXTC();
+ char fill = ' ';
+ size_t width = 0;
+ char numtype = 'd';
+ char numplus = 0;
+ bool alignright = true;
+ if (c == '+' || c == ' ') { numplus = c; MI_NEXTC(); }
+ if (c == '-') { alignright = false; MI_NEXTC(); }
+ if (c == '0') { fill = '0'; MI_NEXTC(); }
+ if (c >= '1' && c <= '9') {
+ width = (c - '0'); MI_NEXTC();
+ while (c >= '0' && c <= '9') {
+ width = (10 * width) + (c - '0'); MI_NEXTC();
+ }
+ if (c == 0) break; // extra check due to while
+ }
+ if (c == 'z' || c == 't' || c == 'L') { numtype = c; MI_NEXTC(); }
+ else if (c == 'l') {
+ numtype = c; MI_NEXTC();
+ if (c == 'l') { numtype = 'L'; MI_NEXTC(); }
+ }
+
+ char* start = out;
+ if (c == 's') {
+ // string
+ const char* s = va_arg(args, const char*);
+ mi_outs(s, &out, end);
+ }
+ else if (c == 'p' || c == 'x' || c == 'u') {
+ // unsigned
+ uintptr_t x = 0;
+ if (c == 'x' || c == 'u') {
+ if (numtype == 'z') x = va_arg(args, size_t);
+ else if (numtype == 't') x = va_arg(args, uintptr_t); // unsigned ptrdiff_t
+ else if (numtype == 'L') x = (uintptr_t)va_arg(args, unsigned long long);
+ else x = va_arg(args, unsigned long);
+ }
+ else if (c == 'p') {
+ x = va_arg(args, uintptr_t);
+ mi_outs("0x", &out, end);
+ start = out;
+ width = (width >= 2 ? width - 2 : 0);
+ }
+ if (width == 0 && (c == 'x' || c == 'p')) {
+ if (c == 'p') { width = 2 * (x <= UINT32_MAX ? 4 : ((x >> 16) <= UINT32_MAX ? 6 : sizeof(void*))); }
+ if (width == 0) { width = 2; }
+ fill = '0';
+ }
+ mi_out_num(x, (c == 'x' || c == 'p' ? 16 : 10), numplus, &out, end);
+ }
+ else if (c == 'i' || c == 'd') {
+ // signed
+ intptr_t x = 0;
+ if (numtype == 'z') x = va_arg(args, intptr_t );
+ else if (numtype == 't') x = va_arg(args, ptrdiff_t);
+ else if (numtype == 'L') x = (intptr_t)va_arg(args, long long);
+ else x = va_arg(args, long);
+ char pre = 0;
+ if (x < 0) {
+ pre = '-';
+ if (x > INTPTR_MIN) { x = -x; }
+ }
+ else if (numplus != 0) {
+ pre = numplus;
+ }
+ mi_out_num((uintptr_t)x, 10, pre, &out, end);
+ }
+ else if (c >= ' ' && c <= '~') {
+ // unknown format
+ mi_outc('%', &out, end);
+ mi_outc(c, &out, end);
+ }
+
+ // fill & align
+ mi_assert_internal(out <= end);
+ mi_assert_internal(out >= start);
+ const size_t len = out - start;
+ if (len < width) {
+ mi_out_fill(fill, width - len, &out, end);
+ if (alignright && out <= end) {
+ mi_out_alignright(fill, start, len, width - len, end);
+ }
+ }
+ }
+ }
+ mi_assert_internal(out <= end);
+ *out = 0;
+}
+
+void _mi_snprintf(char* buf, size_t buflen, const char* fmt, ...) {
+ va_list args;
+ va_start(args, fmt);
+ _mi_vsnprintf(buf, buflen, fmt, args);
+ va_end(args);
+}
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/options.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/options.c
index 345b560..fba9076 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/options.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/options.c
@@ -9,9 +9,9 @@ terms of the MIT license. A copy of the license can be found in the file
#include "mimalloc/atomic.h"
#include "mimalloc/prim.h" // mi_prim_out_stderr
-#include <stdio.h> // FILE
+#include <stdio.h> // stdin/stdout
#include <stdlib.h> // abort
-#include <stdarg.h>
+
static long mi_max_error_count = 16; // stop outputting errors after this (use < 0 for no limit)
@@ -65,7 +65,7 @@ static mi_option_desc_t options[_mi_option_last] =
{ 0, UNINIT, MI_OPTION_LEGACY(allow_large_os_pages,large_os_pages) }, // use large OS pages, use only with eager commit to prevent fragmentation of VMA's
{ 0, UNINIT, MI_OPTION(reserve_huge_os_pages) }, // per 1GiB huge pages
{-1, UNINIT, MI_OPTION(reserve_huge_os_pages_at) }, // reserve huge pages at node N
- { 0, UNINIT, MI_OPTION(reserve_os_memory) },
+ { 0, UNINIT, MI_OPTION(reserve_os_memory) }, // reserve OS memory in advance
{ 0, UNINIT, MI_OPTION(deprecated_segment_cache) }, // cache N segments per thread
{ 0, UNINIT, MI_OPTION(deprecated_page_reset) }, // reset page memory on free
{ 0, UNINIT, MI_OPTION_LEGACY(abandoned_page_purge,abandoned_page_reset) }, // reset free page memory when a thread terminates
@@ -77,11 +77,11 @@ static mi_option_desc_t options[_mi_option_last] =
#endif
{ 10, UNINIT, MI_OPTION_LEGACY(purge_delay,reset_delay) }, // purge delay in milli-seconds
{ 0, UNINIT, MI_OPTION(use_numa_nodes) }, // 0 = use available numa nodes, otherwise use at most N nodes.
- { 0, UNINIT, MI_OPTION(limit_os_alloc) }, // 1 = do not use OS memory for allocation (but only reserved arenas)
+ { 0, UNINIT, MI_OPTION_LEGACY(disallow_os_alloc,limit_os_alloc) }, // 1 = do not use OS memory for allocation (but only reserved arenas)
{ 100, UNINIT, MI_OPTION(os_tag) }, // only apple specific for now but might serve more or less related purpose
{ 16, UNINIT, MI_OPTION(max_errors) }, // maximum errors that are output
{ 16, UNINIT, MI_OPTION(max_warnings) }, // maximum warnings that are output
- { 8, UNINIT, MI_OPTION(max_segment_reclaim)}, // max. number of segment reclaims from the abandoned segments per try.
+ { 10, UNINIT, MI_OPTION(max_segment_reclaim)}, // max. percentage of the abandoned segments per try.
{ 0, UNINIT, MI_OPTION(destroy_on_exit)}, // release all OS memory on process exit; careful with dangling pointer or after-exit frees!
#if (MI_INTPTR_SIZE>4)
{ 1024L * 1024L, UNINIT, MI_OPTION(arena_reserve) }, // reserve memory N KiB at a time
@@ -90,10 +90,16 @@ static mi_option_desc_t options[_mi_option_last] =
#endif
{ 10, UNINIT, MI_OPTION(arena_purge_mult) }, // purge delay multiplier for arena's
{ 1, UNINIT, MI_OPTION_LEGACY(purge_extend_delay, decommit_extend_delay) },
+ { 1, UNINIT, MI_OPTION(abandoned_reclaim_on_free) },// reclaim an abandoned segment on a free
+ { 0, UNINIT, MI_OPTION(disallow_arena_alloc) }, // 1 = do not use arena's for allocation (except if using specific arena id's)
};
static void mi_option_init(mi_option_desc_t* desc);
+static bool mi_option_has_size_in_kib(mi_option_t option) {
+ return (option == mi_option_reserve_os_memory || option == mi_option_arena_reserve);
+}
+
void _mi_options_init(void) {
// called on process load; should not be called before the CRT is initialized!
// (e.g. do not call this from process_init as that may run before CRT initialization)
@@ -104,7 +110,7 @@ void _mi_options_init(void) {
// if (option != mi_option_verbose)
{
mi_option_desc_t* desc = &options[option];
- _mi_verbose_message("option '%s': %ld\n", desc->name, desc->value);
+ _mi_verbose_message("option '%s': %ld %s\n", desc->name, desc->value, (mi_option_has_size_in_kib(option) ? "KiB" : ""));
}
}
mi_max_error_count = mi_option_get(mi_option_max_errors);
@@ -128,7 +134,7 @@ mi_decl_nodiscard long mi_option_get_clamp(mi_option_t option, long min, long ma
}
mi_decl_nodiscard size_t mi_option_get_size(mi_option_t option) {
- mi_assert_internal(option == mi_option_reserve_os_memory || option == mi_option_arena_reserve);
+ mi_assert_internal(mi_option_has_size_in_kib(option));
long x = mi_option_get(option);
return (x < 0 ? 0 : (size_t)x * MI_KiB);
}
@@ -311,12 +317,12 @@ void _mi_fputs(mi_output_fun* out, void* arg, const char* prefix, const char* me
}
// Define our own limited `fprintf` that avoids memory allocation.
-// We do this using `snprintf` with a limited buffer.
+// We do this using `_mi_vsnprintf` with a limited buffer.
static void mi_vfprintf( mi_output_fun* out, void* arg, const char* prefix, const char* fmt, va_list args ) {
char buf[512];
if (fmt==NULL) return;
if (!mi_recurse_enter()) return;
- vsnprintf(buf,sizeof(buf)-1,fmt,args);
+ _mi_vsnprintf(buf, sizeof(buf)-1, fmt, args);
mi_recurse_exit();
_mi_fputs(out,arg,prefix,buf);
}
@@ -331,7 +337,7 @@ void _mi_fprintf( mi_output_fun* out, void* arg, const char* fmt, ... ) {
static void mi_vfprintf_thread(mi_output_fun* out, void* arg, const char* prefix, const char* fmt, va_list args) {
if (prefix != NULL && _mi_strnlen(prefix,33) <= 32 && !_mi_is_main_thread()) {
char tprefix[64];
- snprintf(tprefix, sizeof(tprefix), "%sthread 0x%llx: ", prefix, (unsigned long long)_mi_thread_id());
+ _mi_snprintf(tprefix, sizeof(tprefix), "%sthread 0x%tx: ", prefix, (uintptr_t)_mi_thread_id());
mi_vfprintf(out, arg, tprefix, fmt, args);
}
else {
@@ -434,68 +440,6 @@ void _mi_error_message(int err, const char* fmt, ...) {
// --------------------------------------------------------
// Initialize options by checking the environment
// --------------------------------------------------------
-char _mi_toupper(char c) {
- if (c >= 'a' && c <= 'z') return (c - 'a' + 'A');
- else return c;
-}
-
-int _mi_strnicmp(const char* s, const char* t, size_t n) {
- if (n == 0) return 0;
- for (; *s != 0 && *t != 0 && n > 0; s++, t++, n--) {
- if (_mi_toupper(*s) != _mi_toupper(*t)) break;
- }
- return (n == 0 ? 0 : *s - *t);
-}
-
-void _mi_strlcpy(char* dest, const char* src, size_t dest_size) {
- if (dest==NULL || src==NULL || dest_size == 0) return;
- // copy until end of src, or when dest is (almost) full
- while (*src != 0 && dest_size > 1) {
- *dest++ = *src++;
- dest_size--;
- }
- // always zero terminate
- *dest = 0;
-}
-
-void _mi_strlcat(char* dest, const char* src, size_t dest_size) {
- if (dest==NULL || src==NULL || dest_size == 0) return;
- // find end of string in the dest buffer
- while (*dest != 0 && dest_size > 1) {
- dest++;
- dest_size--;
- }
- // and catenate
- _mi_strlcpy(dest, src, dest_size);
-}
-
-size_t _mi_strlen(const char* s) {
- if (s==NULL) return 0;
- size_t len = 0;
- while(s[len] != 0) { len++; }
- return len;
-}
-
-size_t _mi_strnlen(const char* s, size_t max_len) {
- if (s==NULL) return 0;
- size_t len = 0;
- while(s[len] != 0 && len < max_len) { len++; }
- return len;
-}
-
-#ifdef MI_NO_GETENV
-static bool mi_getenv(const char* name, char* result, size_t result_size) {
- MI_UNUSED(name);
- MI_UNUSED(result);
- MI_UNUSED(result_size);
- return false;
-}
-#else
-static bool mi_getenv(const char* name, char* result, size_t result_size) {
- if (name==NULL || result == NULL || result_size < 64) return false;
- return _mi_prim_getenv(name,result,result_size);
-}
-#endif
// TODO: implement ourselves to reduce dependencies on the C runtime
#include <stdlib.h> // strtol
@@ -508,11 +452,11 @@ static void mi_option_init(mi_option_desc_t* desc) {
char buf[64+1];
_mi_strlcpy(buf, "mimalloc_", sizeof(buf));
_mi_strlcat(buf, desc->name, sizeof(buf));
- bool found = mi_getenv(buf, s, sizeof(s));
+ bool found = _mi_getenv(buf, s, sizeof(s));
if (!found && desc->legacy_name != NULL) {
_mi_strlcpy(buf, "mimalloc_", sizeof(buf));
_mi_strlcat(buf, desc->legacy_name, sizeof(buf));
- found = mi_getenv(buf, s, sizeof(s));
+ found = _mi_getenv(buf, s, sizeof(s));
if (found) {
_mi_warning_message("environment option \"mimalloc_%s\" is deprecated -- use \"mimalloc_%s\" instead.\n", desc->legacy_name, desc->name);
}
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/os.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/os.c
index b4f02ba..dda6844 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/os.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/os.c
@@ -29,7 +29,7 @@ bool _mi_os_has_overcommit(void) {
return mi_os_mem_config.has_overcommit;
}
-bool _mi_os_has_virtual_reserve(void) {
+bool _mi_os_has_virtual_reserve(void) {
return mi_os_mem_config.has_virtual_reserve;
}
@@ -73,14 +73,6 @@ void _mi_os_init(void) {
bool _mi_os_decommit(void* addr, size_t size, mi_stats_t* stats);
bool _mi_os_commit(void* addr, size_t size, bool* is_zero, mi_stats_t* tld_stats);
-static void* mi_align_up_ptr(void* p, size_t alignment) {
- return (void*)_mi_align_up((uintptr_t)p, alignment);
-}
-
-static void* mi_align_down_ptr(void* p, size_t alignment) {
- return (void*)_mi_align_down((uintptr_t)p, alignment);
-}
-
/* -----------------------------------------------------------
aligned hinting
@@ -141,13 +133,13 @@ static void mi_os_free_huge_os_pages(void* p, size_t size, mi_stats_t* stats);
static void mi_os_prim_free(void* addr, size_t size, bool still_committed, mi_stats_t* tld_stats) {
MI_UNUSED(tld_stats);
+ mi_stats_t* stats = &_mi_stats_main;
mi_assert_internal((size % _mi_os_page_size()) == 0);
if (addr == NULL || size == 0) return; // || _mi_os_is_huge_reserved(addr)
int err = _mi_prim_free(addr, size);
if (err != 0) {
_mi_warning_message("unable to free OS memory (error: %d (0x%x), size: 0x%zx bytes, address: %p)\n", err, err, size, addr);
}
- mi_stats_t* stats = &_mi_stats_main;
if (still_committed) { _mi_stat_decrease(&stats->committed, size); }
_mi_stat_decrease(&stats->reserved, size);
}
@@ -173,7 +165,7 @@ void _mi_os_free_ex(void* addr, size_t size, bool still_committed, mi_memid_t me
}
}
else {
- // nothing to do
+ // nothing to do
mi_assert(memid.memkind < MI_MEM_OS);
}
}
@@ -188,31 +180,33 @@ void _mi_os_free(void* p, size_t size, mi_memid_t memid, mi_stats_t* tld_stats)
-------------------------------------------------------------- */
// Note: the `try_alignment` is just a hint and the returned pointer is not guaranteed to be aligned.
-static void* mi_os_prim_alloc(size_t size, size_t try_alignment, bool commit, bool allow_large, bool* is_large, bool* is_zero, mi_stats_t* stats) {
+static void* mi_os_prim_alloc(size_t size, size_t try_alignment, bool commit, bool allow_large, bool* is_large, bool* is_zero, mi_stats_t* tld_stats) {
mi_assert_internal(size > 0 && (size % _mi_os_page_size()) == 0);
mi_assert_internal(is_zero != NULL);
mi_assert_internal(is_large != NULL);
if (size == 0) return NULL;
if (!commit) { allow_large = false; }
if (try_alignment == 0) { try_alignment = 1; } // avoid 0 to ensure there will be no divide by zero when aligning
-
*is_zero = false;
- void* p = NULL;
+ void* p = NULL;
int err = _mi_prim_alloc(size, try_alignment, commit, allow_large, is_large, is_zero, &p);
if (err != 0) {
_mi_warning_message("unable to allocate OS memory (error: %d (0x%x), size: 0x%zx bytes, align: 0x%zx, commit: %d, allow large: %d)\n", err, err, size, try_alignment, commit, allow_large);
}
+
+ MI_UNUSED(tld_stats);
+ mi_stats_t* stats = &_mi_stats_main;
mi_stat_counter_increase(stats->mmap_calls, 1);
if (p != NULL) {
_mi_stat_increase(&stats->reserved, size);
- if (commit) {
- _mi_stat_increase(&stats->committed, size);
+ if (commit) {
+ _mi_stat_increase(&stats->committed, size);
// seems needed for asan (or `mimalloc-test-api` fails)
#ifdef MI_TRACK_ASAN
if (*is_zero) { mi_track_mem_defined(p,size); }
else { mi_track_mem_undefined(p,size); }
#endif
- }
+ }
}
return p;
}
@@ -249,7 +243,7 @@ static void* mi_os_prim_alloc_aligned(size_t size, size_t alignment, bool commit
// over-allocate uncommitted (virtual) memory
p = mi_os_prim_alloc(over_size, 1 /*alignment*/, false /* commit? */, false /* allow_large */, is_large, is_zero, stats);
if (p == NULL) return NULL;
-
+
// set p to the aligned part in the full region
// note: this is dangerous on Windows as VirtualFree needs the actual base pointer
// this is handled though by having the `base` field in the memid's
@@ -265,7 +259,7 @@ static void* mi_os_prim_alloc_aligned(size_t size, size_t alignment, bool commit
// overallocate...
p = mi_os_prim_alloc(over_size, 1, commit, false, is_large, is_zero, stats);
if (p == NULL) return NULL;
-
+
// and selectively unmap parts around the over-allocated area. (noop on sbrk)
void* aligned_p = mi_align_up_ptr(p, alignment);
size_t pre_size = (uint8_t*)aligned_p - (uint8_t*)p;
@@ -276,7 +270,7 @@ static void* mi_os_prim_alloc_aligned(size_t size, size_t alignment, bool commit
if (post_size > 0) { mi_os_prim_free((uint8_t*)aligned_p + mid_size, post_size, commit, stats); }
// we can return the aligned pointer on `mmap` (and sbrk) systems
p = aligned_p;
- *base = aligned_p; // since we freed the pre part, `*base == p`.
+ *base = aligned_p; // since we freed the pre part, `*base == p`.
}
}
@@ -289,10 +283,8 @@ static void* mi_os_prim_alloc_aligned(size_t size, size_t alignment, bool commit
OS API: alloc and alloc_aligned
----------------------------------------------------------- */
-void* _mi_os_alloc(size_t size, mi_memid_t* memid, mi_stats_t* tld_stats) {
- MI_UNUSED(tld_stats);
+void* _mi_os_alloc(size_t size, mi_memid_t* memid, mi_stats_t* stats) {
*memid = _mi_memid_none();
- mi_stats_t* stats = &_mi_stats_main;
if (size == 0) return NULL;
size = _mi_os_good_alloc_size(size);
bool os_is_large = false;
@@ -300,23 +292,22 @@ void* _mi_os_alloc(size_t size, mi_memid_t* memid, mi_stats_t* tld_stats) {
void* p = mi_os_prim_alloc(size, 0, true, false, &os_is_large, &os_is_zero, stats);
if (p != NULL) {
*memid = _mi_memid_create_os(true, os_is_zero, os_is_large);
- }
+ }
return p;
}
-void* _mi_os_alloc_aligned(size_t size, size_t alignment, bool commit, bool allow_large, mi_memid_t* memid, mi_stats_t* tld_stats)
+void* _mi_os_alloc_aligned(size_t size, size_t alignment, bool commit, bool allow_large, mi_memid_t* memid, mi_stats_t* stats)
{
MI_UNUSED(&_mi_os_get_aligned_hint); // suppress unused warnings
- MI_UNUSED(tld_stats);
*memid = _mi_memid_none();
if (size == 0) return NULL;
size = _mi_os_good_alloc_size(size);
alignment = _mi_align_up(alignment, _mi_os_page_size());
-
+
bool os_is_large = false;
bool os_is_zero = false;
void* os_base = NULL;
- void* p = mi_os_prim_alloc_aligned(size, alignment, commit, allow_large, &os_is_large, &os_is_zero, &os_base, &_mi_stats_main /*tld->stats*/ );
+ void* p = mi_os_prim_alloc_aligned(size, alignment, commit, allow_large, &os_is_large, &os_is_zero, &os_base, stats );
if (p != NULL) {
*memid = _mi_memid_create_os(commit, os_is_zero, os_is_large);
memid->mem.os.base = os_base;
@@ -327,13 +318,13 @@ void* _mi_os_alloc_aligned(size_t size, size_t alignment, bool commit, bool allo
/* -----------------------------------------------------------
OS aligned allocation with an offset. This is used
- for large alignments > MI_ALIGNMENT_MAX. We use a large mimalloc
+ for large alignments > MI_BLOCK_ALIGNMENT_MAX. We use a large mimalloc
page where the object can be aligned at an offset from the start of the segment.
As we may need to overallocate, we need to free such pointers using `mi_free_aligned`
to use the actual start of the memory region.
----------------------------------------------------------- */
-void* _mi_os_alloc_aligned_at_offset(size_t size, size_t alignment, size_t offset, bool commit, bool allow_large, mi_memid_t* memid, mi_stats_t* tld_stats) {
+void* _mi_os_alloc_aligned_at_offset(size_t size, size_t alignment, size_t offset, bool commit, bool allow_large, mi_memid_t* memid, mi_stats_t* stats) {
mi_assert(offset <= MI_SEGMENT_SIZE);
mi_assert(offset <= size);
mi_assert((alignment % _mi_os_page_size()) == 0);
@@ -341,20 +332,20 @@ void* _mi_os_alloc_aligned_at_offset(size_t size, size_t alignment, size_t offse
if (offset > MI_SEGMENT_SIZE) return NULL;
if (offset == 0) {
// regular aligned allocation
- return _mi_os_alloc_aligned(size, alignment, commit, allow_large, memid, tld_stats);
+ return _mi_os_alloc_aligned(size, alignment, commit, allow_large, memid, stats);
}
else {
// overallocate to align at an offset
const size_t extra = _mi_align_up(offset, alignment) - offset;
const size_t oversize = size + extra;
- void* const start = _mi_os_alloc_aligned(oversize, alignment, commit, allow_large, memid, tld_stats);
+ void* const start = _mi_os_alloc_aligned(oversize, alignment, commit, allow_large, memid, stats);
if (start == NULL) return NULL;
void* const p = (uint8_t*)start + extra;
mi_assert(_mi_is_aligned((uint8_t*)p + offset, alignment));
// decommit the overallocation at the start
if (commit && extra > _mi_os_page_size()) {
- _mi_os_decommit(start, extra, tld_stats);
+ _mi_os_decommit(start, extra, stats);
}
return p;
}
@@ -390,7 +381,7 @@ static void* mi_os_page_align_area_conservative(void* addr, size_t size, size_t*
bool _mi_os_commit(void* addr, size_t size, bool* is_zero, mi_stats_t* tld_stats) {
MI_UNUSED(tld_stats);
- mi_stats_t* stats = &_mi_stats_main;
+ mi_stats_t* stats = &_mi_stats_main;
if (is_zero != NULL) { *is_zero = false; }
_mi_stat_increase(&stats->committed, size); // use size for precise commit vs. decommit
_mi_stat_counter_increase(&stats->commit_calls, 1);
@@ -400,21 +391,21 @@ bool _mi_os_commit(void* addr, size_t size, bool* is_zero, mi_stats_t* tld_stats
void* start = mi_os_page_align_areax(false /* conservative? */, addr, size, &csize);
if (csize == 0) return true;
- // commit
+ // commit
bool os_is_zero = false;
- int err = _mi_prim_commit(start, csize, &os_is_zero);
+ int err = _mi_prim_commit(start, csize, &os_is_zero);
if (err != 0) {
_mi_warning_message("cannot commit OS memory (error: %d (0x%x), address: %p, size: 0x%zx bytes)\n", err, err, start, csize);
return false;
}
- if (os_is_zero && is_zero != NULL) {
+ if (os_is_zero && is_zero != NULL) {
*is_zero = true;
mi_assert_expensive(mi_mem_is_zero(start, csize));
}
// note: the following seems required for asan (otherwise `mimalloc-test-stress` fails)
#ifdef MI_TRACK_ASAN
if (os_is_zero) { mi_track_mem_defined(start,csize); }
- else { mi_track_mem_undefined(start,csize); }
+ else { mi_track_mem_undefined(start,csize); }
#endif
return true;
}
@@ -428,11 +419,11 @@ static bool mi_os_decommit_ex(void* addr, size_t size, bool* needs_recommit, mi_
// page align
size_t csize;
void* start = mi_os_page_align_area_conservative(addr, size, &csize);
- if (csize == 0) return true;
+ if (csize == 0) return true;
// decommit
*needs_recommit = true;
- int err = _mi_prim_decommit(start,csize,needs_recommit);
+ int err = _mi_prim_decommit(start,csize,needs_recommit);
if (err != 0) {
_mi_warning_message("cannot decommit OS memory (error: %d (0x%x), address: %p, size: 0x%zx bytes)\n", err, err, start, csize);
}
@@ -450,7 +441,7 @@ bool _mi_os_decommit(void* addr, size_t size, mi_stats_t* tld_stats) {
// but may be used later again. This will release physical memory
// pages and reduce swapping while keeping the memory committed.
// We page align to a conservative area inside the range to reset.
-bool _mi_os_reset(void* addr, size_t size, mi_stats_t* stats) {
+bool _mi_os_reset(void* addr, size_t size, mi_stats_t* stats) {
// page align conservatively within the range
size_t csize;
void* start = mi_os_page_align_area_conservative(addr, size, &csize);
@@ -470,7 +461,7 @@ bool _mi_os_reset(void* addr, size_t size, mi_stats_t* stats) {
}
-// either resets or decommits memory, returns true if the memory needs
+// either resets or decommits memory, returns true if the memory needs
// to be recommitted if it is to be re-used later on.
bool _mi_os_purge_ex(void* p, size_t size, bool allow_reset, mi_stats_t* stats)
{
@@ -483,7 +474,7 @@ bool _mi_os_purge_ex(void* p, size_t size, bool allow_reset, mi_stats_t* stats)
{
bool needs_recommit = true;
mi_os_decommit_ex(p, size, &needs_recommit, stats);
- return needs_recommit;
+ return needs_recommit;
}
else {
if (allow_reset) { // this can sometimes be not allowed if the range is not fully committed
@@ -493,7 +484,7 @@ bool _mi_os_purge_ex(void* p, size_t size, bool allow_reset, mi_stats_t* stats)
}
}
-// either resets or decommits memory, returns true if the memory needs
+// either resets or decommits memory, returns true if the memory needs
// to be recommitted if it is to be re-used later on.
bool _mi_os_purge(void* p, size_t size, mi_stats_t * stats) {
return _mi_os_purge_ex(p, size, true, stats);
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/page-queue.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/page-queue.c
index cb54b37..ceea91e 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/page-queue.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/page-queue.c
@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------
-Copyright (c) 2018-2020, Microsoft Research, Daan Leijen
+Copyright (c) 2018-2024, Microsoft Research, Daan Leijen
This is free software; you can redistribute it and/or modify it under the
terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
@@ -11,6 +11,10 @@ terms of the MIT license. A copy of the license can be found in the file
#ifndef MI_IN_PAGE_C
#error "this file should be included from 'page.c'"
+// include to help an IDE
+#include "mimalloc.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
#endif
/* -----------------------------------------------------------
@@ -109,10 +113,10 @@ size_t _mi_bin_size(uint8_t bin) {
// Good size for allocation
size_t mi_good_size(size_t size) mi_attr_noexcept {
if (size <= MI_MEDIUM_OBJ_SIZE_MAX) {
- return _mi_bin_size(mi_bin(size));
+ return _mi_bin_size(mi_bin(size + MI_PADDING_SIZE));
}
else {
- return _mi_align_up(size,_mi_os_page_size());
+ return _mi_align_up(size + MI_PADDING_SIZE,_mi_os_page_size());
}
}
@@ -137,21 +141,25 @@ static bool mi_heap_contains_queue(const mi_heap_t* heap, const mi_page_queue_t*
}
#endif
-static mi_page_queue_t* mi_page_queue_of(const mi_page_t* page) {
- uint8_t bin = (mi_page_is_in_full(page) ? MI_BIN_FULL : mi_bin(page->xblock_size));
- mi_heap_t* heap = mi_page_heap(page);
- mi_assert_internal(heap != NULL && bin <= MI_BIN_FULL);
- mi_page_queue_t* pq = &heap->pages[bin];
- mi_assert_internal(bin >= MI_BIN_HUGE || page->xblock_size == pq->block_size);
- mi_assert_expensive(mi_page_queue_contains(pq, page));
- return pq;
+static inline bool mi_page_is_large_or_huge(const mi_page_t* page) {
+ return (mi_page_block_size(page) > MI_MEDIUM_OBJ_SIZE_MAX || mi_page_is_huge(page));
}
static mi_page_queue_t* mi_heap_page_queue_of(mi_heap_t* heap, const mi_page_t* page) {
- uint8_t bin = (mi_page_is_in_full(page) ? MI_BIN_FULL : mi_bin(page->xblock_size));
+ mi_assert_internal(heap!=NULL);
+ uint8_t bin = (mi_page_is_in_full(page) ? MI_BIN_FULL : (mi_page_is_huge(page) ? MI_BIN_HUGE : mi_bin(mi_page_block_size(page))));
mi_assert_internal(bin <= MI_BIN_FULL);
mi_page_queue_t* pq = &heap->pages[bin];
- mi_assert_internal(mi_page_is_in_full(page) || page->xblock_size == pq->block_size);
+ mi_assert_internal((mi_page_block_size(page) == pq->block_size) ||
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_huge(pq)) ||
+ (mi_page_is_in_full(page) && mi_page_queue_is_full(pq)));
+ return pq;
+}
+
+static mi_page_queue_t* mi_page_queue_of(const mi_page_t* page) {
+ mi_heap_t* heap = mi_page_heap(page);
+ mi_page_queue_t* pq = mi_heap_page_queue_of(heap, page);
+ mi_assert_expensive(mi_page_queue_contains(pq, page));
return pq;
}
@@ -206,7 +214,9 @@ static bool mi_page_queue_is_empty(mi_page_queue_t* queue) {
static void mi_page_queue_remove(mi_page_queue_t* queue, mi_page_t* page) {
mi_assert_internal(page != NULL);
mi_assert_expensive(mi_page_queue_contains(queue, page));
- mi_assert_internal(page->xblock_size == queue->block_size || (page->xblock_size > MI_MEDIUM_OBJ_SIZE_MAX && mi_page_queue_is_huge(queue)) || (mi_page_is_in_full(page) && mi_page_queue_is_full(queue)));
+ mi_assert_internal(mi_page_block_size(page) == queue->block_size ||
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_huge(queue)) ||
+ (mi_page_is_in_full(page) && mi_page_queue_is_full(queue)));
mi_heap_t* heap = mi_page_heap(page);
if (page->prev != NULL) page->prev->next = page->next;
@@ -232,8 +242,8 @@ static void mi_page_queue_push(mi_heap_t* heap, mi_page_queue_t* queue, mi_page_
#if MI_HUGE_PAGE_ABANDON
mi_assert_internal(_mi_page_segment(page)->kind != MI_SEGMENT_HUGE);
#endif
- mi_assert_internal(page->xblock_size == queue->block_size ||
- (page->xblock_size > MI_MEDIUM_OBJ_SIZE_MAX) ||
+ mi_assert_internal(mi_page_block_size(page) == queue->block_size ||
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_huge(queue)) ||
(mi_page_is_in_full(page) && mi_page_queue_is_full(queue)));
mi_page_set_in_full(page, mi_page_queue_is_full(queue));
@@ -259,12 +269,13 @@ static void mi_page_queue_enqueue_from(mi_page_queue_t* to, mi_page_queue_t* fro
mi_assert_internal(page != NULL);
mi_assert_expensive(mi_page_queue_contains(from, page));
mi_assert_expensive(!mi_page_queue_contains(to, page));
-
- mi_assert_internal((page->xblock_size == to->block_size && page->xblock_size == from->block_size) ||
- (page->xblock_size == to->block_size && mi_page_queue_is_full(from)) ||
- (page->xblock_size == from->block_size && mi_page_queue_is_full(to)) ||
- (page->xblock_size > MI_LARGE_OBJ_SIZE_MAX && mi_page_queue_is_huge(to)) ||
- (page->xblock_size > MI_LARGE_OBJ_SIZE_MAX && mi_page_queue_is_full(to)));
+ const size_t bsize = mi_page_block_size(page);
+ MI_UNUSED(bsize);
+ mi_assert_internal((bsize == to->block_size && bsize == from->block_size) ||
+ (bsize == to->block_size && mi_page_queue_is_full(from)) ||
+ (bsize == from->block_size && mi_page_queue_is_full(to)) ||
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_huge(to)) ||
+ (mi_page_is_large_or_huge(page) && mi_page_queue_is_full(to)));
mi_heap_t* heap = mi_page_heap(page);
if (page->prev != NULL) page->prev->next = page->next;
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/page.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/page.c
index 8ac0a71..871ed21 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/page.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/page.c
@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------
-Copyright (c) 2018-2020, Microsoft Research, Daan Leijen
+Copyright (c) 2018-2024, Microsoft Research, Daan Leijen
This is free software; you can redistribute it and/or modify it under the
terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
@@ -59,7 +59,7 @@ static inline uint8_t* mi_page_area(const mi_page_t* page) {
static bool mi_page_list_is_valid(mi_page_t* page, mi_block_t* p) {
size_t psize;
- uint8_t* page_area = _mi_page_start(_mi_page_segment(page), page, &psize);
+ uint8_t* page_area = _mi_segment_page_start(_mi_page_segment(page), page, &psize);
mi_block_t* start = (mi_block_t*)page_area;
mi_block_t* end = (mi_block_t*)(page_area + psize);
while(p != NULL) {
@@ -78,14 +78,13 @@ static bool mi_page_list_is_valid(mi_page_t* page, mi_block_t* p) {
}
static bool mi_page_is_valid_init(mi_page_t* page) {
- mi_assert_internal(page->xblock_size > 0);
+ mi_assert_internal(mi_page_block_size(page) > 0);
mi_assert_internal(page->used <= page->capacity);
mi_assert_internal(page->capacity <= page->reserved);
- mi_segment_t* segment = _mi_page_segment(page);
- uint8_t* start = _mi_page_start(segment,page,NULL);
- mi_assert_internal(start == _mi_segment_page_start(segment,page,NULL));
- //const size_t bsize = mi_page_block_size(page);
+ uint8_t* start = mi_page_start(page);
+ mi_assert_internal(start == _mi_segment_page_start(_mi_page_segment(page), page, NULL));
+ mi_assert_internal(page->is_huge == (_mi_page_segment(page)->kind == MI_SEGMENT_HUGE));
//mi_assert_internal(start + page->capacity*page->block_size == page->top);
mi_assert_internal(mi_page_list_is_valid(page,page->free));
@@ -125,9 +124,9 @@ bool _mi_page_is_valid(mi_page_t* page) {
mi_assert_internal(!_mi_process_is_initialized || segment->thread_id==0 || segment->thread_id == mi_page_heap(page)->thread_id);
#if MI_HUGE_PAGE_ABANDON
- if (segment->kind != MI_SEGMENT_HUGE)
+ if (segment->kind != MI_SEGMENT_HUGE)
#endif
- {
+ {
mi_page_queue_t* pq = mi_page_queue_of(page);
mi_assert_internal(mi_page_queue_contains(pq, page));
mi_assert_internal(pq->block_size==mi_page_block_size(page) || mi_page_block_size(page) > MI_MEDIUM_OBJ_SIZE_MAX || mi_page_is_in_full(page));
@@ -193,8 +192,8 @@ static void _mi_page_thread_free_collect(mi_page_t* page)
if (head == NULL) return;
// find the tail -- also to get a proper count (without data races)
- uint32_t max_count = page->capacity; // cannot collect more than capacity
- uint32_t count = 1;
+ size_t max_count = page->capacity; // cannot collect more than capacity
+ size_t count = 1;
mi_block_t* tail = head;
mi_block_t* next;
while ((next = mi_block_next(page,tail)) != NULL && count <= max_count) {
@@ -212,7 +211,7 @@ static void _mi_page_thread_free_collect(mi_page_t* page)
page->local_free = head;
// update counts now
- page->used -= count;
+ page->used -= (uint16_t)count;
}
void _mi_page_free_collect(mi_page_t* page, bool force) {
@@ -263,7 +262,7 @@ void _mi_page_reclaim(mi_heap_t* heap, mi_page_t* page) {
#if MI_HUGE_PAGE_ABANDON
mi_assert_internal(_mi_page_segment(page)->kind != MI_SEGMENT_HUGE);
#endif
-
+
// TODO: push on full queue immediately if it is full?
mi_page_queue_t* pq = mi_page_queue(heap, mi_page_block_size(page));
mi_page_queue_push(heap, pq, page);
@@ -282,11 +281,13 @@ static mi_page_t* mi_page_fresh_alloc(mi_heap_t* heap, mi_page_queue_t* pq, size
// this may be out-of-memory, or an abandoned page was reclaimed (and in our queue)
return NULL;
}
+ #if MI_HUGE_PAGE_ABANDON
+ mi_assert_internal(pq==NULL || _mi_page_segment(page)->page_kind != MI_PAGE_HUGE);
+ #endif
mi_assert_internal(page_alignment >0 || block_size > MI_MEDIUM_OBJ_SIZE_MAX || _mi_page_segment(page)->kind != MI_SEGMENT_HUGE);
- mi_assert_internal(pq!=NULL || page->xblock_size != 0);
mi_assert_internal(pq!=NULL || mi_page_block_size(page) >= block_size);
// a fresh page was found, initialize it
- const size_t full_block_size = ((pq == NULL || mi_page_queue_is_huge(pq)) ? mi_page_block_size(page) : block_size); // see also: mi_segment_huge_page_alloc
+ const size_t full_block_size = (pq == NULL || mi_page_is_huge(page) ? mi_page_block_size(page) : block_size); // see also: mi_segment_huge_page_alloc
mi_assert_internal(full_block_size >= block_size);
mi_page_init(heap, page, full_block_size, heap->tld);
mi_heap_stat_increase(heap, pages, 1);
@@ -427,8 +428,7 @@ void _mi_page_free(mi_page_t* page, mi_page_queue_t* pq, bool force) {
_mi_segment_page_free(page, force, segments_tld);
}
-// Retire parameters
-#define MI_MAX_RETIRE_SIZE (MI_MEDIUM_OBJ_SIZE_MAX)
+#define MI_MAX_RETIRE_SIZE MI_MEDIUM_OBJ_SIZE_MAX // should be less than size for MI_BIN_HUGE
#define MI_RETIRE_CYCLES (16)
// Retire a page with no more used blocks
@@ -441,7 +441,7 @@ void _mi_page_retire(mi_page_t* page) mi_attr_noexcept {
mi_assert_internal(page != NULL);
mi_assert_expensive(_mi_page_is_valid(page));
mi_assert_internal(mi_page_all_free(page));
-
+
mi_page_set_has_aligned(page, false);
// don't retire too often..
@@ -451,10 +451,11 @@ void _mi_page_retire(mi_page_t* page) mi_attr_noexcept {
// how to check this efficiently though...
// for now, we don't retire if it is the only page left of this size class.
mi_page_queue_t* pq = mi_page_queue_of(page);
- if mi_likely(page->xblock_size <= MI_MAX_RETIRE_SIZE && !mi_page_queue_is_special(pq)) { // not too large && not full or huge queue?
+ const size_t bsize = mi_page_block_size(page);
+ if mi_likely( /* bsize < MI_MAX_RETIRE_SIZE && */ !mi_page_queue_is_special(pq)) { // not full or huge queue?
if (pq->last==page && pq->first==page) { // the only page in the queue?
mi_stat_counter_increase(_mi_stats_main.page_no_retire,1);
- page->retire_expire = 1 + (page->xblock_size <= MI_SMALL_OBJ_SIZE_MAX ? MI_RETIRE_CYCLES : MI_RETIRE_CYCLES/4);
+ page->retire_expire = (bsize <= MI_SMALL_OBJ_SIZE_MAX ? MI_RETIRE_CYCLES : MI_RETIRE_CYCLES/4);
mi_heap_t* heap = mi_page_heap(page);
mi_assert_internal(pq >= heap->pages);
const size_t index = pq - heap->pages;
@@ -462,7 +463,7 @@ void _mi_page_retire(mi_page_t* page) mi_attr_noexcept {
if (index < heap->page_retired_min) heap->page_retired_min = index;
if (index > heap->page_retired_max) heap->page_retired_max = index;
mi_assert_internal(mi_page_all_free(page));
- return; // dont't free after all
+ return; // don't free after all
}
}
_mi_page_free(page, pq, false);
@@ -516,7 +517,7 @@ static void mi_page_free_list_extend_secure(mi_heap_t* const heap, mi_page_t* co
#endif
mi_assert_internal(page->capacity + extend <= page->reserved);
mi_assert_internal(bsize == mi_page_block_size(page));
- void* const page_area = _mi_page_start(_mi_page_segment(page), page, NULL);
+ void* const page_area = mi_page_start(page);
// initialize a randomized free list
// set up `slice_count` slices to alternate between
@@ -574,7 +575,7 @@ static mi_decl_noinline void mi_page_free_list_extend( mi_page_t* const page, co
#endif
mi_assert_internal(page->capacity + extend <= page->reserved);
mi_assert_internal(bsize == mi_page_block_size(page));
- void* const page_area = _mi_page_start(_mi_page_segment(page), page, NULL );
+ void* const page_area = mi_page_start(page);
mi_block_t* const start = mi_page_block_at(page, page_area, bsize, page->capacity);
@@ -608,7 +609,7 @@ static mi_decl_noinline void mi_page_free_list_extend( mi_page_t* const page, co
// allocations but this did not speed up any benchmark (due to an
// extra test in malloc? or cache effects?)
static void mi_page_extend_free(mi_heap_t* heap, mi_page_t* page, mi_tld_t* tld) {
- MI_UNUSED(tld);
+ MI_UNUSED(tld);
mi_assert_expensive(mi_page_is_valid_init(page));
#if (MI_SECURE<=2)
mi_assert(page->free == NULL);
@@ -617,16 +618,14 @@ static void mi_page_extend_free(mi_heap_t* heap, mi_page_t* page, mi_tld_t* tld)
#endif
if (page->capacity >= page->reserved) return;
- size_t page_size;
- _mi_page_start(_mi_page_segment(page), page, &page_size);
mi_stat_counter_increase(tld->stats.pages_extended, 1);
// calculate the extend count
- const size_t bsize = (page->xblock_size < MI_HUGE_BLOCK_SIZE ? page->xblock_size : page_size);
+ const size_t bsize = mi_page_block_size(page);
size_t extend = page->reserved - page->capacity;
mi_assert_internal(extend > 0);
- size_t max_extend = (bsize >= MI_MAX_EXTEND_SIZE ? MI_MIN_EXTEND : MI_MAX_EXTEND_SIZE/(uint32_t)bsize);
+ size_t max_extend = (bsize >= MI_MAX_EXTEND_SIZE ? MI_MIN_EXTEND : MI_MAX_EXTEND_SIZE/bsize);
if (max_extend < MI_MIN_EXTEND) { max_extend = MI_MIN_EXTEND; }
mi_assert_internal(max_extend > 0);
@@ -660,11 +659,10 @@ static void mi_page_init(mi_heap_t* heap, mi_page_t* page, size_t block_size, mi
mi_assert_internal(block_size > 0);
// set fields
mi_page_set_heap(page, heap);
- page->xblock_size = (block_size < MI_HUGE_BLOCK_SIZE ? (uint32_t)block_size : MI_HUGE_BLOCK_SIZE); // initialize before _mi_segment_page_start
+ page->block_size = block_size;
size_t page_size;
- const void* page_start = _mi_segment_page_start(segment, page, &page_size);
- MI_UNUSED(page_start);
- mi_track_mem_noaccess(page_start,page_size);
+ page->page_start = _mi_segment_page_start(segment, page, &page_size);
+ mi_track_mem_noaccess(page->page_start,page_size);
mi_assert_internal(mi_page_block_size(page) <= page_size);
mi_assert_internal(page_size <= page->slice_count*MI_SEGMENT_SLICE_SIZE);
mi_assert_internal(page_size / block_size < (1L<<16));
@@ -677,12 +675,18 @@ static void mi_page_init(mi_heap_t* heap, mi_page_t* page, size_t block_size, mi
page->free_is_zero = page->is_zero_init;
#if MI_DEBUG>2
if (page->is_zero_init) {
- mi_track_mem_defined(page_start, page_size);
- mi_assert_expensive(mi_mem_is_zero(page_start, page_size));
+ mi_track_mem_defined(page->page_start, page_size);
+ mi_assert_expensive(mi_mem_is_zero(page->page_start, page_size));
}
#endif
-
mi_assert_internal(page->is_committed);
+ if (block_size > 0 && _mi_is_power_of_two(block_size)) {
+ page->block_size_shift = (uint8_t)(mi_ctz((uintptr_t)block_size));
+ }
+ else {
+ page->block_size_shift = 0;
+ }
+
mi_assert_internal(page->capacity == 0);
mi_assert_internal(page->free == NULL);
mi_assert_internal(page->used == 0);
@@ -695,6 +699,7 @@ static void mi_page_init(mi_heap_t* heap, mi_page_t* page, size_t block_size, mi
mi_assert_internal(page->keys[0] != 0);
mi_assert_internal(page->keys[1] != 0);
#endif
+ mi_assert_internal(page->block_size_shift == 0 || (block_size == ((size_t)1 << page->block_size_shift)));
mi_assert_expensive(mi_page_is_valid_init(page));
// initialize an initial free list
@@ -718,7 +723,7 @@ static mi_page_t* mi_page_queue_find_free_ex(mi_heap_t* heap, mi_page_queue_t* p
while (page != NULL)
{
mi_page_t* next = page->next; // remember next
- #if MI_STAT
+ #if MI_STAT
count++;
#endif
@@ -820,11 +825,9 @@ void mi_register_deferred_free(mi_deferred_free_fun* fn, void* arg) mi_attr_noex
----------------------------------------------------------- */
// Large and huge page allocation.
-// Huge pages are allocated directly without being in a queue.
-// Because huge pages contain just one block, and the segment contains
-// just that page, we always treat them as abandoned and any thread
-// that frees the block can free the whole page and segment directly.
-// Huge pages are also use if the requested alignment is very large (> MI_ALIGNMENT_MAX).
+// Huge pages contain just one block, and the segment contains just that page (as `MI_SEGMENT_HUGE`).
+// Huge pages are also use if the requested alignment is very large (> MI_BLOCK_ALIGNMENT_MAX)
+// so their size is not always `> MI_LARGE_OBJ_SIZE_MAX`.
static mi_page_t* mi_large_huge_page_alloc(mi_heap_t* heap, size_t size, size_t page_alignment) {
size_t block_size = _mi_os_good_alloc_size(size);
mi_assert_internal(mi_bin(block_size) == MI_BIN_HUGE || page_alignment > 0);
@@ -832,25 +835,26 @@ static mi_page_t* mi_large_huge_page_alloc(mi_heap_t* heap, size_t size, size_t
#if MI_HUGE_PAGE_ABANDON
mi_page_queue_t* pq = (is_huge ? NULL : mi_page_queue(heap, block_size));
#else
- mi_page_queue_t* pq = mi_page_queue(heap, is_huge ? MI_HUGE_BLOCK_SIZE : block_size); // not block_size as that can be low if the page_alignment > 0
+ mi_page_queue_t* pq = mi_page_queue(heap, is_huge ? MI_LARGE_OBJ_SIZE_MAX+1 : block_size);
mi_assert_internal(!is_huge || mi_page_queue_is_huge(pq));
#endif
mi_page_t* page = mi_page_fresh_alloc(heap, pq, block_size, page_alignment);
if (page != NULL) {
mi_assert_internal(mi_page_immediate_available(page));
-
+
if (is_huge) {
+ mi_assert_internal(mi_page_is_huge(page));
mi_assert_internal(_mi_page_segment(page)->kind == MI_SEGMENT_HUGE);
mi_assert_internal(_mi_page_segment(page)->used==1);
#if MI_HUGE_PAGE_ABANDON
mi_assert_internal(_mi_page_segment(page)->thread_id==0); // abandoned, not in the huge queue
mi_page_set_heap(page, NULL);
- #endif
+ #endif
}
else {
- mi_assert_internal(_mi_page_segment(page)->kind != MI_SEGMENT_HUGE);
+ mi_assert_internal(!mi_page_is_huge(page));
}
-
+
const size_t bsize = mi_page_usable_block_size(page); // note: not `mi_page_block_size` to account for padding
if (bsize <= MI_LARGE_OBJ_SIZE_MAX) {
mi_heap_stat_increase(heap, large, bsize);
@@ -869,9 +873,9 @@ static mi_page_t* mi_large_huge_page_alloc(mi_heap_t* heap, size_t size, size_t
// Note: in debug mode the size includes MI_PADDING_SIZE and might have overflowed.
static mi_page_t* mi_find_page(mi_heap_t* heap, size_t size, size_t huge_alignment) mi_attr_noexcept {
// huge allocation?
- const size_t req_size = size - MI_PADDING_SIZE; // correct for padding_size in case of an overflow on `size`
+ const size_t req_size = size - MI_PADDING_SIZE; // correct for padding_size in case of an overflow on `size`
if mi_unlikely(req_size > (MI_MEDIUM_OBJ_SIZE_MAX - MI_PADDING_SIZE) || huge_alignment > 0) {
- if mi_unlikely(req_size > PTRDIFF_MAX) { // we don't allocate more than PTRDIFF_MAX (see <https://sourceware.org/ml/libc-announce/2019/msg00001.html>)
+ if mi_unlikely(req_size > MI_MAX_ALLOC_SIZE) {
_mi_error_message(EOVERFLOW, "allocation request is too large (%zu bytes)\n", req_size);
return NULL;
}
@@ -882,7 +886,7 @@ static mi_page_t* mi_find_page(mi_heap_t* heap, size_t size, size_t huge_alignme
else {
// otherwise find a page with free blocks in our size segregated queues
#if MI_PADDING
- mi_assert_internal(size >= MI_PADDING_SIZE);
+ mi_assert_internal(size >= MI_PADDING_SIZE);
#endif
return mi_find_free_page(heap, size);
}
@@ -898,7 +902,7 @@ void* _mi_malloc_generic(mi_heap_t* heap, size_t size, bool zero, size_t huge_al
// initialize if necessary
if mi_unlikely(!mi_heap_is_initialized(heap)) {
- heap = mi_heap_get_default(); // calls mi_thread_init
+ heap = mi_heap_get_default(); // calls mi_thread_init
if mi_unlikely(!mi_heap_is_initialized(heap)) { return NULL; }
}
mi_assert_internal(mi_heap_is_initialized(heap));
@@ -926,14 +930,14 @@ void* _mi_malloc_generic(mi_heap_t* heap, size_t size, bool zero, size_t huge_al
mi_assert_internal(mi_page_block_size(page) >= size);
// and try again, this time succeeding! (i.e. this should never recurse through _mi_page_malloc)
- if mi_unlikely(zero && page->xblock_size == 0) {
+ if mi_unlikely(zero && page->block_size == 0) {
// note: we cannot call _mi_page_malloc with zeroing for huge blocks; we zero it afterwards in that case.
- void* p = _mi_page_malloc(heap, page, size, false);
+ void* p = _mi_page_malloc(heap, page, size);
mi_assert_internal(p != NULL);
_mi_memzero_aligned(p, mi_page_usable_block_size(page));
return p;
}
else {
- return _mi_page_malloc(heap, page, size, zero);
+ return _mi_page_malloc_zero(heap, page, size, zero);
}
}
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/emscripten/prim.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/emscripten/prim.c
new file mode 100644
index 0000000..1f60a1b
--- /dev/null
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/emscripten/prim.c
@@ -0,0 +1,244 @@
+/* ----------------------------------------------------------------------------
+Copyright (c) 2018-2023, Microsoft Research, Daan Leijen, Alon Zakai
+This is free software; you can redistribute it and/or modify it under the
+terms of the MIT license. A copy of the license can be found in the file
+"LICENSE" at the root of this distribution.
+-----------------------------------------------------------------------------*/
+
+// This file is included in `src/prim/prim.c`
+
+#include "mimalloc.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h"
+
+// Design
+// ======
+//
+// mimalloc is built on top of emmalloc. emmalloc is a minimal allocator on top
+// of sbrk. The reason for having three layers here is that we want mimalloc to
+// be able to allocate and release system memory properly, the same way it would
+// when using VirtualAlloc on Windows or mmap on POSIX, and sbrk is too limited.
+// Specifically, sbrk can only go up and down, and not "skip" over regions, and
+// so we end up either never freeing memory to the system, or we can get stuck
+// with holes.
+//
+// Atm wasm generally does *not* free memory back the system: once grown, we do
+// not shrink back down (https://github.com/WebAssembly/design/issues/1397).
+// However, that is expected to improve
+// (https://github.com/WebAssembly/memory-control/blob/main/proposals/memory-control/Overview.md)
+// and so we do not want to bake those limitations in here.
+//
+// Even without that issue, we want our system allocator to handle holes, that
+// is, it should merge freed regions and allow allocating new content there of
+// the full size, etc., so that we do not waste space. That means that the
+// system allocator really does need to handle the general problem of allocating
+// and freeing variable-sized chunks of memory in a random order, like malloc/
+// free do. And so it makes sense to layer mimalloc on top of such an
+// implementation.
+//
+// emmalloc makes sense for the lower level because it is small and simple while
+// still fully handling merging of holes etc. It is not the most efficient
+// allocator, but our assumption is that mimalloc needs to be fast while the
+// system allocator underneath it is called much less frequently.
+//
+
+//---------------------------------------------
+// init
+//---------------------------------------------
+
+void _mi_prim_mem_init( mi_os_mem_config_t* config) {
+ config->page_size = 64*MI_KiB; // WebAssembly has a fixed page size: 64KiB
+ config->alloc_granularity = 16;
+ config->has_overcommit = false;
+ config->must_free_whole = true;
+ config->has_virtual_reserve = false;
+}
+
+extern void emmalloc_free(void*);
+
+int _mi_prim_free(void* addr, size_t size) {
+ MI_UNUSED(size);
+ emmalloc_free(addr);
+ return 0;
+}
+
+
+//---------------------------------------------
+// Allocation
+//---------------------------------------------
+
+extern void* emmalloc_memalign(size_t alignment, size_t size);
+
+// Note: the `try_alignment` is just a hint and the returned pointer is not guaranteed to be aligned.
+int _mi_prim_alloc(size_t size, size_t try_alignment, bool commit, bool allow_large, bool* is_large, bool* is_zero, void** addr) {
+ MI_UNUSED(try_alignment); MI_UNUSED(allow_large); MI_UNUSED(commit);
+ *is_large = false;
+ // TODO: Track the highest address ever seen; first uses of it are zeroes.
+ // That assumes no one else uses sbrk but us (they could go up,
+ // scribble, and then down), but we could assert on that perhaps.
+ *is_zero = false;
+ // emmalloc has a minimum alignment size.
+ #define MIN_EMMALLOC_ALIGN 8
+ if (try_alignment < MIN_EMMALLOC_ALIGN) {
+ try_alignment = MIN_EMMALLOC_ALIGN;
+ }
+ void* p = emmalloc_memalign(try_alignment, size);
+ *addr = p;
+ if (p == 0) {
+ return ENOMEM;
+ }
+ return 0;
+}
+
+
+//---------------------------------------------
+// Commit/Reset
+//---------------------------------------------
+
+int _mi_prim_commit(void* addr, size_t size, bool* is_zero) {
+ MI_UNUSED(addr); MI_UNUSED(size);
+ // See TODO above.
+ *is_zero = false;
+ return 0;
+}
+
+int _mi_prim_decommit(void* addr, size_t size, bool* needs_recommit) {
+ MI_UNUSED(addr); MI_UNUSED(size);
+ *needs_recommit = false;
+ return 0;
+}
+
+int _mi_prim_reset(void* addr, size_t size) {
+ MI_UNUSED(addr); MI_UNUSED(size);
+ return 0;
+}
+
+int _mi_prim_protect(void* addr, size_t size, bool protect) {
+ MI_UNUSED(addr); MI_UNUSED(size); MI_UNUSED(protect);
+ return 0;
+}
+
+
+//---------------------------------------------
+// Huge pages and NUMA nodes
+//---------------------------------------------
+
+int _mi_prim_alloc_huge_os_pages(void* hint_addr, size_t size, int numa_node, bool* is_zero, void** addr) {
+ MI_UNUSED(hint_addr); MI_UNUSED(size); MI_UNUSED(numa_node);
+ *is_zero = true;
+ *addr = NULL;
+ return ENOSYS;
+}
+
+size_t _mi_prim_numa_node(void) {
+ return 0;
+}
+
+size_t _mi_prim_numa_node_count(void) {
+ return 1;
+}
+
+
+//----------------------------------------------------------------
+// Clock
+//----------------------------------------------------------------
+
+#include <emscripten/html5.h>
+
+mi_msecs_t _mi_prim_clock_now(void) {
+ return emscripten_date_now();
+}
+
+
+//----------------------------------------------------------------
+// Process info
+//----------------------------------------------------------------
+
+void _mi_prim_process_info(mi_process_info_t* pinfo)
+{
+ // use defaults
+ MI_UNUSED(pinfo);
+}
+
+
+//----------------------------------------------------------------
+// Output
+//----------------------------------------------------------------
+
+#include <emscripten/console.h>
+
+void _mi_prim_out_stderr( const char* msg) {
+ emscripten_console_error(msg);
+}
+
+
+//----------------------------------------------------------------
+// Environment
+//----------------------------------------------------------------
+
+bool _mi_prim_getenv(const char* name, char* result, size_t result_size) {
+ // For code size reasons, do not support environ customization for now.
+ MI_UNUSED(name);
+ MI_UNUSED(result);
+ MI_UNUSED(result_size);
+ return false;
+}
+
+
+//----------------------------------------------------------------
+// Random
+//----------------------------------------------------------------
+
+bool _mi_prim_random_buf(void* buf, size_t buf_len) {
+ int err = getentropy(buf, buf_len);
+ return !err;
+}
+
+
+//----------------------------------------------------------------
+// Thread init/done
+//----------------------------------------------------------------
+
+#ifdef __EMSCRIPTEN_SHARED_MEMORY__
+
+// use pthread local storage keys to detect thread ending
+// (and used with MI_TLS_PTHREADS for the default heap)
+pthread_key_t _mi_heap_default_key = (pthread_key_t)(-1);
+
+static void mi_pthread_done(void* value) {
+ if (value!=NULL) {
+ _mi_thread_done((mi_heap_t*)value);
+ }
+}
+
+void _mi_prim_thread_init_auto_done(void) {
+ mi_assert_internal(_mi_heap_default_key == (pthread_key_t)(-1));
+ pthread_key_create(&_mi_heap_default_key, &mi_pthread_done);
+}
+
+void _mi_prim_thread_done_auto_done(void) {
+ // nothing to do
+}
+
+void _mi_prim_thread_associate_default_heap(mi_heap_t* heap) {
+ if (_mi_heap_default_key != (pthread_key_t)(-1)) { // can happen during recursive invocation on freeBSD
+ pthread_setspecific(_mi_heap_default_key, heap);
+ }
+}
+
+#else
+
+void _mi_prim_thread_init_auto_done(void) {
+ // nothing
+}
+
+void _mi_prim_thread_done_auto_done(void) {
+ // nothing
+}
+
+void _mi_prim_thread_associate_default_heap(mi_heap_t* heap) {
+ MI_UNUSED(heap);
+
+}
+#endif
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/osx/alloc-override-zone.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/osx/alloc-override-zone.c
index 0e0a99d..9a31775 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/osx/alloc-override-zone.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/osx/alloc-override-zone.c
@@ -225,7 +225,9 @@ static malloc_zone_t mi_malloc_zone = {
// switch to version 9+ on OSX 10.6 to support memalign.
.memalign = &zone_memalign,
.free_definite_size = &zone_free_definite_size,
+ #if defined(MAC_OS_X_VERSION_10_7) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7)
.pressure_relief = &zone_pressure_relief,
+ #endif
#if defined(MAC_OS_X_VERSION_10_14) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_14)
.claimed_address = &zone_claimed_address,
#endif
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/prim.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/prim.c
index 9a597d8..3b7d373 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/prim.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/prim.c
@@ -18,6 +18,9 @@ terms of the MIT license. A copy of the license can be found in the file
#define MI_USE_SBRK
#include "wasi/prim.c" // memory-grow or sbrk (Wasm)
+#elif defined(__EMSCRIPTEN__)
+#include "emscripten/prim.c" // emmalloc_*, + pthread support
+
#else
#include "unix/prim.c" // mmap() (Linux, macOSX, BSD, Illumnos, Haiku, DragonFly, etc.)
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/unix/prim.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/unix/prim.c
index 314281f..8d40536 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/unix/prim.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/unix/prim.c
@@ -27,19 +27,26 @@ terms of the MIT license. A copy of the license can be found in the file
#include <sys/mman.h> // mmap
#include <unistd.h> // sysconf
-
+#include <fcntl.h> // open, close, read, access
+
#if defined(__linux__)
#include <features.h>
- #include <fcntl.h>
+ #if defined(MI_NO_THP)
+ #include <sys/prctl.h>
+ #endif
#if defined(__GLIBC__)
#include <linux/mman.h> // linux mmap flags
#else
#include <sys/mman.h>
#endif
#elif defined(__APPLE__)
+ #include <AvailabilityMacros.h>
#include <TargetConditionals.h>
- #if !TARGET_IOS_IPHONE && !TARGET_IOS_SIMULATOR
- #include <mach/vm_statistics.h>
+ #if !defined(TARGET_OS_OSX) || TARGET_OS_OSX // see issue #879, used to be (!TARGET_IOS_IPHONE && !TARGET_IOS_SIMULATOR)
+ #include <mach/vm_statistics.h> // VM_MAKE_TAG, VM_FLAGS_SUPERPAGE_SIZE_2MB, etc.
+ #endif
+ #if !defined(MAC_OS_X_VERSION_10_7)
+ #define MAC_OS_X_VERSION_10_7 1070
#endif
#elif defined(__FreeBSD__) || defined(__DragonFly__)
#include <sys/param.h>
@@ -50,17 +57,19 @@ terms of the MIT license. A copy of the license can be found in the file
#include <sys/sysctl.h>
#endif
-#if !defined(__HAIKU__) && !defined(__APPLE__) && !defined(__CYGWIN__)
+#if !defined(__HAIKU__) && !defined(__APPLE__) && !defined(__CYGWIN__) && !defined(__OpenBSD__) && !defined(__sun)
#define MI_HAS_SYSCALL_H
#include <sys/syscall.h>
#endif
+
//------------------------------------------------------------------------------------
// Use syscalls for some primitives to allow for libraries that override open/read/close etc.
// and do allocation themselves; using syscalls prevents recursion when mimalloc is
// still initializing (issue #713)
//------------------------------------------------------------------------------------
+
#if defined(MI_HAS_SYSCALL_H) && defined(SYS_open) && defined(SYS_close) && defined(SYS_read) && defined(SYS_access)
static int mi_prim_open(const char* fpath, int open_flags) {
@@ -76,7 +85,8 @@ static int mi_prim_access(const char *fpath, int mode) {
return syscall(SYS_access,fpath,mode);
}
-#elif !defined(__APPLE__) // avoid unused warnings
+#elif !defined(__sun) && \
+ (!defined(__APPLE__) || (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7)) // avoid unused warnings on macOS and Solaris
static int mi_prim_open(const char* fpath, int open_flags) {
return open(fpath,open_flags);
@@ -125,7 +135,8 @@ static bool unix_detect_overcommit(void) {
return os_overcommit;
}
-void _mi_prim_mem_init( mi_os_mem_config_t* config ) {
+void _mi_prim_mem_init( mi_os_mem_config_t* config )
+{
long psize = sysconf(_SC_PAGESIZE);
if (psize > 0) {
config->page_size = (size_t)psize;
@@ -135,6 +146,24 @@ void _mi_prim_mem_init( mi_os_mem_config_t* config ) {
config->has_overcommit = unix_detect_overcommit();
config->must_free_whole = false; // mmap can free in parts
config->has_virtual_reserve = true; // todo: check if this true for NetBSD? (for anonymous mmap with PROT_NONE)
+
+ // disable transparent huge pages for this process?
+ #if (defined(__linux__) || defined(__ANDROID__)) && defined(PR_GET_THP_DISABLE)
+ #if defined(MI_NO_THP)
+ if (true)
+ #else
+ if (!mi_option_is_enabled(mi_option_allow_large_os_pages)) // disable THP also if large OS pages are not allowed in the options
+ #endif
+ {
+ int val = 0;
+ if (prctl(PR_GET_THP_DISABLE, &val, 0, 0, 0) != 0) {
+ // Most likely since distros often come with always/madvise settings.
+ val = 1;
+ // Disabling only for mimalloc process rather than touching system wide settings
+ (void)prctl(PR_SET_THP_DISABLE, &val, 0, 0, 0);
+ }
+ }
+ #endif
}
@@ -276,7 +305,7 @@ static void* unix_mmap(void* addr, size_t size, size_t try_alignment, int protec
*is_large = true;
p = unix_mmap_prim(addr, size, try_alignment, protect_flags, lflags, lfd);
#ifdef MAP_HUGE_1GB
- if (p == NULL && (lflags & MAP_HUGE_1GB) != 0) {
+ if (p == NULL && (lflags & MAP_HUGE_1GB) == MAP_HUGE_1GB) {
mi_huge_pages_available = false; // don't try huge 1GiB pages again
_mi_warning_message("unable to allocate huge (1GiB) page, trying large (2MiB) pages instead (errno: %i)\n", errno);
lflags = ((lflags & ~MAP_HUGE_1GB) | MAP_HUGE_2MB);
@@ -310,7 +339,7 @@ static void* unix_mmap(void* addr, size_t size, size_t try_alignment, int protec
#elif defined(__sun)
if (allow_large && _mi_os_use_large_page(size, try_alignment)) {
struct memcntl_mha cmd = {0};
- cmd.mha_pagesize = large_os_page_size;
+ cmd.mha_pagesize = _mi_os_large_page_size();
cmd.mha_cmd = MHA_MAPSIZE_VA;
if (memcntl((caddr_t)p, size, MC_HAT_ADVISE, (caddr_t)&cmd, 0, 0) == 0) {
*is_large = true;
@@ -472,8 +501,6 @@ int _mi_prim_alloc_huge_os_pages(void* hint_addr, size_t size, int numa_node, bo
#if defined(__linux__)
-#include <stdio.h> // snprintf
-
size_t _mi_prim_numa_node(void) {
#if defined(MI_HAS_SYSCALL_H) && defined(SYS_getcpu)
unsigned long node = 0;
@@ -491,7 +518,7 @@ size_t _mi_prim_numa_node_count(void) {
unsigned node = 0;
for(node = 0; node < 256; node++) {
// enumerate node entries -- todo: it there a more efficient way to do this? (but ensure there is no allocation)
- snprintf(buf, 127, "/sys/devices/system/node/node%u", node + 1);
+ _mi_snprintf(buf, 127, "/sys/devices/system/node/node%u", node + 1);
if (mi_prim_access(buf,R_OK) != 0) break;
}
return (node+1);
@@ -729,28 +756,20 @@ bool _mi_prim_getenv(const char* name, char* result, size_t result_size) {
// Random
//----------------------------------------------------------------
-#if defined(__APPLE__)
-
-#include <AvailabilityMacros.h>
-#if defined(MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_10
+#if defined(__APPLE__) && defined(MAC_OS_X_VERSION_10_15) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_15)
#include <CommonCrypto/CommonCryptoError.h>
#include <CommonCrypto/CommonRandom.h>
-#endif
+
bool _mi_prim_random_buf(void* buf, size_t buf_len) {
- #if defined(MAC_OS_X_VERSION_10_15) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_15
- // We prefere CCRandomGenerateBytes as it returns an error code while arc4random_buf
- // may fail silently on macOS. See PR #390, and <https://opensource.apple.com/source/Libc/Libc-1439.40.11/gen/FreeBSD/arc4random.c.auto.html>
- return (CCRandomGenerateBytes(buf, buf_len) == kCCSuccess);
- #else
- // fall back on older macOS
- arc4random_buf(buf, buf_len);
- return true;
- #endif
+ // We prefere CCRandomGenerateBytes as it returns an error code while arc4random_buf
+ // may fail silently on macOS. See PR #390, and <https://opensource.apple.com/source/Libc/Libc-1439.40.11/gen/FreeBSD/arc4random.c.auto.html>
+ return (CCRandomGenerateBytes(buf, buf_len) == kCCSuccess);
}
#elif defined(__ANDROID__) || defined(__DragonFly__) || \
defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
- defined(__sun)
+ defined(__sun) || \
+ (defined(__APPLE__) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7))
#include <stdlib.h>
bool _mi_prim_random_buf(void* buf, size_t buf_len) {
@@ -758,11 +777,10 @@ bool _mi_prim_random_buf(void* buf, size_t buf_len) {
return true;
}
-#elif defined(__linux__) || defined(__HAIKU__)
+#elif defined(__APPLE__) || defined(__linux__) || defined(__HAIKU__) // also for old apple versions < 10.7 (issue #829)
#include <sys/types.h>
#include <sys/stat.h>
-#include <fcntl.h>
#include <errno.h>
bool _mi_prim_random_buf(void* buf, size_t buf_len) {
@@ -833,7 +851,9 @@ void _mi_prim_thread_init_auto_done(void) {
}
void _mi_prim_thread_done_auto_done(void) {
- // nothing to do
+ if (_mi_heap_default_key != (pthread_key_t)(-1)) { // do not leak the key, see issue #809
+ pthread_key_delete(_mi_heap_default_key);
+ }
}
void _mi_prim_thread_associate_default_heap(mi_heap_t* heap) {
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/wasi/prim.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/wasi/prim.c
index 50511f0..f74acd2 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/wasi/prim.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/wasi/prim.c
@@ -12,6 +12,9 @@ terms of the MIT license. A copy of the license can be found in the file
#include "mimalloc/atomic.h"
#include "mimalloc/prim.h"
+#include <stdio.h> // fputs
+#include <stdlib.h> // getenv
+
//---------------------------------------------
// Initialize
//---------------------------------------------
@@ -40,6 +43,8 @@ int _mi_prim_free(void* addr, size_t size ) {
//---------------------------------------------
#if defined(MI_USE_SBRK)
+ #include <unistd.h> // for sbrk
+
static void* mi_memory_grow( size_t size ) {
void* p = sbrk(size);
if (p == (void*)(-1)) return NULL;
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/windows/prim.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/windows/prim.c
index e6b6107..2dd7c60 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/windows/prim.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/prim/windows/prim.c
@@ -482,7 +482,7 @@ void _mi_prim_out_stderr( const char* msg )
// on windows with redirection, the C runtime cannot handle locale dependent output
// after the main thread closes so we use direct console output.
if (!_mi_preloading()) {
- // _cputs(msg); // _cputs cannot be used at is aborts if it fails to lock the console
+ // _cputs(msg); // _cputs cannot be used as it aborts when failing to lock the console
static HANDLE hcon = INVALID_HANDLE_VALUE;
static bool hconIsConsole;
if (hcon == INVALID_HANDLE_VALUE) {
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment-map.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment-map.c
index 4c2104b..1efb1e2 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment-map.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment-map.c
@@ -16,7 +16,9 @@ terms of the MIT license. A copy of the license can be found in the file
#include "mimalloc/internal.h"
#include "mimalloc/atomic.h"
-#if (MI_INTPTR_SIZE==8)
+#if (MI_INTPTR_SIZE>=8) && MI_TRACK_ASAN
+#define MI_MAX_ADDRESS ((size_t)140 << 40) // 140TB (see issue #881)
+#elif (MI_INTPTR_SIZE >= 8)
#define MI_MAX_ADDRESS ((size_t)40 << 40) // 40TB (to include huge page areas)
#else
#define MI_MAX_ADDRESS ((size_t)2 << 30) // 2Gb
@@ -29,6 +31,7 @@ terms of the MIT license. A copy of the license can be found in the file
static _Atomic(uintptr_t) mi_segment_map[MI_SEGMENT_MAP_WSIZE + 1]; // 2KiB per TB with 64MiB segments
static size_t mi_segment_map_index_of(const mi_segment_t* segment, size_t* bitidx) {
+ // note: segment can be invalid or NULL.
mi_assert_internal(_mi_ptr_segment(segment + 1) == segment); // is it aligned on MI_SEGMENT_SIZE?
if ((uintptr_t)segment >= MI_MAX_ADDRESS) {
*bitidx = 0;
@@ -70,8 +73,7 @@ void _mi_segment_map_freed_at(const mi_segment_t* segment) {
// Determine the segment belonging to a pointer or NULL if it is not in a valid segment.
static mi_segment_t* _mi_segment_of(const void* p) {
if (p == NULL) return NULL;
- mi_segment_t* segment = _mi_ptr_segment(p);
- mi_assert_internal(segment != NULL);
+ mi_segment_t* segment = _mi_ptr_segment(p); // segment can be NULL
size_t bitidx;
size_t index = mi_segment_map_index_of(segment, &bitidx);
// fast path: for any pointer to valid small/medium/large object or first MI_SEGMENT_SIZE in huge
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment.c
index 28685f2..9ac22f1 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/segment.c
@@ -1,5 +1,5 @@
/* ----------------------------------------------------------------------------
-Copyright (c) 2018-2020, Microsoft Research, Daan Leijen
+Copyright (c) 2018-2024, Microsoft Research, Daan Leijen
This is free software; you can redistribute it and/or modify it under the
terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
@@ -11,13 +11,17 @@ terms of the MIT license. A copy of the license can be found in the file
#include <string.h> // memset
#include <stdio.h>
-#define MI_PAGE_HUGE_ALIGN (256*1024)
+// -------------------------------------------------------------------
+// Segments
+// mimalloc pages reside in segments. See `mi_segment_valid` for invariants.
+// -------------------------------------------------------------------
+
static void mi_segment_try_purge(mi_segment_t* segment, bool force, mi_stats_t* stats);
// -------------------------------------------------------------------
-// commit mask
+// commit mask
// -------------------------------------------------------------------
static bool mi_commit_mask_all_set(const mi_commit_mask_t* commit, const mi_commit_mask_t* cm) {
@@ -146,10 +150,6 @@ size_t _mi_commit_mask_next_run(const mi_commit_mask_t* cm, size_t* idx) {
/* --------------------------------------------------------------------------------
Segment allocation
-
- If a thread ends, it "abandons" pages with used blocks
- and there is an abandoned segment list whose segments can
- be reclaimed by still running threads, much like work-stealing.
-------------------------------------------------------------------------------- */
@@ -212,7 +212,7 @@ static void mi_span_queue_push(mi_span_queue_t* sq, mi_slice_t* slice) {
sq->first = slice;
if (slice->next != NULL) slice->next->prev = slice;
else sq->last = slice;
- slice->xblock_size = 0; // free
+ slice->block_size = 0; // free
}
static mi_span_queue_t* mi_span_queue_for(size_t slice_count, mi_segments_tld_t* tld) {
@@ -223,7 +223,7 @@ static mi_span_queue_t* mi_span_queue_for(size_t slice_count, mi_segments_tld_t*
}
static void mi_span_queue_delete(mi_span_queue_t* sq, mi_slice_t* slice) {
- mi_assert_internal(slice->xblock_size==0 && slice->slice_count>0 && slice->slice_offset==0);
+ mi_assert_internal(slice->block_size==0 && slice->slice_count>0 && slice->slice_offset==0);
// should work too if the queue does not contain slice (which can happen during reclaim)
if (slice->prev != NULL) slice->prev->next = slice->next;
if (slice == sq->first) sq->first = slice->next;
@@ -231,7 +231,7 @@ static void mi_span_queue_delete(mi_span_queue_t* sq, mi_slice_t* slice) {
if (slice == sq->last) sq->last = slice->prev;
slice->prev = NULL;
slice->next = NULL;
- slice->xblock_size = 1; // no more free
+ slice->block_size = 1; // no more free
}
@@ -240,7 +240,7 @@ static void mi_span_queue_delete(mi_span_queue_t* sq, mi_slice_t* slice) {
----------------------------------------------------------- */
static bool mi_slice_is_used(const mi_slice_t* slice) {
- return (slice->xblock_size > 0);
+ return (slice->block_size > 0);
}
@@ -268,19 +268,20 @@ static bool mi_segment_is_valid(mi_segment_t* segment, mi_segments_tld_t* tld) {
mi_assert_internal(slice->slice_offset == 0);
size_t index = mi_slice_index(slice);
size_t maxindex = (index + slice->slice_count >= segment->slice_entries ? segment->slice_entries : index + slice->slice_count) - 1;
- if (mi_slice_is_used(slice)) { // a page in use, we need at least MAX_SLICE_OFFSET valid back offsets
+ if (mi_slice_is_used(slice)) { // a page in use, we need at least MAX_SLICE_OFFSET_COUNT valid back offsets
used_count++;
- for (size_t i = 0; i <= MI_MAX_SLICE_OFFSET && index + i <= maxindex; i++) {
+ mi_assert_internal(slice->is_huge == (segment->kind == MI_SEGMENT_HUGE));
+ for (size_t i = 0; i <= MI_MAX_SLICE_OFFSET_COUNT && index + i <= maxindex; i++) {
mi_assert_internal(segment->slices[index + i].slice_offset == i*sizeof(mi_slice_t));
mi_assert_internal(i==0 || segment->slices[index + i].slice_count == 0);
- mi_assert_internal(i==0 || segment->slices[index + i].xblock_size == 1);
+ mi_assert_internal(i==0 || segment->slices[index + i].block_size == 1);
}
// and the last entry as well (for coalescing)
const mi_slice_t* last = slice + slice->slice_count - 1;
if (last > slice && last < mi_segment_slices_end(segment)) {
mi_assert_internal(last->slice_offset == (slice->slice_count-1)*sizeof(mi_slice_t));
mi_assert_internal(last->slice_count == 0);
- mi_assert_internal(last->xblock_size == 1);
+ mi_assert_internal(last->block_size == 1);
}
}
else { // free range of slices; only last slice needs a valid back offset
@@ -289,7 +290,7 @@ static bool mi_segment_is_valid(mi_segment_t* segment, mi_segments_tld_t* tld) {
mi_assert_internal((uint8_t*)slice == (uint8_t*)last - last->slice_offset);
}
mi_assert_internal(slice == last || last->slice_count == 0 );
- mi_assert_internal(last->xblock_size == 0 || (segment->kind==MI_SEGMENT_HUGE && last->xblock_size==1));
+ mi_assert_internal(last->block_size == 0 || (segment->kind==MI_SEGMENT_HUGE && last->block_size==1));
if (segment->kind != MI_SEGMENT_HUGE && segment->thread_id != 0) { // segment is not huge or abandoned
sq = mi_span_queue_for(slice->slice_count,tld);
mi_assert_internal(mi_span_queue_contains(sq,slice));
@@ -311,28 +312,36 @@ static size_t mi_segment_info_size(mi_segment_t* segment) {
return segment->segment_info_slices * MI_SEGMENT_SLICE_SIZE;
}
-static uint8_t* _mi_segment_page_start_from_slice(const mi_segment_t* segment, const mi_slice_t* slice, size_t xblock_size, size_t* page_size)
+static uint8_t* _mi_segment_page_start_from_slice(const mi_segment_t* segment, const mi_slice_t* slice, size_t block_size, size_t* page_size)
{
- ptrdiff_t idx = slice - segment->slices;
- size_t psize = (size_t)slice->slice_count * MI_SEGMENT_SLICE_SIZE;
+ const ptrdiff_t idx = slice - segment->slices;
+ const size_t psize = (size_t)slice->slice_count * MI_SEGMENT_SLICE_SIZE;
+ uint8_t* const pstart = (uint8_t*)segment + (idx*MI_SEGMENT_SLICE_SIZE);
// make the start not OS page aligned for smaller blocks to avoid page/cache effects
- // note: the offset must always be an xblock_size multiple since we assume small allocations
+ // note: the offset must always be a block_size multiple since we assume small allocations
// are aligned (see `mi_heap_malloc_aligned`).
size_t start_offset = 0;
- if (xblock_size >= MI_INTPTR_SIZE) {
- if (xblock_size <= 64) { start_offset = 3*xblock_size; }
- else if (xblock_size <= 512) { start_offset = xblock_size; }
+ if (block_size > 0 && block_size <= MI_MAX_ALIGN_GUARANTEE) {
+ // for small objects, ensure the page start is aligned with the block size (PR#66 by kickunderscore)
+ const size_t adjust = block_size - ((uintptr_t)pstart % block_size);
+ if (adjust < block_size && psize >= block_size + adjust) {
+ start_offset += adjust;
+ }
+ }
+ if (block_size >= MI_INTPTR_SIZE) {
+ if (block_size <= 64) { start_offset += 3*block_size; }
+ else if (block_size <= 512) { start_offset += block_size; }
}
if (page_size != NULL) { *page_size = psize - start_offset; }
- return (uint8_t*)segment + ((idx*MI_SEGMENT_SLICE_SIZE) + start_offset);
+ return (pstart + start_offset);
}
// Start of the page available memory; can be used on uninitialized pages
uint8_t* _mi_segment_page_start(const mi_segment_t* segment, const mi_page_t* page, size_t* page_size)
{
const mi_slice_t* slice = mi_page_to_slice((mi_page_t*)page);
- uint8_t* p = _mi_segment_page_start_from_slice(segment, slice, page->xblock_size, page_size);
- mi_assert_internal(page->xblock_size > 0 || _mi_ptr_page(p) == page);
+ uint8_t* p = _mi_segment_page_start_from_slice(segment, slice, mi_page_block_size(page), page_size);
+ mi_assert_internal(mi_page_block_size(page) > 0 || _mi_ptr_page(p) == page);
mi_assert_internal(_mi_ptr_segment(p) == segment);
return p;
}
@@ -342,7 +351,7 @@ static size_t mi_segment_calculate_slices(size_t required, size_t* pre_size, siz
size_t page_size = _mi_os_page_size();
size_t isize = _mi_align_up(sizeof(mi_segment_t), page_size);
size_t guardsize = 0;
-
+
if (MI_SECURE>0) {
// in secure mode, we set up a protected page in between the segment info
// and the page data (and one at the end of the segment)
@@ -355,7 +364,7 @@ static size_t mi_segment_calculate_slices(size_t required, size_t* pre_size, siz
if (pre_size != NULL) *pre_size = isize;
isize = _mi_align_up(isize + guardsize, MI_SEGMENT_SLICE_SIZE);
if (info_slices != NULL) *info_slices = isize / MI_SEGMENT_SLICE_SIZE;
- size_t segment_size = (required==0 ? MI_SEGMENT_SIZE : _mi_align_up( required + isize + guardsize, MI_SEGMENT_SLICE_SIZE) );
+ size_t segment_size = (required==0 ? MI_SEGMENT_SIZE : _mi_align_up( required + isize + guardsize, MI_SEGMENT_SLICE_SIZE) );
mi_assert_internal(segment_size % MI_SEGMENT_SLICE_SIZE == 0);
return (segment_size / MI_SEGMENT_SLICE_SIZE);
}
@@ -380,6 +389,10 @@ static void mi_segment_os_free(mi_segment_t* segment, mi_segments_tld_t* tld) {
segment->thread_id = 0;
_mi_segment_map_freed_at(segment);
mi_segments_track_size(-((long)mi_segment_size(segment)),tld);
+ if (segment->was_reclaimed) {
+ tld->reclaim_count--;
+ segment->was_reclaimed = false;
+ }
if (MI_SECURE>0) {
// _mi_os_unprotect(segment, mi_segment_size(segment)); // ensure no more guard pages are set
// unprotect the guard pages; we cannot just unprotect the whole segment size as part may be decommitted
@@ -391,7 +404,7 @@ static void mi_segment_os_free(mi_segment_t* segment, mi_segments_tld_t* tld) {
// purge delayed decommits now? (no, leave it to the arena)
// mi_segment_try_purge(segment,true,tld->stats);
-
+
const size_t size = mi_segment_size(segment);
const size_t csize = _mi_commit_mask_committed_size(&segment->commit_mask, size);
@@ -399,13 +412,6 @@ static void mi_segment_os_free(mi_segment_t* segment, mi_segments_tld_t* tld) {
_mi_arena_free(segment, mi_segment_size(segment), csize, segment->memid, tld->stats);
}
-// called by threads that are terminating
-void _mi_segment_thread_collect(mi_segments_tld_t* tld) {
- MI_UNUSED(tld);
- // nothing to do
-}
-
-
/* -----------------------------------------------------------
Commit/Decommit ranges
----------------------------------------------------------- */
@@ -451,7 +457,7 @@ static void mi_segment_commit_mask(mi_segment_t* segment, bool conservative, uin
size_t bitidx = start / MI_COMMIT_SIZE;
mi_assert_internal(bitidx < MI_COMMIT_MASK_BITS);
-
+
size_t bitcount = *full_size / MI_COMMIT_SIZE; // can be 0
if (bitidx + bitcount > MI_COMMIT_MASK_BITS) {
_mi_warning_message("commit mask overflow: idx=%zu count=%zu start=%zx end=%zx p=0x%p size=%zu fullsize=%zu\n", bitidx, bitcount, start, end, p, size, *full_size);
@@ -479,7 +485,7 @@ static bool mi_segment_commit(mi_segment_t* segment, uint8_t* p, size_t size, mi
if (!_mi_os_commit(start, full_size, &is_zero, stats)) return false;
mi_commit_mask_set(&segment->commit_mask, &mask);
}
-
+
// increase purge expiration when using part of delayed purges -- we assume more allocations are coming soon.
if (mi_commit_mask_any_set(&segment->purge_mask, &mask)) {
segment->purge_expire = _mi_clock_now() + mi_option_get(mi_option_purge_delay);
@@ -498,7 +504,7 @@ static bool mi_segment_ensure_committed(mi_segment_t* segment, uint8_t* p, size_
return mi_segment_commit(segment, p, size, stats);
}
-static bool mi_segment_purge(mi_segment_t* segment, uint8_t* p, size_t size, mi_stats_t* stats) {
+static bool mi_segment_purge(mi_segment_t* segment, uint8_t* p, size_t size, mi_stats_t* stats) {
mi_assert_internal(mi_commit_mask_all_set(&segment->commit_mask, &segment->purge_mask));
if (!segment->allow_purge) return true;
@@ -517,11 +523,11 @@ static bool mi_segment_purge(mi_segment_t* segment, uint8_t* p, size_t size, mi_
if (decommitted) {
mi_commit_mask_t cmask;
mi_commit_mask_create_intersect(&segment->commit_mask, &mask, &cmask);
- _mi_stat_increase(&_mi_stats_main.committed, full_size - _mi_commit_mask_committed_size(&cmask, MI_SEGMENT_SIZE)); // adjust for double counting
+ _mi_stat_increase(&_mi_stats_main.committed, full_size - _mi_commit_mask_committed_size(&cmask, MI_SEGMENT_SIZE)); // adjust for double counting
mi_commit_mask_clear(&segment->commit_mask, &mask);
- }
+ }
}
-
+
// always clear any scheduled purges in our range
mi_commit_mask_clear(&segment->purge_mask, &mask);
return true;
@@ -537,16 +543,16 @@ static void mi_segment_schedule_purge(mi_segment_t* segment, uint8_t* p, size_t
// register for future purge in the purge mask
uint8_t* start = NULL;
size_t full_size = 0;
- mi_commit_mask_t mask;
+ mi_commit_mask_t mask;
mi_segment_commit_mask(segment, true /*conservative*/, p, size, &start, &full_size, &mask);
if (mi_commit_mask_is_empty(&mask) || full_size==0) return;
-
+
// update delayed commit
- mi_assert_internal(segment->purge_expire > 0 || mi_commit_mask_is_empty(&segment->purge_mask));
+ mi_assert_internal(segment->purge_expire > 0 || mi_commit_mask_is_empty(&segment->purge_mask));
mi_commit_mask_t cmask;
mi_commit_mask_create_intersect(&segment->commit_mask, &mask, &cmask); // only purge what is committed; span_free may try to decommit more
mi_commit_mask_set(&segment->purge_mask, &cmask);
- mi_msecs_t now = _mi_clock_now();
+ mi_msecs_t now = _mi_clock_now();
if (segment->purge_expire == 0) {
// no previous purgess, initialize now
segment->purge_expire = now + mi_option_get(mi_option_purge_delay);
@@ -564,11 +570,11 @@ static void mi_segment_schedule_purge(mi_segment_t* segment, uint8_t* p, size_t
// previous purge mask is not yet expired, increase the expiration by a bit.
segment->purge_expire += mi_option_get(mi_option_purge_extend_delay);
}
- }
+ }
}
static void mi_segment_try_purge(mi_segment_t* segment, bool force, mi_stats_t* stats) {
- if (!segment->allow_purge || mi_commit_mask_is_empty(&segment->purge_mask)) return;
+ if (!segment->allow_purge || segment->purge_expire == 0 || mi_commit_mask_is_empty(&segment->purge_mask)) return;
mi_msecs_t now = _mi_clock_now();
if (!force && now < segment->purge_expire) return;
@@ -590,19 +596,24 @@ static void mi_segment_try_purge(mi_segment_t* segment, bool force, mi_stats_t*
mi_assert_internal(mi_commit_mask_is_empty(&segment->purge_mask));
}
+// called from `mi_heap_collect_ex`
+// this can be called per-page so it is important that try_purge has fast exit path
+void _mi_segment_collect(mi_segment_t* segment, bool force, mi_segments_tld_t* tld) {
+ mi_segment_try_purge(segment, force, tld->stats);
+}
/* -----------------------------------------------------------
Span free
----------------------------------------------------------- */
static bool mi_segment_is_abandoned(mi_segment_t* segment) {
- return (segment->thread_id == 0);
+ return (mi_atomic_load_relaxed(&segment->thread_id) == 0);
}
// note: can be called on abandoned segments
static void mi_segment_span_free(mi_segment_t* segment, size_t slice_index, size_t slice_count, bool allow_purge, mi_segments_tld_t* tld) {
mi_assert_internal(slice_index < segment->slice_entries);
- mi_span_queue_t* sq = (segment->kind == MI_SEGMENT_HUGE || mi_segment_is_abandoned(segment)
+ mi_span_queue_t* sq = (segment->kind == MI_SEGMENT_HUGE || mi_segment_is_abandoned(segment)
? NULL : mi_span_queue_for(slice_count,tld));
if (slice_count==0) slice_count = 1;
mi_assert_internal(slice_index + slice_count - 1 < segment->slice_entries);
@@ -616,17 +627,17 @@ static void mi_segment_span_free(mi_segment_t* segment, size_t slice_index, size
mi_slice_t* last = &segment->slices[slice_index + slice_count - 1];
last->slice_count = 0;
last->slice_offset = (uint32_t)(sizeof(mi_page_t)*(slice_count - 1));
- last->xblock_size = 0;
+ last->block_size = 0;
}
// perhaps decommit
if (allow_purge) {
mi_segment_schedule_purge(segment, mi_slice_start(slice), slice_count * MI_SEGMENT_SLICE_SIZE, tld->stats);
}
-
+
// and push it on the free page queue (if it was not a huge page)
if (sq != NULL) mi_span_queue_push( sq, slice );
- else slice->xblock_size = 0; // mark huge page as free anyways
+ else slice->block_size = 0; // mark huge page as free anyways
}
/*
@@ -640,7 +651,7 @@ static void mi_segment_span_add_free(mi_slice_t* slice, mi_segments_tld_t* tld)
*/
static void mi_segment_span_remove_from_queue(mi_slice_t* slice, mi_segments_tld_t* tld) {
- mi_assert_internal(slice->slice_count > 0 && slice->slice_offset==0 && slice->xblock_size==0);
+ mi_assert_internal(slice->slice_count > 0 && slice->slice_offset==0 && slice->block_size==0);
mi_assert_internal(_mi_ptr_segment(slice)->kind != MI_SEGMENT_HUGE);
mi_span_queue_t* sq = mi_span_queue_for(slice->slice_count, tld);
mi_span_queue_delete(sq, slice);
@@ -649,15 +660,15 @@ static void mi_segment_span_remove_from_queue(mi_slice_t* slice, mi_segments_tld
// note: can be called on abandoned segments
static mi_slice_t* mi_segment_span_free_coalesce(mi_slice_t* slice, mi_segments_tld_t* tld) {
mi_assert_internal(slice != NULL && slice->slice_count > 0 && slice->slice_offset == 0);
- mi_segment_t* segment = _mi_ptr_segment(slice);
- bool is_abandoned = mi_segment_is_abandoned(segment);
+ mi_segment_t* const segment = _mi_ptr_segment(slice);
+ const bool is_abandoned = (segment->thread_id == 0); // mi_segment_is_abandoned(segment);
// for huge pages, just mark as free but don't add to the queues
if (segment->kind == MI_SEGMENT_HUGE) {
// issue #691: segment->used can be 0 if the huge page block was freed while abandoned (reclaim will get here in that case)
- mi_assert_internal((segment->used==0 && slice->xblock_size==0) || segment->used == 1); // decreased right after this call in `mi_segment_page_clear`
- slice->xblock_size = 0; // mark as free anyways
- // we should mark the last slice `xblock_size=0` now to maintain invariants but we skip it to
+ mi_assert_internal((segment->used==0 && slice->block_size==0) || segment->used == 1); // decreased right after this call in `mi_segment_page_clear`
+ slice->block_size = 0; // mark as free anyways
+ // we should mark the last slice `xblock_size=0` now to maintain invariants but we skip it to
// avoid a possible cache miss (and the segment is about to be freed)
return slice;
}
@@ -666,7 +677,7 @@ static mi_slice_t* mi_segment_span_free_coalesce(mi_slice_t* slice, mi_segments_
size_t slice_count = slice->slice_count;
mi_slice_t* next = slice + slice->slice_count;
mi_assert_internal(next <= mi_segment_slices_end(segment));
- if (next < mi_segment_slices_end(segment) && next->xblock_size==0) {
+ if (next < mi_segment_slices_end(segment) && next->block_size==0) {
// free next block -- remove it from free and merge
mi_assert_internal(next->slice_count > 0 && next->slice_offset==0);
slice_count += next->slice_count; // extend
@@ -675,7 +686,7 @@ static mi_slice_t* mi_segment_span_free_coalesce(mi_slice_t* slice, mi_segments_
if (slice > segment->slices) {
mi_slice_t* prev = mi_slice_first(slice - 1);
mi_assert_internal(prev >= segment->slices);
- if (prev->xblock_size==0) {
+ if (prev->block_size==0) {
// free previous slice -- remove it from free and merge
mi_assert_internal(prev->slice_count > 0 && prev->slice_offset==0);
slice_count += prev->slice_count;
@@ -699,7 +710,7 @@ static mi_slice_t* mi_segment_span_free_coalesce(mi_slice_t* slice, mi_segments_
static mi_page_t* mi_segment_span_allocate(mi_segment_t* segment, size_t slice_index, size_t slice_count, mi_segments_tld_t* tld) {
mi_assert_internal(slice_index < segment->slice_entries);
mi_slice_t* const slice = &segment->slices[slice_index];
- mi_assert_internal(slice->xblock_size==0 || slice->xblock_size==1);
+ mi_assert_internal(slice->block_size==0 || slice->block_size==1);
// commit before changing the slice data
if (!mi_segment_ensure_committed(segment, _mi_segment_page_start_from_slice(segment, slice, 0, NULL), slice_count * MI_SEGMENT_SLICE_SIZE, tld->stats)) {
@@ -711,20 +722,20 @@ static mi_page_t* mi_segment_span_allocate(mi_segment_t* segment, size_t slice_i
slice->slice_count = (uint32_t)slice_count;
mi_assert_internal(slice->slice_count == slice_count);
const size_t bsize = slice_count * MI_SEGMENT_SLICE_SIZE;
- slice->xblock_size = (uint32_t)(bsize >= MI_HUGE_BLOCK_SIZE ? MI_HUGE_BLOCK_SIZE : bsize);
+ slice->block_size = bsize;
mi_page_t* page = mi_slice_to_page(slice);
mi_assert_internal(mi_page_block_size(page) == bsize);
- // set slice back pointers for the first MI_MAX_SLICE_OFFSET entries
+ // set slice back pointers for the first MI_MAX_SLICE_OFFSET_COUNT entries
size_t extra = slice_count-1;
- if (extra > MI_MAX_SLICE_OFFSET) extra = MI_MAX_SLICE_OFFSET;
+ if (extra > MI_MAX_SLICE_OFFSET_COUNT) extra = MI_MAX_SLICE_OFFSET_COUNT;
if (slice_index + extra >= segment->slice_entries) extra = segment->slice_entries - slice_index - 1; // huge objects may have more slices than avaiable entries in the segment->slices
-
+
mi_slice_t* slice_next = slice + 1;
for (size_t i = 1; i <= extra; i++, slice_next++) {
slice_next->slice_offset = (uint32_t)(sizeof(mi_slice_t)*i);
slice_next->slice_count = 0;
- slice_next->xblock_size = 1;
+ slice_next->block_size = 1;
}
// and also for the last one (if not set already) (the last one is needed for coalescing and for large alignments)
@@ -735,11 +746,12 @@ static mi_page_t* mi_segment_span_allocate(mi_segment_t* segment, size_t slice_i
if (last > slice) {
last->slice_offset = (uint32_t)(sizeof(mi_slice_t) * (last - slice));
last->slice_count = 0;
- last->xblock_size = 1;
+ last->block_size = 1;
}
-
+
// and initialize the page
page->is_committed = true;
+ page->is_huge = (segment->kind == MI_SEGMENT_HUGE);
segment->used++;
return page;
}
@@ -747,7 +759,7 @@ static mi_page_t* mi_segment_span_allocate(mi_segment_t* segment, size_t slice_i
static void mi_segment_slice_split(mi_segment_t* segment, mi_slice_t* slice, size_t slice_count, mi_segments_tld_t* tld) {
mi_assert_internal(_mi_ptr_segment(slice) == segment);
mi_assert_internal(slice->slice_count >= slice_count);
- mi_assert_internal(slice->xblock_size > 0); // no more in free queue
+ mi_assert_internal(slice->block_size > 0); // no more in free queue
if (slice->slice_count <= slice_count) return;
mi_assert_internal(segment->kind != MI_SEGMENT_HUGE);
size_t next_index = mi_slice_index(slice) + slice_count;
@@ -773,7 +785,7 @@ static mi_page_t* mi_segments_page_find_and_allocate(size_t slice_count, mi_aren
if (slice->slice_count > slice_count) {
mi_segment_slice_split(segment, slice, slice_count, tld);
}
- mi_assert_internal(slice != NULL && slice->slice_count == slice_count && slice->xblock_size > 0);
+ mi_assert_internal(slice != NULL && slice->slice_count == slice_count && slice->block_size > 0);
mi_page_t* page = mi_segment_span_allocate(segment, mi_slice_index(slice), slice->slice_count, tld);
if (page == NULL) {
// commit failed; return NULL but first restore the slice
@@ -796,7 +808,7 @@ static mi_page_t* mi_segments_page_find_and_allocate(size_t slice_count, mi_aren
----------------------------------------------------------- */
static mi_segment_t* mi_segment_os_alloc( size_t required, size_t page_alignment, bool eager_delayed, mi_arena_id_t req_arena_id,
- size_t* psegment_slices, size_t* ppre_size, size_t* pinfo_slices,
+ size_t* psegment_slices, size_t* ppre_size, size_t* pinfo_slices,
bool commit, mi_segments_tld_t* tld, mi_os_tld_t* os_tld)
{
@@ -804,7 +816,7 @@ static mi_segment_t* mi_segment_os_alloc( size_t required, size_t page_alignment
bool allow_large = (!eager_delayed && (MI_SECURE == 0)); // only allow large OS pages once we are no longer lazy
size_t align_offset = 0;
size_t alignment = MI_SEGMENT_ALIGN;
-
+
if (page_alignment > 0) {
// mi_assert_internal(huge_page != NULL);
mi_assert_internal(page_alignment >= MI_SEGMENT_ALIGN);
@@ -814,6 +826,7 @@ static mi_segment_t* mi_segment_os_alloc( size_t required, size_t page_alignment
const size_t extra = align_offset - info_size;
// recalculate due to potential guard pages
*psegment_slices = mi_segment_calculate_slices(required + extra, ppre_size, pinfo_slices);
+ mi_assert_internal(*psegment_slices > 0 && *psegment_slices <= UINT32_MAX);
}
const size_t segment_size = (*psegment_slices) * MI_SEGMENT_SLICE_SIZE;
@@ -822,21 +835,21 @@ static mi_segment_t* mi_segment_os_alloc( size_t required, size_t page_alignment
return NULL; // failed to allocate
}
- // ensure metadata part of the segment is committed
- mi_commit_mask_t commit_mask;
- if (memid.initially_committed) {
- mi_commit_mask_create_full(&commit_mask);
+ // ensure metadata part of the segment is committed
+ mi_commit_mask_t commit_mask;
+ if (memid.initially_committed) {
+ mi_commit_mask_create_full(&commit_mask);
}
- else {
+ else {
// at least commit the info slices
const size_t commit_needed = _mi_divide_up((*pinfo_slices)*MI_SEGMENT_SLICE_SIZE, MI_COMMIT_SIZE);
mi_assert_internal(commit_needed>0);
- mi_commit_mask_create(0, commit_needed, &commit_mask);
+ mi_commit_mask_create(0, commit_needed, &commit_mask);
mi_assert_internal(commit_needed*MI_COMMIT_SIZE >= (*pinfo_slices)*MI_SEGMENT_SLICE_SIZE);
if (!_mi_os_commit(segment, commit_needed*MI_COMMIT_SIZE, NULL, tld->stats)) {
_mi_arena_free(segment,segment_size,0,memid,tld->stats);
return NULL;
- }
+ }
}
mi_assert_internal(segment != NULL && (uintptr_t)segment % MI_SEGMENT_SIZE == 0);
@@ -847,8 +860,7 @@ static mi_segment_t* mi_segment_os_alloc( size_t required, size_t page_alignment
segment->commit_mask = commit_mask;
segment->purge_expire = 0;
mi_commit_mask_create_empty(&segment->purge_mask);
- mi_atomic_store_ptr_release(mi_segment_t, &segment->abandoned_next, NULL); // tsan
-
+
mi_segments_track_size((long)(segment_size), tld);
_mi_segment_map_allocated_at(segment);
return segment;
@@ -859,32 +871,33 @@ static mi_segment_t* mi_segment_os_alloc( size_t required, size_t page_alignment
static mi_segment_t* mi_segment_alloc(size_t required, size_t page_alignment, mi_arena_id_t req_arena_id, mi_segments_tld_t* tld, mi_os_tld_t* os_tld, mi_page_t** huge_page)
{
mi_assert_internal((required==0 && huge_page==NULL) || (required>0 && huge_page != NULL));
-
+
// calculate needed sizes first
size_t info_slices;
size_t pre_size;
size_t segment_slices = mi_segment_calculate_slices(required, &pre_size, &info_slices);
-
+ mi_assert_internal(segment_slices > 0 && segment_slices <= UINT32_MAX);
+
// Commit eagerly only if not the first N lazy segments (to reduce impact of many threads that allocate just a little)
const bool eager_delay = (// !_mi_os_has_overcommit() && // never delay on overcommit systems
_mi_current_thread_count() > 1 && // do not delay for the first N threads
tld->count < (size_t)mi_option_get(mi_option_eager_commit_delay));
const bool eager = !eager_delay && mi_option_is_enabled(mi_option_eager_commit);
- bool commit = eager || (required > 0);
-
- // Allocate the segment from the OS
- mi_segment_t* segment = mi_segment_os_alloc(required, page_alignment, eager_delay, req_arena_id,
+ bool commit = eager || (required > 0);
+
+ // Allocate the segment from the OS
+ mi_segment_t* segment = mi_segment_os_alloc(required, page_alignment, eager_delay, req_arena_id,
&segment_slices, &pre_size, &info_slices, commit, tld, os_tld);
if (segment == NULL) return NULL;
-
- // zero the segment info? -- not always needed as it may be zero initialized from the OS
+
+ // zero the segment info? -- not always needed as it may be zero initialized from the OS
if (!segment->memid.initially_zero) {
ptrdiff_t ofs = offsetof(mi_segment_t, next);
size_t prefix = offsetof(mi_segment_t, slices) - ofs;
- size_t zsize = prefix + (sizeof(mi_slice_t) * (segment_slices + 1)); // one more
+ size_t zsize = prefix + (sizeof(mi_slice_t) * (segment_slices + 1)); // one more
_mi_memzero((uint8_t*)segment + ofs, zsize);
}
-
+
// initialize the rest of the segment info
const size_t slice_entries = (segment_slices > MI_SLICES_PER_SEGMENT ? MI_SLICES_PER_SEGMENT : segment_slices);
segment->segment_slices = segment_slices;
@@ -902,7 +915,7 @@ static mi_segment_t* mi_segment_alloc(size_t required, size_t page_alignment, mi
if (MI_SECURE>0) {
// in secure mode, we set up a protected page in between the segment info
// and the page data, and at the end of the segment.
- size_t os_pagesize = _mi_os_page_size();
+ size_t os_pagesize = _mi_os_page_size();
mi_assert_internal(mi_segment_info_size(segment) - os_pagesize >= pre_size);
_mi_os_protect((uint8_t*)segment + mi_segment_info_size(segment) - os_pagesize, os_pagesize);
uint8_t* end = (uint8_t*)segment + mi_segment_size(segment) - os_pagesize;
@@ -914,10 +927,10 @@ static mi_segment_t* mi_segment_alloc(size_t required, size_t page_alignment, mi
// reserve first slices for segment info
mi_page_t* page0 = mi_segment_span_allocate(segment, 0, info_slices, tld);
- mi_assert_internal(page0!=NULL); if (page0==NULL) return NULL; // cannot fail as we always commit in advance
+ mi_assert_internal(page0!=NULL); if (page0==NULL) return NULL; // cannot fail as we always commit in advance
mi_assert_internal(segment->used == 1);
segment->used = 0; // don't count our internal slices towards usage
-
+
// initialize initial free pages
if (segment->kind == MI_SEGMENT_NORMAL) { // not a huge page
mi_assert_internal(huge_page==NULL);
@@ -928,7 +941,7 @@ static mi_segment_t* mi_segment_alloc(size_t required, size_t page_alignment, mi
mi_assert_internal(mi_commit_mask_is_empty(&segment->purge_mask));
mi_assert_internal(mi_commit_mask_is_full(&segment->commit_mask));
*huge_page = mi_segment_span_allocate(segment, info_slices, segment_slices - info_slices - guard_slices, tld);
- mi_assert_internal(*huge_page != NULL); // cannot fail as we commit in advance
+ mi_assert_internal(*huge_page != NULL); // cannot fail as we commit in advance
}
mi_assert_expensive(mi_segment_is_valid(segment,tld));
@@ -951,8 +964,8 @@ static void mi_segment_free(mi_segment_t* segment, bool force, mi_segments_tld_t
while (slice < end) {
mi_assert_internal(slice->slice_count > 0);
mi_assert_internal(slice->slice_offset == 0);
- mi_assert_internal(mi_slice_index(slice)==0 || slice->xblock_size == 0); // no more used pages ..
- if (slice->xblock_size == 0 && segment->kind != MI_SEGMENT_HUGE) {
+ mi_assert_internal(mi_slice_index(slice)==0 || slice->block_size == 0); // no more used pages ..
+ if (slice->block_size == 0 && segment->kind != MI_SEGMENT_HUGE) {
mi_segment_span_remove_from_queue(slice, tld);
}
#if MI_DEBUG>1
@@ -978,11 +991,11 @@ static void mi_segment_abandon(mi_segment_t* segment, mi_segments_tld_t* tld);
// note: can be called on abandoned pages
static mi_slice_t* mi_segment_page_clear(mi_page_t* page, mi_segments_tld_t* tld) {
- mi_assert_internal(page->xblock_size > 0);
+ mi_assert_internal(page->block_size > 0);
mi_assert_internal(mi_page_all_free(page));
mi_segment_t* segment = _mi_ptr_segment(page);
mi_assert_internal(segment->used > 0);
-
+
size_t inuse = page->capacity * mi_page_block_size(page);
_mi_stat_decrease(&tld->stats->page_committed, inuse);
_mi_stat_decrease(&tld->stats->pages, 1);
@@ -990,7 +1003,7 @@ static mi_slice_t* mi_segment_page_clear(mi_page_t* page, mi_segments_tld_t* tld
// reset the page memory to reduce memory pressure?
if (segment->allow_decommit && mi_option_is_enabled(mi_option_deprecated_page_reset)) {
size_t psize;
- uint8_t* start = _mi_page_start(segment, page, &psize);
+ uint8_t* start = _mi_segment_page_start(segment, page, &psize);
_mi_os_reset(start, psize, tld->stats);
}
@@ -998,10 +1011,10 @@ static mi_slice_t* mi_segment_page_clear(mi_page_t* page, mi_segments_tld_t* tld
page->is_zero_init = false;
ptrdiff_t ofs = offsetof(mi_page_t, capacity);
_mi_memzero((uint8_t*)page + ofs, sizeof(*page) - ofs);
- page->xblock_size = 1;
+ page->block_size = 1;
// and free it
- mi_slice_t* slice = mi_segment_span_free_coalesce(mi_page_to_slice(page), tld);
+ mi_slice_t* slice = mi_segment_span_free_coalesce(mi_page_to_slice(page), tld);
segment->used--;
// cannot assert segment valid as it is called during reclaim
// mi_assert_expensive(mi_segment_is_valid(segment, tld));
@@ -1027,6 +1040,10 @@ void _mi_segment_page_free(mi_page_t* page, bool force, mi_segments_tld_t* tld)
// only abandoned pages; remove from free list and abandon
mi_segment_abandon(segment,tld);
}
+ else {
+ // perform delayed purges
+ mi_segment_try_purge(segment, false /* force? */, tld->stats);
+ }
}
@@ -1036,172 +1053,21 @@ Abandonment
When threads terminate, they can leave segments with
live blocks (reachable through other threads). Such segments
are "abandoned" and will be reclaimed by other threads to
-reuse their pages and/or free them eventually
-
-We maintain a global list of abandoned segments that are
-reclaimed on demand. Since this is shared among threads
-the implementation needs to avoid the A-B-A problem on
-popping abandoned segments: <https://en.wikipedia.org/wiki/ABA_problem>
-We use tagged pointers to avoid accidentally identifying
-reused segments, much like stamped references in Java.
-Secondly, we maintain a reader counter to avoid resetting
-or decommitting segments that have a pending read operation.
-
-Note: the current implementation is one possible design;
-another way might be to keep track of abandoned segments
-in the arenas/segment_cache's. This would have the advantage of keeping
-all concurrent code in one place and not needing to deal
-with ABA issues. The drawback is that it is unclear how to
-scan abandoned segments efficiently in that case as they
-would be spread among all other segments in the arenas.
------------------------------------------------------------ */
-
-// Use the bottom 20-bits (on 64-bit) of the aligned segment pointers
-// to put in a tag that increments on update to avoid the A-B-A problem.
-#define MI_TAGGED_MASK MI_SEGMENT_MASK
-typedef uintptr_t mi_tagged_segment_t;
-
-static mi_segment_t* mi_tagged_segment_ptr(mi_tagged_segment_t ts) {
- return (mi_segment_t*)(ts & ~MI_TAGGED_MASK);
-}
-
-static mi_tagged_segment_t mi_tagged_segment(mi_segment_t* segment, mi_tagged_segment_t ts) {
- mi_assert_internal(((uintptr_t)segment & MI_TAGGED_MASK) == 0);
- uintptr_t tag = ((ts & MI_TAGGED_MASK) + 1) & MI_TAGGED_MASK;
- return ((uintptr_t)segment | tag);
-}
-
-// This is a list of visited abandoned pages that were full at the time.
-// this list migrates to `abandoned` when that becomes NULL. The use of
-// this list reduces contention and the rate at which segments are visited.
-static mi_decl_cache_align _Atomic(mi_segment_t*) abandoned_visited; // = NULL
-
-// The abandoned page list (tagged as it supports pop)
-static mi_decl_cache_align _Atomic(mi_tagged_segment_t) abandoned; // = NULL
-
-// Maintain these for debug purposes (these counts may be a bit off)
-static mi_decl_cache_align _Atomic(size_t) abandoned_count;
-static mi_decl_cache_align _Atomic(size_t) abandoned_visited_count;
-
-// We also maintain a count of current readers of the abandoned list
-// in order to prevent resetting/decommitting segment memory if it might
-// still be read.
-static mi_decl_cache_align _Atomic(size_t) abandoned_readers; // = 0
-
-// Push on the visited list
-static void mi_abandoned_visited_push(mi_segment_t* segment) {
- mi_assert_internal(segment->thread_id == 0);
- mi_assert_internal(mi_atomic_load_ptr_relaxed(mi_segment_t,&segment->abandoned_next) == NULL);
- mi_assert_internal(segment->next == NULL);
- mi_assert_internal(segment->used > 0);
- mi_segment_t* anext = mi_atomic_load_ptr_relaxed(mi_segment_t, &abandoned_visited);
- do {
- mi_atomic_store_ptr_release(mi_segment_t, &segment->abandoned_next, anext);
- } while (!mi_atomic_cas_ptr_weak_release(mi_segment_t, &abandoned_visited, &anext, segment));
- mi_atomic_increment_relaxed(&abandoned_visited_count);
-}
+reuse their pages and/or free them eventually. The
+`thread_id` of such segments is 0.
-// Move the visited list to the abandoned list.
-static bool mi_abandoned_visited_revisit(void)
-{
- // quick check if the visited list is empty
- if (mi_atomic_load_ptr_relaxed(mi_segment_t, &abandoned_visited) == NULL) return false;
-
- // grab the whole visited list
- mi_segment_t* first = mi_atomic_exchange_ptr_acq_rel(mi_segment_t, &abandoned_visited, NULL);
- if (first == NULL) return false;
-
- // first try to swap directly if the abandoned list happens to be NULL
- mi_tagged_segment_t afirst;
- mi_tagged_segment_t ts = mi_atomic_load_relaxed(&abandoned);
- if (mi_tagged_segment_ptr(ts)==NULL) {
- size_t count = mi_atomic_load_relaxed(&abandoned_visited_count);
- afirst = mi_tagged_segment(first, ts);
- if (mi_atomic_cas_strong_acq_rel(&abandoned, &ts, afirst)) {
- mi_atomic_add_relaxed(&abandoned_count, count);
- mi_atomic_sub_relaxed(&abandoned_visited_count, count);
- return true;
- }
- }
+When a block is freed in an abandoned segment, the segment
+is reclaimed into that thread.
- // find the last element of the visited list: O(n)
- mi_segment_t* last = first;
- mi_segment_t* next;
- while ((next = mi_atomic_load_ptr_relaxed(mi_segment_t, &last->abandoned_next)) != NULL) {
- last = next;
- }
-
- // and atomically prepend to the abandoned list
- // (no need to increase the readers as we don't access the abandoned segments)
- mi_tagged_segment_t anext = mi_atomic_load_relaxed(&abandoned);
- size_t count;
- do {
- count = mi_atomic_load_relaxed(&abandoned_visited_count);
- mi_atomic_store_ptr_release(mi_segment_t, &last->abandoned_next, mi_tagged_segment_ptr(anext));
- afirst = mi_tagged_segment(first, anext);
- } while (!mi_atomic_cas_weak_release(&abandoned, &anext, afirst));
- mi_atomic_add_relaxed(&abandoned_count, count);
- mi_atomic_sub_relaxed(&abandoned_visited_count, count);
- return true;
-}
-
-// Push on the abandoned list.
-static void mi_abandoned_push(mi_segment_t* segment) {
- mi_assert_internal(segment->thread_id == 0);
- mi_assert_internal(mi_atomic_load_ptr_relaxed(mi_segment_t, &segment->abandoned_next) == NULL);
- mi_assert_internal(segment->next == NULL);
- mi_assert_internal(segment->used > 0);
- mi_tagged_segment_t next;
- mi_tagged_segment_t ts = mi_atomic_load_relaxed(&abandoned);
- do {
- mi_atomic_store_ptr_release(mi_segment_t, &segment->abandoned_next, mi_tagged_segment_ptr(ts));
- next = mi_tagged_segment(segment, ts);
- } while (!mi_atomic_cas_weak_release(&abandoned, &ts, next));
- mi_atomic_increment_relaxed(&abandoned_count);
-}
+Moreover, if threads are looking for a fresh segment, they
+will first consider abondoned segments -- these can be found
+by scanning the arena memory
+(segments outside arena memoryare only reclaimed by a free).
+----------------------------------------------------------- */
-// Wait until there are no more pending reads on segments that used to be in the abandoned list
-// called for example from `arena.c` before decommitting
+// legacy: Wait until there are no more pending reads on segments that used to be in the abandoned list
void _mi_abandoned_await_readers(void) {
- size_t n;
- do {
- n = mi_atomic_load_acquire(&abandoned_readers);
- if (n != 0) mi_atomic_yield();
- } while (n != 0);
-}
-
-// Pop from the abandoned list
-static mi_segment_t* mi_abandoned_pop(void) {
- mi_segment_t* segment;
- // Check efficiently if it is empty (or if the visited list needs to be moved)
- mi_tagged_segment_t ts = mi_atomic_load_relaxed(&abandoned);
- segment = mi_tagged_segment_ptr(ts);
- if mi_likely(segment == NULL) {
- if mi_likely(!mi_abandoned_visited_revisit()) { // try to swap in the visited list on NULL
- return NULL;
- }
- }
-
- // Do a pop. We use a reader count to prevent
- // a segment to be decommitted while a read is still pending,
- // and a tagged pointer to prevent A-B-A link corruption.
- // (this is called from `region.c:_mi_mem_free` for example)
- mi_atomic_increment_relaxed(&abandoned_readers); // ensure no segment gets decommitted
- mi_tagged_segment_t next = 0;
- ts = mi_atomic_load_acquire(&abandoned);
- do {
- segment = mi_tagged_segment_ptr(ts);
- if (segment != NULL) {
- mi_segment_t* anext = mi_atomic_load_ptr_relaxed(mi_segment_t, &segment->abandoned_next);
- next = mi_tagged_segment(anext, ts); // note: reads the segment's `abandoned_next` field so should not be decommitted
- }
- } while (segment != NULL && !mi_atomic_cas_weak_acq_rel(&abandoned, &ts, next));
- mi_atomic_decrement_relaxed(&abandoned_readers); // release reader lock
- if (segment != NULL) {
- mi_atomic_store_ptr_release(mi_segment_t, &segment->abandoned_next, NULL);
- mi_atomic_decrement_relaxed(&abandoned_count);
- }
- return segment;
+ // nothing needed
}
/* -----------------------------------------------------------
@@ -1211,33 +1077,38 @@ static mi_segment_t* mi_abandoned_pop(void) {
static void mi_segment_abandon(mi_segment_t* segment, mi_segments_tld_t* tld) {
mi_assert_internal(segment->used == segment->abandoned);
mi_assert_internal(segment->used > 0);
- mi_assert_internal(mi_atomic_load_ptr_relaxed(mi_segment_t, &segment->abandoned_next) == NULL);
mi_assert_internal(segment->abandoned_visits == 0);
mi_assert_expensive(mi_segment_is_valid(segment,tld));
-
+
// remove the free pages from the free page queues
mi_slice_t* slice = &segment->slices[0];
const mi_slice_t* end = mi_segment_slices_end(segment);
while (slice < end) {
mi_assert_internal(slice->slice_count > 0);
mi_assert_internal(slice->slice_offset == 0);
- if (slice->xblock_size == 0) { // a free page
+ if (slice->block_size == 0) { // a free page
mi_segment_span_remove_from_queue(slice,tld);
- slice->xblock_size = 0; // but keep it free
+ slice->block_size = 0; // but keep it free
}
slice = slice + slice->slice_count;
}
// perform delayed decommits (forcing is much slower on mstress)
- mi_segment_try_purge(segment, mi_option_is_enabled(mi_option_abandoned_page_purge) /* force? */, tld->stats);
-
+ // Only abandoned segments in arena memory can be reclaimed without a free
+ // so if a segment is not from an arena we force purge here to be conservative.
+ const bool force_purge = (segment->memid.memkind != MI_MEM_ARENA) || mi_option_is_enabled(mi_option_abandoned_page_purge);
+ mi_segment_try_purge(segment, force_purge, tld->stats);
+
// all pages in the segment are abandoned; add it to the abandoned list
_mi_stat_increase(&tld->stats->segments_abandoned, 1);
mi_segments_track_size(-((long)mi_segment_size(segment)), tld);
segment->thread_id = 0;
- mi_atomic_store_ptr_release(mi_segment_t, &segment->abandoned_next, NULL);
segment->abandoned_visits = 1; // from 0 to 1 to signify it is abandoned
- mi_abandoned_push(segment);
+ if (segment->was_reclaimed) {
+ tld->reclaim_count--;
+ segment->was_reclaimed = false;
+ }
+ _mi_arena_segment_mark_abandoned(segment);
}
void _mi_segment_page_abandon(mi_page_t* page, mi_segments_tld_t* tld) {
@@ -1247,7 +1118,7 @@ void _mi_segment_page_abandon(mi_page_t* page, mi_segments_tld_t* tld) {
mi_segment_t* segment = _mi_page_segment(page);
mi_assert_expensive(mi_segment_is_valid(segment,tld));
- segment->abandoned++;
+ segment->abandoned++;
_mi_stat_increase(&tld->stats->pages_abandoned, 1);
mi_assert_internal(segment->abandoned <= segment->used);
@@ -1264,18 +1135,17 @@ void _mi_segment_page_abandon(mi_page_t* page, mi_segments_tld_t* tld) {
static mi_slice_t* mi_slices_start_iterate(mi_segment_t* segment, const mi_slice_t** end) {
mi_slice_t* slice = &segment->slices[0];
*end = mi_segment_slices_end(segment);
- mi_assert_internal(slice->slice_count>0 && slice->xblock_size>0); // segment allocated page
+ mi_assert_internal(slice->slice_count>0 && slice->block_size>0); // segment allocated page
slice = slice + slice->slice_count; // skip the first segment allocated page
return slice;
}
// Possibly free pages and check if free space is available
-static bool mi_segment_check_free(mi_segment_t* segment, size_t slices_needed, size_t block_size, mi_segments_tld_t* tld)
+static bool mi_segment_check_free(mi_segment_t* segment, size_t slices_needed, size_t block_size, mi_segments_tld_t* tld)
{
- mi_assert_internal(block_size < MI_HUGE_BLOCK_SIZE);
mi_assert_internal(mi_segment_is_abandoned(segment));
bool has_page = false;
-
+
// for all slices
const mi_slice_t* end;
mi_slice_t* slice = mi_slices_start_iterate(segment, &end);
@@ -1287,7 +1157,7 @@ static bool mi_segment_check_free(mi_segment_t* segment, size_t slices_needed, s
mi_page_t* const page = mi_slice_to_page(slice);
_mi_page_free_collect(page, false);
if (mi_page_all_free(page)) {
- // if this page is all free now, free it without adding to any queues (yet)
+ // if this page is all free now, free it without adding to any queues (yet)
mi_assert_internal(page->next == NULL && page->prev==NULL);
_mi_stat_decrease(&tld->stats->pages_abandoned, 1);
segment->abandoned--;
@@ -1297,12 +1167,10 @@ static bool mi_segment_check_free(mi_segment_t* segment, size_t slices_needed, s
has_page = true;
}
}
- else {
- if (page->xblock_size == block_size && mi_page_has_any_available(page)) {
- // a page has available free blocks of the right size
- has_page = true;
- }
- }
+ else if (mi_page_block_size(page) == block_size && mi_page_has_any_available(page)) {
+ // a page has available free blocks of the right size
+ has_page = true;
+ }
}
else {
// empty span
@@ -1318,16 +1186,17 @@ static bool mi_segment_check_free(mi_segment_t* segment, size_t slices_needed, s
// Reclaim an abandoned segment; returns NULL if the segment was freed
// set `right_page_reclaimed` to `true` if it reclaimed a page of the right `block_size` that was not full.
static mi_segment_t* mi_segment_reclaim(mi_segment_t* segment, mi_heap_t* heap, size_t requested_block_size, bool* right_page_reclaimed, mi_segments_tld_t* tld) {
- mi_assert_internal(mi_atomic_load_ptr_relaxed(mi_segment_t, &segment->abandoned_next) == NULL);
- mi_assert_expensive(mi_segment_is_valid(segment, tld));
if (right_page_reclaimed != NULL) { *right_page_reclaimed = false; }
-
- segment->thread_id = _mi_thread_id();
+ // can be 0 still with abandoned_next, or already a thread id for segments outside an arena that are reclaimed on a free.
+ mi_assert_internal(mi_atomic_load_relaxed(&segment->thread_id) == 0 || mi_atomic_load_relaxed(&segment->thread_id) == _mi_thread_id());
+ mi_atomic_store_release(&segment->thread_id, _mi_thread_id());
segment->abandoned_visits = 0;
+ segment->was_reclaimed = true;
+ tld->reclaim_count++;
mi_segments_track_size((long)mi_segment_size(segment), tld);
mi_assert_internal(segment->next == NULL);
_mi_stat_decrease(&tld->stats->segments_abandoned, 1);
-
+
// for all slices
const mi_slice_t* end;
mi_slice_t* slice = mi_slices_start_iterate(segment, &end);
@@ -1354,7 +1223,7 @@ static mi_segment_t* mi_segment_reclaim(mi_segment_t* segment, mi_heap_t* heap,
else {
// otherwise reclaim it into the heap
_mi_page_reclaim(heap, page);
- if (requested_block_size == page->xblock_size && mi_page_has_any_available(page)) {
+ if (requested_block_size == mi_page_block_size(page) && mi_page_has_any_available(page)) {
if (right_page_reclaimed != NULL) { *right_page_reclaimed = true; }
}
}
@@ -1368,6 +1237,7 @@ static mi_segment_t* mi_segment_reclaim(mi_segment_t* segment, mi_heap_t* heap,
}
mi_assert(segment->abandoned == 0);
+ mi_assert_expensive(mi_segment_is_valid(segment, tld));
if (segment->used == 0) { // due to page_clear
mi_assert_internal(right_page_reclaimed == NULL || !(*right_page_reclaimed));
mi_segment_free(segment, false, tld);
@@ -1378,23 +1248,54 @@ static mi_segment_t* mi_segment_reclaim(mi_segment_t* segment, mi_heap_t* heap,
}
}
+// attempt to reclaim a particular segment (called from multi threaded free `alloc.c:mi_free_block_mt`)
+bool _mi_segment_attempt_reclaim(mi_heap_t* heap, mi_segment_t* segment) {
+ if (mi_atomic_load_relaxed(&segment->thread_id) != 0) return false; // it is not abandoned
+ // don't reclaim more from a free than half the current segments
+ // this is to prevent a pure free-ing thread to start owning too many segments
+ if (heap->tld->segments.reclaim_count * 2 > heap->tld->segments.count) return false;
+ if (_mi_arena_segment_clear_abandoned(segment)) { // atomically unabandon
+ mi_segment_t* res = mi_segment_reclaim(segment, heap, 0, NULL, &heap->tld->segments);
+ mi_assert_internal(res == segment);
+ return (res != NULL);
+ }
+ return false;
+}
void _mi_abandoned_reclaim_all(mi_heap_t* heap, mi_segments_tld_t* tld) {
mi_segment_t* segment;
- while ((segment = mi_abandoned_pop()) != NULL) {
+ mi_arena_field_cursor_t current; _mi_arena_field_cursor_init(heap, &current);
+ while ((segment = _mi_arena_segment_clear_abandoned_next(&current)) != NULL) {
mi_segment_reclaim(segment, heap, 0, NULL, tld);
}
}
+static long mi_segment_get_reclaim_tries(void) {
+ // limit the tries to 10% (default) of the abandoned segments with at least 8 and at most 1024 tries.
+ const size_t perc = (size_t)mi_option_get_clamp(mi_option_max_segment_reclaim, 0, 100);
+ if (perc <= 0) return 0;
+ const size_t total_count = _mi_arena_segment_abandoned_count();
+ if (total_count == 0) return 0;
+ const size_t relative_count = (total_count > 10000 ? (total_count / 100) * perc : (total_count * perc) / 100); // avoid overflow
+ long max_tries = (long)(relative_count <= 1 ? 1 : (relative_count > 1024 ? 1024 : relative_count));
+ if (max_tries < 8 && total_count > 8) { max_tries = 8; }
+ return max_tries;
+}
+
static mi_segment_t* mi_segment_try_reclaim(mi_heap_t* heap, size_t needed_slices, size_t block_size, bool* reclaimed, mi_segments_tld_t* tld)
{
*reclaimed = false;
+ long max_tries = mi_segment_get_reclaim_tries();
+ if (max_tries <= 0) return NULL;
+
mi_segment_t* segment;
- long max_tries = mi_option_get_clamp(mi_option_max_segment_reclaim, 8, 1024); // limit the work to bound allocation times
- while ((max_tries-- > 0) && ((segment = mi_abandoned_pop()) != NULL)) {
+ mi_arena_field_cursor_t current; _mi_arena_field_cursor_init(heap, &current);
+ while ((max_tries-- > 0) && ((segment = _mi_arena_segment_clear_abandoned_next(&current)) != NULL))
+ {
segment->abandoned_visits++;
- // todo: an arena exclusive heap will potentially visit many abandoned unsuitable segments
- // and push them into the visited list and use many tries. Perhaps we can skip non-suitable ones in a better way?
+ // todo: should we respect numa affinity for abondoned reclaim? perhaps only for the first visit?
+ // todo: an arena exclusive heap will potentially visit many abandoned unsuitable segments and use many tries
+ // Perhaps we can skip non-suitable ones in a better way?
bool is_suitable = _mi_heap_memid_is_suitable(heap, segment->memid);
bool has_page = mi_segment_check_free(segment,needed_slices,block_size,tld); // try to free up pages (due to concurrent frees)
if (segment->used == 0) {
@@ -1406,19 +1307,19 @@ static mi_segment_t* mi_segment_try_reclaim(mi_heap_t* heap, size_t needed_slice
mi_segment_reclaim(segment, heap, 0, NULL, tld);
}
else if (has_page && is_suitable) {
- // found a large enough free span, or a page of the right block_size with free space
+ // found a large enough free span, or a page of the right block_size with free space
// we return the result of reclaim (which is usually `segment`) as it might free
// the segment due to concurrent frees (in which case `NULL` is returned).
return mi_segment_reclaim(segment, heap, block_size, reclaimed, tld);
}
- else if (segment->abandoned_visits > 3 && is_suitable) {
+ else if (segment->abandoned_visits > 3 && is_suitable) {
// always reclaim on 3rd visit to limit the abandoned queue length.
mi_segment_reclaim(segment, heap, 0, NULL, tld);
}
else {
// otherwise, push on the visited list so it gets not looked at too quickly again
- mi_segment_try_purge(segment, true /* force? */, tld->stats); // force purge if needed as we may not visit soon again
- mi_abandoned_visited_push(segment);
+ mi_segment_try_purge(segment, false /* true force? */, tld->stats); // force purge if needed as we may not visit soon again
+ _mi_arena_segment_mark_abandoned(segment);
}
}
return NULL;
@@ -1428,11 +1329,9 @@ static mi_segment_t* mi_segment_try_reclaim(mi_heap_t* heap, size_t needed_slice
void _mi_abandoned_collect(mi_heap_t* heap, bool force, mi_segments_tld_t* tld)
{
mi_segment_t* segment;
- int max_tries = (force ? 16*1024 : 1024); // limit latency
- if (force) {
- mi_abandoned_visited_revisit();
- }
- while ((max_tries-- > 0) && ((segment = mi_abandoned_pop()) != NULL)) {
+ mi_arena_field_cursor_t current; _mi_arena_field_cursor_init(heap, &current);
+ long max_tries = (force ? (long)_mi_arena_segment_abandoned_count() : 1024); // limit latency
+ while ((max_tries-- > 0) && ((segment = _mi_arena_segment_clear_abandoned_next(&current)) != NULL)) {
mi_segment_check_free(segment,0,0,tld); // try to free up pages (due to concurrent frees)
if (segment->used == 0) {
// free the segment (by forced reclaim) to make it available to other threads.
@@ -1441,10 +1340,10 @@ void _mi_abandoned_collect(mi_heap_t* heap, bool force, mi_segments_tld_t* tld)
mi_segment_reclaim(segment, heap, 0, NULL, tld);
}
else {
- // otherwise, purge if needed and push on the visited list
+ // otherwise, purge if needed and push on the visited list
// note: forced purge can be expensive if many threads are destroyed/created as in mstress.
mi_segment_try_purge(segment, force, tld->stats);
- mi_abandoned_visited_push(segment);
+ _mi_arena_segment_mark_abandoned(segment);
}
}
}
@@ -1455,9 +1354,8 @@ void _mi_abandoned_collect(mi_heap_t* heap, bool force, mi_segments_tld_t* tld)
static mi_segment_t* mi_segment_reclaim_or_alloc(mi_heap_t* heap, size_t needed_slices, size_t block_size, mi_segments_tld_t* tld, mi_os_tld_t* os_tld)
{
- mi_assert_internal(block_size < MI_HUGE_BLOCK_SIZE);
mi_assert_internal(block_size <= MI_LARGE_OBJ_SIZE_MAX);
-
+
// 1. try to reclaim an abandoned segment
bool reclaimed;
mi_segment_t* segment = mi_segment_try_reclaim(heap, needed_slices, block_size, &reclaimed, tld);
@@ -1471,7 +1369,7 @@ static mi_segment_t* mi_segment_reclaim_or_alloc(mi_heap_t* heap, size_t needed_
return segment;
}
// 2. otherwise allocate a fresh segment
- return mi_segment_alloc(0, 0, heap->arena_id, tld, os_tld, NULL);
+ return mi_segment_alloc(0, 0, heap->arena_id, tld, os_tld, NULL);
}
@@ -1492,7 +1390,7 @@ static mi_page_t* mi_segments_page_alloc(mi_heap_t* heap, mi_page_kind_t page_ki
// no free page, allocate a new segment and try again
if (mi_segment_reclaim_or_alloc(heap, slices_needed, block_size, tld, os_tld) == NULL) {
// OOM or reclaimed a good page in the heap
- return NULL;
+ return NULL;
}
else {
// otherwise try again
@@ -1517,27 +1415,28 @@ static mi_page_t* mi_segment_huge_page_alloc(size_t size, size_t page_alignment,
mi_segment_t* segment = mi_segment_alloc(size,page_alignment,req_arena_id,tld,os_tld,&page);
if (segment == NULL || page==NULL) return NULL;
mi_assert_internal(segment->used==1);
- mi_assert_internal(mi_page_block_size(page) >= size);
+ mi_assert_internal(mi_page_block_size(page) >= size);
#if MI_HUGE_PAGE_ABANDON
segment->thread_id = 0; // huge segments are immediately abandoned
- #endif
+ #endif
- // for huge pages we initialize the xblock_size as we may
+ // for huge pages we initialize the block_size as we may
// overallocate to accommodate large alignments.
size_t psize;
uint8_t* start = _mi_segment_page_start(segment, page, &psize);
- page->xblock_size = (psize > MI_HUGE_BLOCK_SIZE ? MI_HUGE_BLOCK_SIZE : (uint32_t)psize);
-
+ page->block_size = psize;
+ mi_assert_internal(page->is_huge);
+
// decommit the part of the prefix of a page that will not be used; this can be quite large (close to MI_SEGMENT_SIZE)
if (page_alignment > 0 && segment->allow_decommit) {
uint8_t* aligned_p = (uint8_t*)_mi_align_up((uintptr_t)start, page_alignment);
mi_assert_internal(_mi_is_aligned(aligned_p, page_alignment));
- mi_assert_internal(psize - (aligned_p - start) >= size);
+ mi_assert_internal(psize - (aligned_p - start) >= size);
uint8_t* decommit_start = start + sizeof(mi_block_t); // for the free list
ptrdiff_t decommit_size = aligned_p - decommit_start;
- _mi_os_reset(decommit_start, decommit_size, &_mi_stats_main); // note: cannot use segment_decommit on huge segments
+ _mi_os_reset(decommit_start, decommit_size, &_mi_stats_main); // note: cannot use segment_decommit on huge segments
}
-
+
return page;
}
@@ -1557,7 +1456,7 @@ void _mi_segment_huge_page_free(mi_segment_t* segment, mi_page_t* page, mi_block
mi_block_set_next(page, block, page->free);
page->free = block;
page->used--;
- page->is_zero = false;
+ page->is_zero_init = false;
mi_assert(page->used == 0);
mi_tld_t* tld = heap->tld;
_mi_segment_page_free(page, true, &tld->segments);
@@ -1593,7 +1492,7 @@ void _mi_segment_huge_page_reset(mi_segment_t* segment, mi_page_t* page, mi_bloc
----------------------------------------------------------- */
mi_page_t* _mi_segment_page_alloc(mi_heap_t* heap, size_t block_size, size_t page_alignment, mi_segments_tld_t* tld, mi_os_tld_t* os_tld) {
mi_page_t* page;
- if mi_unlikely(page_alignment > MI_ALIGNMENT_MAX) {
+ if mi_unlikely(page_alignment > MI_BLOCK_ALIGNMENT_MAX) {
mi_assert_internal(_mi_is_power_of_two(page_alignment));
mi_assert_internal(page_alignment >= MI_SEGMENT_SIZE);
if (page_alignment < MI_SEGMENT_SIZE) { page_alignment = MI_SEGMENT_SIZE; }
@@ -1609,7 +1508,7 @@ mi_page_t* _mi_segment_page_alloc(mi_heap_t* heap, size_t block_size, size_t pag
page = mi_segments_page_alloc(heap,MI_PAGE_LARGE,block_size,block_size,tld, os_tld);
}
else {
- page = mi_segment_huge_page_alloc(block_size,page_alignment,heap->arena_id,tld,os_tld);
+ page = mi_segment_huge_page_alloc(block_size,page_alignment,heap->arena_id,tld,os_tld);
}
mi_assert_internal(page == NULL || _mi_heap_memid_is_suitable(heap, _mi_page_segment(page)->memid));
mi_assert_expensive(page == NULL || mi_segment_is_valid(_mi_page_segment(page),tld));
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/static.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/static.c
index bc05dd7..bf025eb 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/static.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/static.c
@@ -27,6 +27,7 @@ terms of the MIT license. A copy of the license can be found in the file
#include "bitmap.c"
#include "heap.c"
#include "init.c"
+#include "libc.c"
#include "options.c"
#include "os.c"
#include "page.c" // includes page-queue.c
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/stats.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/stats.c
index 300956c..a936402 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/src/stats.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/src/stats.c
@@ -9,7 +9,6 @@ terms of the MIT license. A copy of the license can be found in the file
#include "mimalloc/atomic.h"
#include "mimalloc/prim.h"
-#include <stdio.h> // snprintf
#include <string.h> // memset
#if defined(_MSC_VER) && (_MSC_VER < 1920)
@@ -146,7 +145,7 @@ static void mi_printf_amount(int64_t n, int64_t unit, mi_output_fun* out, void*
const int64_t pos = (n < 0 ? -n : n);
if (pos < base) {
if (n!=1 || suffix[0] != 'B') { // skip printing 1 B for the unit column
- snprintf(buf, len, "%d %-3s", (int)n, (n==0 ? "" : suffix));
+ _mi_snprintf(buf, len, "%lld %-3s", (long long)n, (n==0 ? "" : suffix));
}
}
else {
@@ -158,8 +157,8 @@ static void mi_printf_amount(int64_t n, int64_t unit, mi_output_fun* out, void*
const long whole = (long)(tens/10);
const long frac1 = (long)(tens%10);
char unitdesc[8];
- snprintf(unitdesc, 8, "%s%s%s", magnitude, (base==1024 ? "i" : ""), suffix);
- snprintf(buf, len, "%ld.%ld %-3s", whole, (frac1 < 0 ? -frac1 : frac1), unitdesc);
+ _mi_snprintf(unitdesc, 8, "%s%s%s", magnitude, (base==1024 ? "i" : ""), suffix);
+ _mi_snprintf(buf, len, "%ld.%ld %-3s", whole, (frac1 < 0 ? -frac1 : frac1), unitdesc);
}
_mi_fprintf(out, arg, (fmt==NULL ? "%12s" : fmt), buf);
}
@@ -176,13 +175,28 @@ static void mi_print_count(int64_t n, int64_t unit, mi_output_fun* out, void* ar
static void mi_stat_print_ex(const mi_stat_count_t* stat, const char* msg, int64_t unit, mi_output_fun* out, void* arg, const char* notok ) {
_mi_fprintf(out, arg,"%10s:", msg);
- if (unit > 0) {
- mi_print_amount(stat->peak, unit, out, arg);
- mi_print_amount(stat->allocated, unit, out, arg);
- mi_print_amount(stat->freed, unit, out, arg);
- mi_print_amount(stat->current, unit, out, arg);
- mi_print_amount(unit, 1, out, arg);
- mi_print_count(stat->allocated, unit, out, arg);
+ if (unit != 0) {
+ if (unit > 0) {
+ mi_print_amount(stat->peak, unit, out, arg);
+ mi_print_amount(stat->allocated, unit, out, arg);
+ mi_print_amount(stat->freed, unit, out, arg);
+ mi_print_amount(stat->current, unit, out, arg);
+ mi_print_amount(unit, 1, out, arg);
+ mi_print_count(stat->allocated, unit, out, arg);
+ }
+ else {
+ mi_print_amount(stat->peak, -1, out, arg);
+ mi_print_amount(stat->allocated, -1, out, arg);
+ mi_print_amount(stat->freed, -1, out, arg);
+ mi_print_amount(stat->current, -1, out, arg);
+ if (unit == -1) {
+ _mi_fprintf(out, arg, "%24s", "");
+ }
+ else {
+ mi_print_amount(-unit, 1, out, arg);
+ mi_print_count((stat->allocated / -unit), 0, out, arg);
+ }
+ }
if (stat->allocated > stat->freed) {
_mi_fprintf(out, arg, " ");
_mi_fprintf(out, arg, (notok == NULL ? "not all freed" : notok));
@@ -192,23 +206,6 @@ static void mi_stat_print_ex(const mi_stat_count_t* stat, const char* msg, int64
_mi_fprintf(out, arg, " ok\n");
}
}
- else if (unit<0) {
- mi_print_amount(stat->peak, -1, out, arg);
- mi_print_amount(stat->allocated, -1, out, arg);
- mi_print_amount(stat->freed, -1, out, arg);
- mi_print_amount(stat->current, -1, out, arg);
- if (unit==-1) {
- _mi_fprintf(out, arg, "%24s", "");
- }
- else {
- mi_print_amount(-unit, 1, out, arg);
- mi_print_count((stat->allocated / -unit), 0, out, arg);
- }
- if (stat->allocated > stat->freed)
- _mi_fprintf(out, arg, " not all freed!\n");
- else
- _mi_fprintf(out, arg, " ok\n");
- }
else {
mi_print_amount(stat->peak, 1, out, arg);
mi_print_amount(stat->allocated, 1, out, arg);
@@ -255,7 +252,7 @@ static void mi_stats_print_bins(const mi_stat_count_t* bins, size_t max, const c
if (bins[i].allocated > 0) {
found = true;
int64_t unit = _mi_bin_size((uint8_t)i);
- snprintf(buf, 64, "%s %3lu", fmt, (long)i);
+ _mi_snprintf(buf, 64, "%s %3lu", fmt, (long)i);
mi_stat_print(&bins[i], buf, unit, out, arg);
}
}
@@ -341,6 +338,9 @@ static void _mi_stats_print(mi_stats_t* stats, mi_output_fun* out0, void* arg0)
mi_stat_print(&stats->pages_abandoned, "-abandoned", -1, out, arg);
mi_stat_counter_print(&stats->pages_extended, "-extended", out, arg);
mi_stat_counter_print(&stats->page_no_retire, "-noretire", out, arg);
+ mi_stat_counter_print(&stats->arena_count, "arenas", out, arg);
+ mi_stat_counter_print(&stats->arena_crossover_count, "-crossover", out, arg);
+ mi_stat_counter_print(&stats->arena_rollback_count, "-rollback", out, arg);
mi_stat_counter_print(&stats->mmap_calls, "mmaps", out, arg);
mi_stat_counter_print(&stats->commit_calls, "commits", out, arg);
mi_stat_counter_print(&stats->reset_calls, "resets", out, arg);
@@ -455,7 +455,7 @@ mi_decl_export void mi_process_info(size_t* elapsed_msecs, size_t* user_msecs, s
pinfo.page_faults = 0;
_mi_prim_process_info(&pinfo);
-
+
if (elapsed_msecs!=NULL) *elapsed_msecs = (pinfo.elapsed < 0 ? 0 : (pinfo.elapsed < (mi_msecs_t)PTRDIFF_MAX ? (size_t)pinfo.elapsed : PTRDIFF_MAX));
if (user_msecs!=NULL) *user_msecs = (pinfo.utime < 0 ? 0 : (pinfo.utime < (mi_msecs_t)PTRDIFF_MAX ? (size_t)pinfo.utime : PTRDIFF_MAX));
if (system_msecs!=NULL) *system_msecs = (pinfo.stime < 0 ? 0 : (pinfo.stime < (mi_msecs_t)PTRDIFF_MAX ? (size_t)pinfo.stime : PTRDIFF_MAX));
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/test/main-override.cpp b/lib/Utils.Memory/vnlib_mimalloc/vendor/test/main-override.cpp
index c1607b6..582f24e 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/test/main-override.cpp
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/test/main-override.cpp
@@ -108,7 +108,7 @@ static void various_tests() {
auto tbuf = new unsigned char[sizeof(Test)];
t = new (tbuf) Test(42);
t->~Test();
- delete tbuf;
+ delete[] tbuf;
}
class Static {
@@ -379,7 +379,7 @@ static void bench_alloc_large(void) {
static constexpr size_t kMaxBufferSize = 25 * 1024 * 1024;
std::unique_ptr<char[]> buffers[kNumBuffers];
- std::random_device rd;
+ std::random_device rd; (void)rd;
std::mt19937 gen(42); //rd());
std::uniform_int_distribution<> size_distribution(kMinBufferSize, kMaxBufferSize);
std::uniform_int_distribution<> buf_number_distribution(0, kNumBuffers - 1);
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-api.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-api.c
index 8dd24e1..7610198 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-api.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-api.c
@@ -34,7 +34,7 @@ we therefore test the API over various inputs. Please add more tests :-)
#include "mimalloc.h"
// #include "mimalloc/internal.h"
-#include "mimalloc/types.h" // for MI_DEBUG and MI_ALIGNMENT_MAX
+#include "mimalloc/types.h" // for MI_DEBUG and MI_BLOCK_ALIGNMENT_MAX
#include "testhelper.h"
@@ -46,6 +46,11 @@ bool test_heap2(void);
bool test_stl_allocator1(void);
bool test_stl_allocator2(void);
+bool test_stl_heap_allocator1(void);
+bool test_stl_heap_allocator2(void);
+bool test_stl_heap_allocator3(void);
+bool test_stl_heap_allocator4(void);
+
bool mem_is_zero(uint8_t* p, size_t size) {
if (p==NULL) return false;
for (size_t i = 0; i < size; ++i) {
@@ -59,7 +64,7 @@ bool mem_is_zero(uint8_t* p, size_t size) {
// ---------------------------------------------------------------------------
int main(void) {
mi_option_disable(mi_option_verbose);
-
+
// ---------------------------------------------------
// Malloc
// ---------------------------------------------------
@@ -154,7 +159,7 @@ int main(void) {
};
CHECK_BODY("malloc-aligned6") {
bool ok = true;
- for (size_t align = 1; align <= MI_ALIGNMENT_MAX && ok; align *= 2) {
+ for (size_t align = 1; align <= MI_BLOCK_ALIGNMENT_MAX && ok; align *= 2) {
void* ps[8];
for (int i = 0; i < 8 && ok; i++) {
ps[i] = mi_malloc_aligned(align*13 // size
@@ -170,16 +175,16 @@ int main(void) {
result = ok;
};
CHECK_BODY("malloc-aligned7") {
- void* p = mi_malloc_aligned(1024,MI_ALIGNMENT_MAX);
+ void* p = mi_malloc_aligned(1024,MI_BLOCK_ALIGNMENT_MAX);
mi_free(p);
- result = ((uintptr_t)p % MI_ALIGNMENT_MAX) == 0;
+ result = ((uintptr_t)p % MI_BLOCK_ALIGNMENT_MAX) == 0;
};
CHECK_BODY("malloc-aligned8") {
bool ok = true;
for (int i = 0; i < 5 && ok; i++) {
int n = (1 << i);
- void* p = mi_malloc_aligned(1024, n * MI_ALIGNMENT_MAX);
- ok = ((uintptr_t)p % (n*MI_ALIGNMENT_MAX)) == 0;
+ void* p = mi_malloc_aligned(1024, n * MI_BLOCK_ALIGNMENT_MAX);
+ ok = ((uintptr_t)p % (n*MI_BLOCK_ALIGNMENT_MAX)) == 0;
mi_free(p);
}
result = ok;
@@ -187,7 +192,7 @@ int main(void) {
CHECK_BODY("malloc-aligned9") {
bool ok = true;
void* p[8];
- size_t sizes[8] = { 8, 512, 1024 * 1024, MI_ALIGNMENT_MAX, MI_ALIGNMENT_MAX + 1, 2 * MI_ALIGNMENT_MAX, 8 * MI_ALIGNMENT_MAX, 0 };
+ size_t sizes[8] = { 8, 512, 1024 * 1024, MI_BLOCK_ALIGNMENT_MAX, MI_BLOCK_ALIGNMENT_MAX + 1, 2 * MI_BLOCK_ALIGNMENT_MAX, 8 * MI_BLOCK_ALIGNMENT_MAX, 0 };
for (int i = 0; i < 28 && ok; i++) {
int align = (1 << i);
for (int j = 0; j < 8 && ok; j++) {
@@ -225,6 +230,28 @@ int main(void) {
result = (((uintptr_t)p % 0x100) == 0); // #602
mi_free(p);
}
+ CHECK_BODY("mimalloc-aligned13") {
+ bool ok = true;
+ for( size_t size = 1; size <= (MI_SMALL_SIZE_MAX * 2) && ok; size++ ) {
+ for(size_t align = 1; align <= size && ok; align *= 2 ) {
+ void* p[10];
+ for(int i = 0; i < 10 && ok; i++) {
+ p[i] = mi_malloc_aligned(size,align);;
+ ok = (p[i] != NULL && ((uintptr_t)(p[i]) % align) == 0);
+ }
+ for(int i = 0; i < 10 && ok; i++) {
+ mi_free(p[i]);
+ }
+ /*
+ if (ok && align <= size && ((size + MI_PADDING_SIZE) & (align-1)) == 0) {
+ size_t bsize = mi_good_size(size);
+ ok = (align <= bsize && (bsize & (align-1)) == 0);
+ }
+ */
+ }
+ }
+ result = ok;
+ }
CHECK_BODY("malloc-aligned-at1") {
void* p = mi_malloc_aligned_at(48,32,0); result = (p != NULL && ((uintptr_t)(p) + 0) % 32 == 0); mi_free(p);
};
@@ -295,15 +322,22 @@ int main(void) {
// ---------------------------------------------------
// various
// ---------------------------------------------------
+ #if !defined(MI_TRACK_ASAN) // realpath may leak with ASAN enabled (as the ASAN allocator intercepts it)
CHECK_BODY("realpath") {
char* s = mi_realpath( ".", NULL );
// printf("realpath: %s\n",s);
mi_free(s);
};
+ #endif
CHECK("stl_allocator1", test_stl_allocator1());
CHECK("stl_allocator2", test_stl_allocator2());
+ CHECK("stl_heap_allocator1", test_stl_heap_allocator1());
+ CHECK("stl_heap_allocator2", test_stl_heap_allocator2());
+ CHECK("stl_heap_allocator3", test_stl_heap_allocator3());
+ CHECK("stl_heap_allocator4", test_stl_heap_allocator4());
+
// ---------------------------------------------------
// Done
// ---------------------------------------------------[]
@@ -357,3 +391,61 @@ bool test_stl_allocator2(void) {
return true;
#endif
}
+
+bool test_stl_heap_allocator1(void) {
+#ifdef __cplusplus
+ std::vector<some_struct, mi_heap_stl_allocator<some_struct> > vec;
+ vec.push_back(some_struct());
+ vec.pop_back();
+ return vec.size() == 0;
+#else
+ return true;
+#endif
+}
+
+bool test_stl_heap_allocator2(void) {
+#ifdef __cplusplus
+ std::vector<some_struct, mi_heap_destroy_stl_allocator<some_struct> > vec;
+ vec.push_back(some_struct());
+ vec.pop_back();
+ return vec.size() == 0;
+#else
+ return true;
+#endif
+}
+
+bool test_stl_heap_allocator3(void) {
+#ifdef __cplusplus
+ mi_heap_t* heap = mi_heap_new();
+ bool good = false;
+ {
+ mi_heap_stl_allocator<some_struct> myAlloc(heap);
+ std::vector<some_struct, mi_heap_stl_allocator<some_struct> > vec(myAlloc);
+ vec.push_back(some_struct());
+ vec.pop_back();
+ good = vec.size() == 0;
+ }
+ mi_heap_delete(heap);
+ return good;
+#else
+ return true;
+#endif
+}
+
+bool test_stl_heap_allocator4(void) {
+#ifdef __cplusplus
+ mi_heap_t* heap = mi_heap_new();
+ bool good = false;
+ {
+ mi_heap_destroy_stl_allocator<some_struct> myAlloc(heap);
+ std::vector<some_struct, mi_heap_destroy_stl_allocator<some_struct> > vec(myAlloc);
+ vec.push_back(some_struct());
+ vec.pop_back();
+ good = vec.size() == 0;
+ }
+ mi_heap_destroy(heap);
+ return good;
+#else
+ return true;
+#endif
+}
diff --git a/lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-stress.c b/lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-stress.c
index 7b74b46..15d0e25 100644
--- a/lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-stress.c
+++ b/lib/Utils.Memory/vnlib_mimalloc/vendor/test/test-stress.c
@@ -37,11 +37,12 @@ static int ITER = 50; // N full iterations destructing and re-creating a
// static int THREADS = 8; // more repeatable if THREADS <= #processors
// static int SCALE = 100; // scaling factor
-#define STRESS // undefine for leak test
+#define STRESS // undefine for leak test
static bool allow_large_objects = true; // allow very large objects? (set to `true` if SCALE>100)
static size_t use_one_size = 0; // use single object size of `N * sizeof(uintptr_t)`?
+static bool main_participates = false; // main thread participates as a worker too
// #define USE_STD_MALLOC
#ifdef USE_STD_MALLOC
@@ -276,8 +277,8 @@ int main(int argc, char** argv) {
#ifndef USE_STD_MALLOC
#ifndef NDEBUG
- mi_collect(true);
- //mi_debug_show_arenas();
+ // mi_collect(true);
+ mi_debug_show_arenas(true,true,true);
#endif
mi_stats_print(NULL);
#endif
@@ -301,13 +302,15 @@ static void run_os_threads(size_t nthreads, void (*fun)(intptr_t)) {
thread_entry_fun = fun;
DWORD* tids = (DWORD*)custom_calloc(nthreads,sizeof(DWORD));
HANDLE* thandles = (HANDLE*)custom_calloc(nthreads,sizeof(HANDLE));
- for (uintptr_t i = 0; i < nthreads; i++) {
+ const size_t start = (main_participates ? 1 : 0);
+ for (size_t i = start; i < nthreads; i++) {
thandles[i] = CreateThread(0, 8*1024, &thread_entry, (void*)(i), 0, &tids[i]);
}
- for (size_t i = 0; i < nthreads; i++) {
+ if (main_participates) fun(0); // run the main thread as well
+ for (size_t i = start; i < nthreads; i++) {
WaitForSingleObject(thandles[i], INFINITE);
}
- for (size_t i = 0; i < nthreads; i++) {
+ for (size_t i = start; i < nthreads; i++) {
CloseHandle(thandles[i]);
}
custom_free(tids);
@@ -334,11 +337,13 @@ static void run_os_threads(size_t nthreads, void (*fun)(intptr_t)) {
thread_entry_fun = fun;
pthread_t* threads = (pthread_t*)custom_calloc(nthreads,sizeof(pthread_t));
memset(threads, 0, sizeof(pthread_t) * nthreads);
+ const size_t start = (main_participates ? 1 : 0);
//pthread_setconcurrency(nthreads);
- for (size_t i = 0; i < nthreads; i++) {
+ for (size_t i = start; i < nthreads; i++) {
pthread_create(&threads[i], NULL, &thread_entry, (void*)i);
}
- for (size_t i = 0; i < nthreads; i++) {
+ if (main_participates) fun(0); // run the main thread as well
+ for (size_t i = start; i < nthreads; i++) {
pthread_join(threads[i], NULL);
}
custom_free(threads);
diff --git a/lib/Utils.Memory/vnlib_rpmalloc/CMakeLists.txt b/lib/Utils.Memory/vnlib_rpmalloc/CMakeLists.txt
index 706050c..fedde80 100644
--- a/lib/Utils.Memory/vnlib_rpmalloc/CMakeLists.txt
+++ b/lib/Utils.Memory/vnlib_rpmalloc/CMakeLists.txt
@@ -1,18 +1,17 @@
cmake_minimum_required(VERSION 3.10)
project(vnlib_rpmalloc C)
-set(CMAKE_PROJECT_NAME "vnlib_rpmalloc")
+set(_RP_PROJ_NAME "vnlib_rpmalloc")
option(ENABLE_GREEDY "Enable greedy allocator configuration" ON)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The build configuration type")
+string(TOLOWER ${CMAKE_BUILD_TYPE} build_type)
+message(STATUS "Build type is '${build_type}'")
+
#Setup the compiler options
set(CMAKE_C_STANDARD 11) #c11 is required for rpmalloc static assertions
set(CMAKE_C_STANDARD_REQUIRED ON)
-set(CMAKE_POSITION_INDEPENDENT_CODE ON) #enable position independent code (for shared libraries with exports)
-
-string(TOLOWER ${CMAKE_BUILD_TYPE} build_type)
-message(STATUS "Build type is '${build_type}'")
#export header files to the main project
file(GLOB HEADERS *.h)
@@ -27,19 +26,29 @@ set(VNLIB_RPMALLOC_SOURCES
include_directories(vendor)
#create shared/static libs
-add_library(${CMAKE_PROJECT_NAME} SHARED ${VNLIB_RPMALLOC_SOURCES} ${HEADERS})
-add_library(${CMAKE_PROJECT_NAME}_static STATIC ${VNLIB_RPMALLOC_SOURCES} ${HEADERS})
+add_library(${_RP_PROJ_NAME} SHARED ${VNLIB_RPMALLOC_SOURCES} ${HEADERS})
+add_library(${_RP_PROJ_NAME}_static STATIC ${VNLIB_RPMALLOC_SOURCES} ${HEADERS})
+#enable fPIC for shared library
+set_target_properties(${_RP_PROJ_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
#if on unix lib will be appended, so we can adjust
if(UNIX)
- set_target_properties(${CMAKE_PROJECT_NAME} ${CMAKE_PROJECT_NAME}_static PROPERTIES OUTPUT_NAME vn_rpmalloc)
+ set_target_properties(
+ ${_RP_PROJ_NAME} ${_RP_PROJ_NAME}_static
+
+ PROPERTIES
+ OUTPUT_NAME
+ vn_rpmalloc
+ )
endif()
+set(_RP_COMP_ARGS)
+set(_RP_COMP_DEFS)
#setup flags for windows compilation
if(MSVC)
- add_compile_options(
+ list(APPEND _RP_COMP_ARGS
/Qspectre
/sdl
/TC
@@ -61,7 +70,7 @@ if(MSVC)
$<$<CONFIG:Debug>:/showIncludes>
)
- add_compile_definitions(
+ list(APPEND _RP_COMP_DEFS
$<$<CONFIG:DEBUG>:DEBUG>
$<$<CONFIG:RELEASE>:RELEASE>
)
@@ -69,14 +78,14 @@ if(MSVC)
#configure gcc flags
elseif(CMAKE_COMPILER_IS_GNUCC)
- add_compile_options(
+ list(APPEND _RP_COMP_ARGS
-Wextra
-fstack-protector
)
#enable debug compiler options
if(build_type STREQUAL "debug")
- add_compile_options(
+ list(APPEND _RP_COMP_ARGS
-g #enable debugger info
-Og #disable optimizations
-Wall #enable all warnings
@@ -90,9 +99,11 @@ else()
endif()
#enable required features
-add_compile_definitions(
+list(APPEND _RP_COMP_DEFS
RPMALLOC_FIRST_CLASS_HEAPS=1
ENABLE_ADAPTIVE_THREAD_CACHE=1
+ ENABLE_THREAD_CACHE=1 #always enable per-thred cache
+ ENABLE_OVERRIDE=0 #disable malloc override, not needed for our uses
#add some debugging/tracing for debug mode
$<$<CONFIG:Debug>:ENABLE_TRACE=1>
@@ -101,28 +112,28 @@ add_compile_definitions(
if(ENABLE_GREEDY)
- add_compile_definitions(
+ list(APPEND _RP_COMP_DEFS
#if greedy is enabled, add greedy options
ENABLE_UNLIMITED_CACHE=1
- ENABLE_UNLIMITED_GLOBAL_CACHE=1
- ENABLE_UNLIMITED_THREAD_CACHE=1
-
#On by default but we otherwise disable global cache to really reduce commited size
ENABLE_GLOBAL_CACHE=1
- ENABLE_UNLIMITED_GLOBAL_CACHE=1
)
else()
- add_compile_definitions(
+ list(APPEND _RP_COMP_DEFS
#disable greedy definitions
ENABLE_UNLIMITED_CACHE=0
- ENABLE_UNLIMITED_GLOBAL_CACHE=0
- ENABLE_UNLIMITED_THREAD_CACHE=0
ENABLE_GLOBAL_CACHE=0
-
- #also disable unlimited global cache to release spans to OS
- ENABLE_UNLIMITED_GLOBAL_CACHE=0
+ DISABLE_UNMAP=0 #allow unmapping of pages during free instead of global cache
)
endif()
+
+#add the definitions to the project
+target_compile_definitions(${_RP_PROJ_NAME} PRIVATE ${_RP_COMP_DEFS})
+target_compile_definitions(${_RP_PROJ_NAME}_static PRIVATE ${_RP_COMP_DEFS})
+
+#add the compiler flags to the project
+target_compile_options(${_RP_PROJ_NAME} PRIVATE ${_RP_COMP_ARGS})
+target_compile_options(${_RP_PROJ_NAME}_static PRIVATE ${_RP_COMP_ARGS}) \ No newline at end of file
diff --git a/lib/Utils.Memory/vnlib_rpmalloc/Taskfile.yaml b/lib/Utils.Memory/vnlib_rpmalloc/Taskfile.yaml
index 40bdc7c..98dd914 100644
--- a/lib/Utils.Memory/vnlib_rpmalloc/Taskfile.yaml
+++ b/lib/Utils.Memory/vnlib_rpmalloc/Taskfile.yaml
@@ -42,23 +42,15 @@ tasks:
#get licenses for debug
- task: licenses
- vars:
- TARGET: './build/Debug'
+ vars: { TARGET: './build/Debug' }
- task: licenses
- vars:
- TARGET: './build/Release'
-
+ vars: { TARGET: './build/Release' }
- #static debug lib
- - cd build/Debug && tar -czf '../../bin/msvc-x64-debug-{{.PROJECT_NAME}}-static.tgz' {{.PROJECT_NAME}}_static.lib {{.TAR_FILES}} {{.PROJECT_NAME}}_static.pdb
#dynamic debug lib
- - cd build/Debug && tar -czf '../../bin/msvc-x64-debug-{{.PROJECT_NAME}}.tgz' {{.PROJECT_NAME}}.dll {{.TAR_FILES}} {{.PROJECT_NAME}}.pdb
-
- #release static lib
- - cd build/Release && tar -czf '../../bin/msvc-x64-release-{{.PROJECT_NAME}}-static.tgz' {{.PROJECT_NAME}}_static.lib {{.TAR_FILES}}
+ - cd build/Debug && tar -czf '../../bin/msvc-x64-debug-{{.PROJECT_NAME}}.tgz' .
#release dll
- - cd build/Release && tar -czf '../../bin/msvc-x64-release-{{.PROJECT_NAME}}.tgz' {{.PROJECT_NAME}}.dll {{.TAR_FILES}}
+ - cd build/Release && tar -czf '../../bin/msvc-x64-release-{{.PROJECT_NAME}}.tgz' .
#source code
- task: pack_source
diff --git a/lib/Utils/src/Extensions/MemoryExtensions.cs b/lib/Utils/src/Extensions/MemoryExtensions.cs
index 65d90a0..c433527 100644
--- a/lib/Utils/src/Extensions/MemoryExtensions.cs
+++ b/lib/Utils/src/Extensions/MemoryExtensions.cs
@@ -146,8 +146,13 @@ namespace VNLib.Utils.Extensions
/// <exception cref="OutOfMemoryException"></exception>
/// <exception cref="ObjectDisposedException"></exception>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static MemoryManager<T> DirectAlloc<T>(this IUnmangedHeap heap, nuint size, bool zero = false) where T : unmanaged
+ public static MemoryManager<T> DirectAlloc<T>(this IUnmangedHeap heap, int size, bool zero = false) where T : unmanaged
{
+ /*
+ * Size it limited to int32 because the memory manager uses int32 for length
+ * and the constructor will attempt to cast the size to int32 or cause an
+ * overflow exception
+ */
MemoryHandle<T> handle = heap.Alloc<T>(size, zero);
return new SysBufferMemoryManager<T>(handle, true);
}
@@ -177,24 +182,6 @@ namespace VNLib.Utils.Extensions
//Method only exists for consistancy since unsafe handles are always 32bit
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int GetIntLength<T>(this in UnsafeMemoryHandle<T> handle) where T : unmanaged => handle.IntLength;
-
- /// <summary>
- /// Allows direct allocation of a fixed size <see cref="MemoryManager{T}"/> from a <see cref="IUnmangedHeap"/> instance
- /// of the specified number of elements
- /// </summary>
- /// <typeparam name="T">The unmanaged data type</typeparam>
- /// <param name="heap"></param>
- /// <param name="size">The number of elements to allocate on the heap</param>
- /// <param name="zero">Optionally zeros conents of the block when allocated</param>
- /// <returns>The <see cref="MemoryManager{T}"/> wrapper around the block of memory</returns>
- /// <exception cref="OverflowException"></exception>
- /// <exception cref="ArgumentOutOfRangeException"></exception>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static MemoryManager<T> DirectAlloc<T>(this IUnmangedHeap heap, nint size, bool zero = false) where T : unmanaged
- {
- ArgumentOutOfRangeException.ThrowIfNegative(size);
- return DirectAlloc<T>(heap, (nuint)size, zero);
- }
/// <summary>
/// Gets an offset pointer from the base postion to the number of bytes specified. Performs bounds checks
@@ -578,6 +565,27 @@ namespace VNLib.Utils.Extensions
#region VnBufferWriter
/// <summary>
+ /// Appends the string value by copying it to the internal buffer
+ /// </summary>
+ /// <param name="buffer"></param>
+ /// <param name="value">The string value to append to the buffer</param>
+ /// <exception cref="ArgumentOutOfRangeException"></exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static void Append(this ref ForwardOnlyWriter<char> buffer, string? value)
+ => buffer.Append(value.AsSpan());
+
+ /// <summary>
+ /// Appends the string value by copying it to the internal buffer
+ /// when the string is known to be very short.
+ /// </summary>
+ /// <param name="buffer"></param>
+ /// <param name="value">The string value to append to the buffer</param>
+ /// <exception cref="ArgumentOutOfRangeException"></exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static void AppendSmall(this ref ForwardOnlyWriter<char> buffer, string? value)
+ => buffer.AppendSmall(value.AsSpan());
+
+ /// <summary>
/// Formats and appends a value type to the writer with proper endianess
/// </summary>
/// <param name="buffer"></param>
@@ -636,12 +644,20 @@ namespace VNLib.Utils.Extensions
/// <param name="formatProvider"></param>
/// <exception cref="ArgumentOutOfRangeException"></exception>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static void Append<T>(this ref ForwardOnlyWriter<char> buffer, T value, ReadOnlySpan<char> format = default, IFormatProvider? formatProvider = default) where T : ISpanFormattable
+ public static void Append<T>(
+ this ref ForwardOnlyWriter<char> buffer,
+ T value,
+ ReadOnlySpan<char> format = default,
+ IFormatProvider? formatProvider = default
+ ) where T : ISpanFormattable
{
//Format value and write to buffer
if (!value.TryFormat(buffer.Remaining, out int charsWritten, format, formatProvider))
{
- throw new ArgumentOutOfRangeException(nameof(buffer), "The value could not be formatted and appended to the buffer, because there is not enough available space");
+ throw new ArgumentOutOfRangeException(
+ nameof(buffer),
+ "The value could not be formatted and appended to the buffer, because there is not enough available space"
+ );
}
//Update written posiion
buffer.Advance(charsWritten);
@@ -657,12 +673,20 @@ namespace VNLib.Utils.Extensions
/// <exception cref="OutOfMemoryException"></exception>
/// <exception cref="ArgumentOutOfRangeException"></exception>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static void Append<T>(this ref ForwardOnlyMemoryWriter<char> buffer, T value, ReadOnlySpan<char> format = default, IFormatProvider? formatProvider = default) where T : ISpanFormattable
+ public static void Append<T>(
+ this ref ForwardOnlyMemoryWriter<char> buffer,
+ T value,
+ ReadOnlySpan<char> format = default,
+ IFormatProvider? formatProvider = default
+ ) where T : ISpanFormattable
{
//Format value and write to buffer
if (!value.TryFormat(buffer.Remaining.Span, out int charsWritten, format, formatProvider))
{
- throw new ArgumentOutOfRangeException(nameof(buffer), "The value could not be formatted and appended to the buffer, because there is not enough available space");
+ throw new ArgumentOutOfRangeException(
+ nameof(buffer),
+ "The value could not be formatted and appended to the buffer, because there is not enough available space"
+ );
}
//Update written posiion
buffer.Advance(charsWritten);
diff --git a/lib/Utils/src/Extensions/StringExtensions.cs b/lib/Utils/src/Extensions/StringExtensions.cs
index c71d5a0..e9bbfbd 100644
--- a/lib/Utils/src/Extensions/StringExtensions.cs
+++ b/lib/Utils/src/Extensions/StringExtensions.cs
@@ -460,7 +460,7 @@ namespace VNLib.Utils.Extensions
public static int Replace(this Span<char> buffer, ReadOnlySpan<char> search, ReadOnlySpan<char> replace)
{
ForwardOnlyWriter<char> writer = new (buffer);
- writer.Replace(search, replace);
+ Replace(ref writer, search, replace);
return writer.Written;
}
@@ -496,9 +496,9 @@ namespace VNLib.Utils.Extensions
do
{
//Append the data before the search chars
- writer2.Append(buffer[..start]);
+ writer2.Append<char>(buffer[..start]);
//Append the replacment
- writer2.Append(replace);
+ writer2.Append<char>(replace);
//Shift buffer to the end of the
buffer = buffer[(start + searchLen)..];
//search for next index beyond current index
diff --git a/lib/Utils/src/Memory/ForwardOnlyWriter.cs b/lib/Utils/src/Memory/ForwardOnlyWriter.cs
index d3c33a2..55e3b11 100644
--- a/lib/Utils/src/Memory/ForwardOnlyWriter.cs
+++ b/lib/Utils/src/Memory/ForwardOnlyWriter.cs
@@ -23,6 +23,7 @@
*/
using System;
+using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
namespace VNLib.Utils.Memory
@@ -30,12 +31,22 @@ namespace VNLib.Utils.Memory
/// <summary>
/// Provides a stack based buffer writer
/// </summary>
- public ref struct ForwardOnlyWriter<T>
+ /// <remarks>
+ /// Creates a new <see cref="ForwardOnlyWriter{T}"/> assigning the specified buffer
+ /// at the specified offset
+ /// </remarks>
+ /// <param name="buffer">The buffer to write data to</param>
+ /// <param name="offset">The offset to begin the writer at</param>
+ [method: MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public ref struct ForwardOnlyWriter<T>(Span<T> buffer, int offset)
{
+ //Cache reference to the first value
+ private readonly ref T _basePtr = ref MemoryMarshal.GetReference(buffer);
+
/// <summary>
/// The buffer for writing output data to
/// </summary>
- public readonly Span<T> Buffer { get; }
+ public readonly Span<T> Buffer { get; } = buffer[offset..];
/// <summary>
/// The number of characters written to the buffer
@@ -57,43 +68,79 @@ namespace VNLib.Utils.Memory
/// </summary>
/// <param name="buffer">The buffer to write data to</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ForwardOnlyWriter(Span<T> buffer)
- {
- Buffer = buffer;
- Written = 0;
- }
+ public ForwardOnlyWriter(Span<T> buffer): this(buffer, 0)
+ { }
/// <summary>
- /// Creates a new <see cref="ForwardOnlyWriter{T}"/> assigning the specified buffer
- /// at the specified offset
+ /// Returns a compiled string from the characters written to the buffer
/// </summary>
- /// <param name="buffer">The buffer to write data to</param>
- /// <param name="offset">The offset to begin the writer at</param>
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ForwardOnlyWriter(Span<T> buffer, int offset)
+ /// <returns>A string of the characters written to the buffer</returns>
+ public readonly override string ToString() => Buffer[..Written].ToString();
+
+ /// <summary>
+ /// Appends a sequence to the buffer
+ /// </summary>
+ /// <param name="data">The data sequence to append to the buffer</param>
+ /// <exception cref="ArgumentOutOfRangeException"></exception>
+ public void Append<TClass>(ReadOnlySpan<T> data) where TClass : class, T
{
- Buffer = buffer[offset..];
- Written = 0;
+ //Make sure the current window is large enough to buffer the new string
+ ArgumentOutOfRangeException.ThrowIfGreaterThan(data.Length, RemainingSize, nameof(Remaining));
+
+ //write data to window
+ data.CopyTo(Remaining);
+
+ //update char position
+ Written += data.Length;
}
/// <summary>
- /// Returns a compiled string from the characters written to the buffer
+ /// Appends a sequence to the buffer of a value type by copying source
+ /// memory to internal buffer memory
/// </summary>
- /// <returns>A string of the characters written to the buffer</returns>
- public readonly override string ToString() => Buffer[..Written].ToString();
+ /// <typeparam name="TStruct"></typeparam>
+ /// <param name="data">The data sequence to append to the buffer</param>
+ /// <exception cref="ArgumentOutOfRangeException"></exception>
+ public void Append<TStruct>(ReadOnlySpan<TStruct> data) where TStruct : struct, T
+ {
+ //Make sure the current window is large enough to buffer the new string
+ ArgumentOutOfRangeException.ThrowIfGreaterThan(data.Length, RemainingSize, nameof(Remaining));
+
+ //write data to window
+ MemoryUtil.Memmove(
+ in MemoryMarshal.GetReference(data),
+ 0,
+ ref Unsafe.As<T, TStruct>(ref _basePtr), //Reinterpret the ref to the local scope type,
+ (nuint)Written,
+ (nuint)data.Length
+ );
+
+ //update char position
+ Written += data.Length;
+ }
/// <summary>
- /// Appends a sequence to the buffer
+ /// Appends a sequence to the buffer of a value type by copying source
+ /// memory to internal buffer memory, when the buffer size is known to be
+ /// smaller than <see cref="ushort.MaxValue"/>.
/// </summary>
- /// <param name="data">The data to append to the buffer</param>
+ /// <typeparam name="TStruct"></typeparam>
+ /// <param name="data">The data sequence to append to the buffer</param>
/// <exception cref="ArgumentOutOfRangeException"></exception>
- public void Append(ReadOnlySpan<T> data)
+ public void AppendSmall<TStruct>(ReadOnlySpan<TStruct> data) where TStruct : struct, T
{
//Make sure the current window is large enough to buffer the new string
ArgumentOutOfRangeException.ThrowIfGreaterThan(data.Length, RemainingSize, nameof(Remaining));
- Span<T> window = Buffer[Written..];
+
//write data to window
- data.CopyTo(window);
+ MemoryUtil.SmallMemmove(
+ in MemoryMarshal.GetReference(data),
+ 0,
+ ref Unsafe.As<T, TStruct>(ref _basePtr), //Reinterpret the ref to the local scope type,
+ (nuint)Written,
+ (ushort)data.Length
+ );
+
//update char position
Written += data.Length;
}
@@ -103,12 +150,21 @@ namespace VNLib.Utils.Memory
/// </summary>
/// <param name="c">The item to append to the buffer</param>
/// <exception cref="ArgumentOutOfRangeException"></exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Append(T c)
{
//Make sure the current window is large enough to buffer the new string
ArgumentOutOfRangeException.ThrowIfZero(RemainingSize);
- //Write data to buffer and increment the buffer position
- Buffer[Written++] = c;
+
+ /*
+ * Calc pointer to last written position.
+ * Written points to the address directly after the last written element
+ */
+
+ ref T offset = ref Unsafe.Add(ref _basePtr, Written);
+ offset = c;
+
+ Written++;
}
/// <summary>
@@ -116,6 +172,7 @@ namespace VNLib.Utils.Memory
/// </summary>
/// <param name="count">The number of elements to advance the writer by</param>
/// <exception cref="ArgumentOutOfRangeException"></exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Advance(int count)
{
ArgumentOutOfRangeException.ThrowIfGreaterThan(count, RemainingSize, nameof(Remaining));
@@ -126,6 +183,7 @@ namespace VNLib.Utils.Memory
/// Resets the writer by setting the <see cref="Written"/>
/// property to 0.
/// </summary>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Reset() => Written = 0;
}
}
diff --git a/lib/Utils/src/Memory/IUnmangedHeap.cs b/lib/Utils/src/Memory/IUnmangedHeap.cs
index fdc0f9b..e6f82e0 100644
--- a/lib/Utils/src/Memory/IUnmangedHeap.cs
+++ b/lib/Utils/src/Memory/IUnmangedHeap.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Utils
@@ -42,7 +42,10 @@ namespace VNLib.Utils.Memory
/// <param name="size">The size (in bytes) of the element</param>
/// <param name="elements">The number of elements to allocate</param>
/// <param name="zero">An optional parameter to zero the block of memory</param>
- /// <returns></returns>
+ /// <returns>A memory address to a valid block on the heap</returns>
+ /// <remarks>
+ /// If the heap is unable to allocate the requested memory, an OutOfMemoryException will be thrown
+ /// </remarks>
/// <exception cref="OutOfMemoryException"></exception>
IntPtr Alloc(nuint elements, nuint size, bool zero);
diff --git a/lib/Utils/src/Memory/MemoryUtil.CopyUtilCore.cs b/lib/Utils/src/Memory/MemoryUtil.CopyUtilCore.cs
index f196597..9decef7 100644
--- a/lib/Utils/src/Memory/MemoryUtil.CopyUtilCore.cs
+++ b/lib/Utils/src/Memory/MemoryUtil.CopyUtilCore.cs
@@ -126,7 +126,7 @@ namespace VNLib.Utils.Memory
Debug.Assert(!Unsafe.IsNullRef(in srcByte), "Null source reference passed to MemmoveByRef");
Debug.Assert(!Unsafe.IsNullRef(in dstByte), "Null destination reference passed to MemmoveByRef");
- //Check for 64bit copy
+ //Check for 64bit copy (should get optimized away when sizeof(nuint == uint) aka 32bit platforms)
if(byteCount > uint.MaxValue)
{
//We need a 64bit copy strategy
@@ -135,7 +135,6 @@ namespace VNLib.Utils.Memory
//Must be supported
if(_avxCopy.Features != CopyFeatures.NotSupported)
{
- //Copy
_avxCopy.Memmove(in srcByte, ref dstByte, byteCount);
return;
}
@@ -144,7 +143,6 @@ namespace VNLib.Utils.Memory
//try reflected memove incase it supports 64bit blocks
if(_reflectedMemmove.Features != CopyFeatures.NotSupported)
{
- //Copy
_reflectedMemmove.Memmove(in srcByte, ref dstByte, byteCount);
return;
}
@@ -223,6 +221,7 @@ namespace VNLib.Utils.Memory
public CopyFeatures Features => CopyFeatures.None;
///<inheritdoc/>
+ [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
public void Memmove(ref readonly byte src, ref byte dst, nuint byteCount)
{
Debug.Assert(byteCount < uint.MaxValue, "Byte count must be less than uint.MaxValue and flags assumed 64bit blocks were supported");
diff --git a/lib/Utils/src/Memory/NativeHeap.cs b/lib/Utils/src/Memory/NativeHeap.cs
index 6381dd9..fb9612c 100644
--- a/lib/Utils/src/Memory/NativeHeap.cs
+++ b/lib/Utils/src/Memory/NativeHeap.cs
@@ -106,7 +106,7 @@ namespace VNLib.Utils.Memory
private HeapMethods MethodTable;
- private unsafe NativeHeap(UnmanagedHeapDescriptor* flags, HeapMethods methodTable) :base(flags->CreationFlags, true)
+ private unsafe NativeHeap(UnmanagedHeapDescriptor* flags, HeapMethods methodTable) : base(flags->CreationFlags, true)
{
//Store heap pointer
SetHandle(flags->HeapPointer);
@@ -164,7 +164,7 @@ namespace VNLib.Utils.Memory
delegate ERRNO DestroyHeapDelegate(IntPtr heap);
[StructLayout(LayoutKind.Sequential)]
- record struct UnmanagedHeapDescriptor
+ struct UnmanagedHeapDescriptor
{
public IntPtr HeapPointer;
diff --git a/lib/Utils/src/Memory/UnmanagedHeapBase.cs b/lib/Utils/src/Memory/UnmanagedHeapBase.cs
index 599d8d9..7f42761 100644
--- a/lib/Utils/src/Memory/UnmanagedHeapBase.cs
+++ b/lib/Utils/src/Memory/UnmanagedHeapBase.cs
@@ -67,7 +67,7 @@ namespace VNLib.Utils.Memory
DangerousAddRef(ref handleCountIncremented);
//Failed to increment ref count, class has been disposed
- ObjectDisposedException.ThrowIf(handleCountIncremented == false, "The handle has been released");
+ ObjectDisposedException.ThrowIf(handleCountIncremented == false, this);
try
{
diff --git a/lib/Utils/src/VNLib.Utils.csproj b/lib/Utils/src/VNLib.Utils.csproj
index 7941a7b..83d245c 100644
--- a/lib/Utils/src/VNLib.Utils.csproj
+++ b/lib/Utils/src/VNLib.Utils.csproj
@@ -2,16 +2,19 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
+ <Nullable>enable</Nullable>
<RootNamespace>VNLib.Utils</RootNamespace>
<AssemblyName>VNLib.Utils</AssemblyName>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <Nullable>enable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
- <AnalysisLevel>latest-all</AnalysisLevel>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
</PropertyGroup>
<PropertyGroup>
+ <AnalysisLevel Condition="'$(BuildingInsideVisualStudio)' == true">latest-all</AnalysisLevel>
+ </PropertyGroup>
+
+ <PropertyGroup>
<PackageId>VNLib.Utils</PackageId>
<Authors>Vaughn Nugent</Authors>
<Company>Vaughn Nugent</Company>
diff --git a/vnlib.core.build.sln b/vnlib.core.build.sln
index 74d26ca..3463ebd 100644
--- a/vnlib.core.build.sln
+++ b/vnlib.core.build.sln
@@ -40,6 +40,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compression", "Compression"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Net.Compression", "lib\Net.Compression\VNLib.Net.Compression\VNLib.Net.Compression.csproj", "{4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Net.CompressionTests", "lib\Net.Compression\VNLib.Net.CompressionTests\VNLib.Net.CompressionTests.csproj", "{E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utils", "Utils", "{C8AB039C-E368-4C51-920D-06F2CEB2C95A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.UtilsTests", "lib\Utils\tests\VNLib.UtilsTests.csproj", "{45EBB278-46D3-40D3-B358-0EBDC622F377}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -194,12 +200,39 @@ Global
{4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Release|x64.Build.0 = Release|Any CPU
{4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Release|x86.ActiveCfg = Release|Any CPU
{4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Release|x86.Build.0 = Release|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Debug|x64.Build.0 = Debug|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Debug|x86.Build.0 = Debug|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Release|x64.ActiveCfg = Release|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Release|x64.Build.0 = Release|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Release|x86.ActiveCfg = Release|Any CPU
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD}.Release|x86.Build.0 = Release|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Debug|x64.Build.0 = Debug|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Debug|x86.Build.0 = Debug|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Release|Any CPU.Build.0 = Release|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Release|x64.ActiveCfg = Release|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Release|x64.Build.0 = Release|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Release|x86.ActiveCfg = Release|Any CPU
+ {45EBB278-46D3-40D3-B358-0EBDC622F377}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
+ {ED9B6918-1129-485F-9278-F9BCF13FE161} = {C8AB039C-E368-4C51-920D-06F2CEB2C95A}
{4F7DCA8A-8B67-4277-8F14-FA43E479CB9B} = {A7EC3CF5-76B0-4235-AE9F-05409E3308B9}
+ {E7A3F143-197B-49D2-BDF1-AC6FFE64C5AD} = {A7EC3CF5-76B0-4235-AE9F-05409E3308B9}
+ {45EBB278-46D3-40D3-B358-0EBDC622F377} = {C8AB039C-E368-4C51-920D-06F2CEB2C95A}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {EA12D69B-8232-40F9-98F8-8A1C73796BFE}